2017-09-25 10 views
2

Arduinoのボタンをオン/オフするためのヘルプが必要です。私は技術レッスンでクラスに自分のArduino車をつくろうとしています。Arduinoボタンのオン/オフ機能

2つのモータ、Arduinoボード、Arduinoセンサーシールドv5.0に接続されたトランジスタ回路です。私が入力したコードはオン/オフ機能のために働いたが、それはそれをオフにしないだけ永遠にとどまった。

最初のもののためのコード:

//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); 
} 

そして今、私は(私はまだ、まだ最初のものを保持している)を再び開始するために新しい.inoファイルを作っていますが、私は上のボタンを作るしようとしていますそして、LEDとも

void start_driving() { 
} 

と呼ばれるvoid関数を有効をオンにする機能をオフだから私はあなたが私の言いたいことを取得希望と私は意味を成していることを期待しました。ああ、運転の機能を解決するのを手助けすることもできます。右折や左折、または前進または後退の機能にも役立ちます。あなたは私を助けてくれますか?

+0

あなたがプルダウンを使用していますか? –

+0

"お元気でお願いしますか?"質問を投稿するだけで十分です。あなたは助けを請う必要はありません... – Piglet

答えて

0

停止しない理由は簡単です。停止するようには決して言わなかったのです。ボタンをオフにすると、start_driving()機能が終了し、最後のコマンドはモーターのHIGHです。残りの部分はloop()関数のelse部分にとどまり、LOWになることは決してありません。 を末尾のstart_driving()関数に、またはloop() elseのelse部分に追加します。

私はあなたのコードにいくつかの変更を行い、必要な部品を(LEDがあなたの自動車のように同じ問題を抱えている)を追加しました:

#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); 
}