2017-06-08 62 views
1

在學校目前我們正在創建一個使用Arduino的機器人,可以使用Thunkable通過藍牙進行控制。目前,該應用發送arduino將識別的arduino字符,並將遵循IF語句。我創建了一個圖8命令,該命令現在可以正常工作,但即使按下「停止」按鈕,它仍然處於循環狀態並且不會停止。我確保在off if語句中設置x = false,但我認爲它不適用於當前代碼。我試過使用休息,但無濟於事。我想要做的就是停止循環,使用off命令。任何幫助,將不勝感激。Arduino Loop Break

//L293D 
// connect motor controller pins to Arduino digital pins 
// motor one 
char input; 
boolean x = false; 
boolean timer = true; 
int enA = 12; 
int in1 = 11; 
int in2 = 10; 
// motor two 
int enB = 8; 
int in3 = 9; 
int in4 = 7; 

void setup() 
{ 
    // set all the motor control pins to outputs 
    pinMode(enA, OUTPUT); 
    pinMode(enB, OUTPUT); 
    pinMode(in1, OUTPUT); 
    pinMode(in2, OUTPUT); 
    pinMode(in3, OUTPUT); 
    pinMode(in4, OUTPUT); 


    Serial.begin(9600); 
    Serial.println(">> START <<"); 
} 
void demoOne() 
{ 
    if(Serial.available() >= 0) 
    {  
    input = Serial.read(); 
    if(input=='k') 
    { 
     Serial.println("ON"); 
     digitalWrite(in1, HIGH); 
     digitalWrite(in2, LOW); 
     digitalWrite(in3, HIGH); 
     digitalWrite(in4, LOW); 
     analogWrite(enA, 200); 
     analogWrite(enB, 200); 
    } 
    else if(input == 'q') 
    { 
     Serial.println("REVERSE"); 
     digitalWrite(in1, LOW); 
     digitalWrite(in2, HIGH); 
     digitalWrite(in3, LOW); 
     digitalWrite(in4, HIGH); 
     analogWrite(enA, 200); 
     analogWrite(enB, 200); 
    } 
    else if(input == 'l') 
    { 
     x = false; 
     Serial.println("OFF"); 
     digitalWrite(in1, LOW); 
     digitalWrite(in2, LOW); 
     digitalWrite(in3, LOW); 
     digitalWrite(in4, LOW); 
    } 
    else if(input == 'c') 
    { 
     Serial.println("CIRCLE MODE"); 
     digitalWrite(in1, HIGH); 
     digitalWrite(in2, LOW); 
     digitalWrite(in3, LOW); 
     digitalWrite(in4, LOW); 
     analogWrite(enA, 200); 
     analogWrite(enB, 200); 
    } 
    // THIS IS THE HIGHLIGHTED CODE THAT I NEED HELP WITH 
    else if(input == 'i') 
    { 
     for(x == true; x = true;) 
     { 
     if(x == false) 
     { 
      break; 
     } 
     Serial.println("FIGURE EIGHT MODE"); 
     digitalWrite(in1, LOW); 
     digitalWrite(in2, LOW); 
     digitalWrite(in3, HIGH); 
     digitalWrite(in4, LOW); 
     analogWrite(enA, 200); 
     analogWrite(enB, 200); 
     delay(1000); 
     digitalWrite(in1, HIGH); 
     digitalWrite(in2, LOW); 
     digitalWrite(in3, LOW); 
     digitalWrite(in4, LOW); 
     analogWrite(enA, 200); 
     analogWrite(enB, 200); 
     delay(1000); 

     } 
    } 

    else if(input == 'r') 
    { 
     Serial.println("CIRCLE MODE"); 
     digitalWrite(in1, LOW); 
     digitalWrite(in2, LOW); 
     digitalWrite(in3, HIGH); 
     digitalWrite(in4, LOW); 
     analogWrite(enA, 200); 
     analogWrite(enB, 200); 
    } 
    else 
    { 
     Serial.println("NO INPUT"); 
     Serial.println(input); 
     delay(1000); 
    } 
    } 

    /* this function will run the motors in both directions at a fixed speed 
    // turn on motor A 
    // digitalWrite(in1, HIGH); 
    // digitalWrite(in2, LOW); 
    // set speed to 200 out of possible range 0~255 
    // analogWrite(enA, 200); 
    // turn on motor B 
    // digitalWrite(in3, HIGH); 
    // digitalWrite(in4, LOW); 
    // set speed to 200 out of possible range 0~255 
    analogWrite(enB, 200); 
    delay(2000); 
    // now change motor directions 
    digitalWrite(in1, LOW); 
    digitalWrite(in2, HIGH); 
    digitalWrite(in3, LOW); 
    digitalWrite(in4, HIGH); 
    delay(2000); 
    // now turn off motors 
    digitalWrite(in1, LOW); 
    digitalWrite(in2, LOW); 
    digitalWrite(in3, LOW); 
    digitalWrite(in4, LOW); */ 
} 
void demoTwo() 
{ 
    /* this function will run the motors across the range of possible speeds 
    // note that maximum speed is determined by the motor itself and the operating voltage 
    // the PWM values sent by analogWrite() are fractions of the maximum speed possible 
    // by your hardware 
    // turn on motors 
    digitalWrite(in1, LOW); 
    digitalWrite(in2, HIGH); 
    digitalWrite(in3, LOW); 
    digitalWrite(in4, HIGH); 
    // accelerate from zero to maximum speed 
    for (int i = 0; i < 256; i++) 
    { 
    analogWrite(enA, i); 
    analogWrite(enB, i); 
    delay(20); 
    } 
    // decelerate from maximum speed to zero 
    for (int i = 255; i >= 0; --i) 
    { 
    analogWrite(enA, i); 
    analogWrite(enB, i); 
    delay(20); 
    } 
    // now turn off motors 
    digitalWrite(in1, LOW); 
    digitalWrite(in2, LOW); 
    digitalWrite(in3, LOW); 
    digitalWrite(in4, LOW); */ 
} 

void loop() 
{ 
    demoOne(); 

} 

回答

0

Arduino循環與您可能在正常代碼段中編寫的循環不完全相同。我喜歡爲我的arduino程序做的是聲明一個名爲「isOn」或類似的全局布爾變量。如果你用一個if語句來檢查整個循環是否爲真,那麼你可以通過改變這個全局變量的值來關閉你的數字8循環,這樣你的循環就可以停止運行。 Break語句不適用於此循環的整個過程,正如您可能期望從過去完成的其他編程一樣。