ปัญหาการเขียนสคริปต์ Arduino

ขณะนี้ฉันกำลังพยายามสร้างรถ RC บน Arduino และประสบปัญหาต่อไปนี้ ซึ่งฉันไม่สามารถรีเซ็ต L298P Motor Driver (By Keyes) Shield เพื่อหยุดมอเตอร์ไม่ให้เคลื่อนที่ได้ (โดยใช้มอเตอร์เพียงตัวเดียวที่พอร์ต Motor B)

โดยพื้นฐานแล้ว มอเตอร์จะหมุนไปในทิศทางเดียวและไม่หยุดเมื่อตำแหน่งของ JoyStick ถูกรีเซ็ต

นี่คือรหัสปัจจุบันที่ฉันใช้ (รวมถึงการทดลองที่น่าสมเพชของฉันด้วย)

#include <Servo.h>
Servo myservo;

#include <LiquidCrystal.h>
LiquidCrystal lcd(2, 3, 5, 6, 7, 8);

int JoyStick_X = 0; //Analog
int JoyStick_Y = 1; //Analog
int JoyStick_Z = 1; //Digital

int SpeedPin = 11;
int Direction = 13;

void setup(void) {
  myservo.attach(9);

  lcd.begin(16, 2);
  lcd.clear();

  pinMode(JoyStick_Z, INPUT_PULLUP);

  pinMode(Direction, OUTPUT);


  Serial.begin(9600);
}

void loop(void) {
  int x, y, z;
  x = analogRead(JoyStick_X);
  y = analogRead(JoyStick_Y);
  z = digitalRead(JoyStick_Z);

  lcd.setCursor(0, 0);
  lcd.print("Car Status");

  lcd.setCursor(0, 1);
  lcd.print("Spd:");
  lcd.print(x);
  /* if (z == 0) {
     lcd.print("High");
    }
    else if (z == 0 && x < 250) {
     lcd.print("RHgh");
    }
    else if (x > 510 && x < 530) {
     lcd.print("No  ");
    }
    else if (x > 530 && x < 730) {
     lcd.print("Low ");
    }
    else if (x > 730) {
     lcd.print("Med ");
    }
    else if (x < 510 && x > 250) {
     lcd.print("RLow");
    }
    else if (x < 250) {
     lcd.print("RMed");
    }*/

  lcd.print(" ");
  lcd.setCursor(10, 1);
  lcd.print("Trn:");

  if (y < 500) {
    lcd.print("L ");
  }
  else if (525 > y && y > 500) {
    lcd.print("-");
  }
  else if (y > 525) {
    lcd.print("R ");
  }

  lcd.setCursor(11, 0);
  lcd.print("Bst:");
  if (z == 0) {
    lcd.print("Y");
  }
  else {
    lcd.print("N");
  }

  myservo.write(40 + y * 8.7890625 / 100);

    if (x > 530) {
      digitalWrite(Direction, HIGH);
    }
    else if (x < 510) {
      digitalWrite(Direction, LOW);
    }
    if (x > 510 && x < 530) {
      digitalWrite(0, 0);
    }


  //int speed = ((0.520408 * x ) - 275.816326 );

  analogWrite(SpeedPin, 255);

  /*int value = 255;
    digitalWrite(M1,LOW);

    analogWrite(E1, value);*/


/*var n;
  switch (n)
  {
    case 1:
      digitalWrite(Direction, HIGH);
      break;
    case 2:
      digitalWrite(Direction, LOW);
      break;
    default:
      digitalWrite(0, 0);
  }*/
}

person Kunal Gehlot    schedule 13.07.2017    source แหล่งที่มา
comment
แล้วคุณพยายามหยุดมอเตอร์ที่ไหน?   -  person gre_gor    schedule 13.07.2017


คำตอบ (1)


ฉันคิดว่าคุณขาด analogWrite(SpeedPin, 0); ที่ไหนสักแห่งในรหัสของคุณ เนื่องจาก SpeedPin ดูเหมือนจะเป็นวิธีควบคุมความเร็วของคุณ คุณจึงต้องเขียนศูนย์เพื่อหยุด

person TomServo    schedule 13.07.2017