Проблема со скриптами на ардуино

В настоящее время я пытаюсь сделать радиоуправляемую машину на Arduino и столкнулся со следующей проблемой: я не могу сбросить щит драйвера двигателя L298P (от Keyes), чтобы двигатель не двигался (используя только один двигатель на порте двигателя B).

По сути, двигатель вращается в одном направлении и не останавливается, когда положение джойстика сбрасывается.

Вот текущий код, который я использую. (Также включает мои жалкие испытания).

#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