私はロボットを回避するObstacleに取り組んでいます。今のところ、これ以外はすべてが正常に動作しています。ボタンプレス(Arduino)に基づいて実行中のwhileループを中断する方法はありますか?
私は2つのモードがあります。アイドルおよび障害回避。 Idleは、基本的にLEDを点滅させ、ロボットが実行している可能性のあるアクティビティをすべて停止します。ボタンを押すとモードが切り替わります。
void manageRobotState() {
if (digitalRead(button) == LOW) {
robotState = 0;
halt();
idlePose();
blinkLED(leftLED, 1000);
blinkLED(rightLED, 1000);
} else if (digitalRead(button) == HIGH) {
robotState = 1;
digitalWrite(leftLED, HIGH);
digitalWrite(rightLED, HIGH);
simpleObstacleAvoidence();
}
delay(100);
}
だからここで重要なボタンをクリックすると、robotState
変数が変更されることを示します。ここではというん機能です。今度はこのコードは、を除いて、ロボットが操舵している場合を除きます。
void smartTurnLeft() {
turning();
while (currentDistanceAhead <= minimumDistance) {
Serial.println("turning");
if (robotState == 0) {
break;
}
scanAhead();
leftMotor.setSpeed(50);
rightMotor.setSpeed(50);
leftMotor.run(BACKWARD);
rightMotor.run(BACKWARD);
blinkLED(leftLED, 20);
digitalWrite(rightLED, LOW);
delay(20);
}
}
このループが実行されているときに何も起こり得ないと感じていますか?私はボタンを押すが、whileループは実行を続けている。何かできることはありますか?私はArduinoのについて何も知らないが、それはちょうどC.
のようだったので、私はArduinoの中volatile
キーワードについてthis参照を発見したと仮定:
完全なコードはHERE
のように、
smartTurnLeft()
機能にwhile loop
内でごmanageRobotState()
関数を呼び出すことであると思いますArduinoはCではありません。 – Olaf私は@Olafを修正しました。 –