2017-09-25 1 views
2

J'ai besoin d'aide pour activer et désactiver un bouton dans Arduino. J'essaie de faire ma propre voiture Arduino pour mes cours dans ma leçon de technologie.Fonction d'activation et de désactivation du bouton Arduino

Il s'agit d'un circuit à transistor connecté à 2 moteurs, une carte Arduino et un blindage de capteur Arduino v5.0. Le code que j'ai tapé fonctionnait pour une fonction marche/arrêt, mais il ne s'éteignait pas, il ne restait que pour toujours.

Code pour la première:

//variables 
int led = 13; //led on indicator 
int motor1 = 12; //right motor 
int motor2 = 11; //left motor 
int button = A0; //on and off button 
int val = 0; //value for on press button 

void setup() { 
    //setting up code to definition of pins 
    Serial.begin(9600); 
    pinMode(led, OUTPUT); 
    pinMode(motor1, OUTPUT); 
    pinMode(motor2, OUTPUT); 
    pinMode(button, INPUT); 
} 

void loop() { 
    //looping the code to execute 
    //button code for on and off 
    val = digitalRead(button); 
    if (val == LOW) { 
    digitalWrite(led, HIGH); 
    start_driving(); 
    Serial.println("Turned on!"); 
    Serial.println("It is driving!"); 
    } else { 
    Serial.println("Not turned on!"); 
    } 
} 

//functions 
void start_driving() { 
    //The driving function 
    digitalWrite(motor1, HIGH); 
    digitalWrite(motor2, HIGH); 
    delay(500); 
    turn_left(); 
    digitalWrite(motor1, HIGH); 
    digitalWrite(motor2, HIGH); 
    delay(500); 
    turn_right(); 
    digitalWrite(motor1, HIGH); 
    digitalWrite(motor2, HIGH); 
    delay(1000); 
} 

//turn right 
void turn_right() { 
    //turning right at 90 degrees 
    digitalWrite(motor1, LOW); 
    digitalWrite(motor2, HIGH); 
    delay(500); 
    digitalWrite(motor1, LOW); 
    digitalWrite(motor2, LOW); 
    delay(78); 
} 

//turn left 
void turn_left() { 
    //turning left a 90 degrees 
    digitalWrite(motor1, HIGH); 
    digitalWrite(motor2, LOW); 
    delay(500); 
    digitalWrite(motor1, LOW); 
    digitalWrite(motor2, LOW); 
    delay(78); 
} 

Et maintenant, je fais un nouveau fichier .ino pour commencer à nouveau (je l'ai toujours gardé le premier encore), mais je suis en train de faire un bouton et hors fonction pour allumer la led et également activer une fonction vide appelée

void start_driving() { 
} 

J'espère que vous obtenez ce que je veux dire et j'espérais que j'avait un sens. Oh, et vous pouvez m'aider à résoudre la fonction de conduite si vous voulez aussi, comme m'aider avec le tournant à droite ou à gauche ou aller en avant ou en arrière. Alors pouvez-vous s'il vous plaît m'aider s'il vous plaît?

+0

Utilisez-vous Pulldowns? –

+0

"Alors pouvez-vous s'il vous plaît m'aider s'il vous plaît?". Il suffit de poster une question. Vous n'avez pas à demander de l'aide ... – Piglet

Répondre

0

La raison pour laquelle il ne s'arrête pas est facile: vous ne leur avez jamais dit d'arrêter. Dans le cas où vous éteignez le bouton, la fonction start_driving() sera terminée et les dernières commandes seront HIGH pour les moteurs. Le reste du temps, il restera dans la partie-else de la fonction loop() et n'est jamais dit d'être LOW. Alors ajoutez quelques digitalWrite(motor1/2, LOW); à la fonction start_driving() à la fin, ou dans la partie d'autre du loop() sinon.

J'apporté quelques modifications à votre code et ajouté les pièces nécessaires (LED a les mêmes problèmes comme votre Motors):

#define LEDPIN   13  // Use defines, because the values won't change anyway 
            // For the same reason they are Uppercase like LOW, HIGH, INPUT ... 
            // It is an indicator for non changeing values 
#define RIGHTMOTORPIN 11  // Changed to PWM capable Pins, so you can 
#define LEFTMOTORPIN 10  // have a variable speed later on 
#define BUTTONPIN  A0 

#define RIGHT   0   // For more readability in the makeTurn function 
#define LEFT   1 

void setup() { 
    Serial.begin(9600); 

    pinMode(LEDPIN, OUTPUT); 
    pinMode(RIGHTMOTORPIN, OUTPUT); 
    pinMode(LEFTMOTORPIN, OUTPUT); 

    pinMode(BUTTONPIN, INPUT); 
} 

void loop() { 
    if(digitalRead(BUTTONPIN) == LOW){ 
    digitalWrite(LEDPIN, HIGH); 
    Serial.println("Turned on!");    // Put it in front, so it isn't shown after the drive 
    Serial.println("It is driving!"); 
    startDriving(); 
    }else{ 
    Serial.println("Not turned on!"); 
    digitalWrite(LEDPIN, LOW);    // I guess the led should be turned off too. 
    parallelMotorControl(LOW);    // THIS is the reason, why it continued driving! 
               // You never stopped the Motors 
    } 
} 

void startDriving() { 
    parallelMotorControl(HIGH); 
    delay(500); 
    makeTurn(RIGHT); 
    parallelMotorControl(HIGH); 
    delay(500); 
    makeTurn(LEFT); 
    parallelMotorControl(HIGH); 
    delay(1000); 
} 

// Reuse more code, that is similar. 
void makeTurn(bool turnDirection){ 
    if(turnDirection){       // Right turn 
    digitalWrite(RIGHTMOTORPIN, LOW); 
    digitalWrite(LEFTMOTORPIN, HIGH); 
    }else{          // Left turn 
    digitalWrite(RIGHTMOTORPIN, HIGH); 
    digitalWrite(LEFTMOTORPIN, LOW); 
    } 
    delay(500); 
    parallelMotorControl(LOW); 
    delay(78); 
} 

void parallelMotorControl(bool motorState){ 
    digitalWrite(RIGHTMOTORPIN, motorState); 
    digitalWrite(LEFTMOTORPIN, motorState); 
}