2017-07-13 2 views
1

J'essaie actuellement de faire une voiture RC sur Arduino et face au problème suivant, où je suis incapable de réinitialiser le L298P moteur Driver (By Keyes) Shield pour arrêter le moteur de se déplacer (En utilisant un seul moteur au port du moteur B). Fondamentalement, le moteur se bloque dans une direction en tournant et ne s'arrête pas lorsque la position de JoyStick est remise à zéro.Arduino Scripting

Voici le code que j'utilise actuellement. (Inclut également mes essais pathétiques).

#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); 
    }*/ 
} 
+0

Et où essayez-vous d'arrêter le moteur? –

Répondre

0

Je pense que vous êtes absent analogWrite(SpeedPin, 0); quelque part dans votre code. Depuis SpeedPin semble être comment vous contrôlez la vitesse, vous devez écrire un zéro pour arrêter.