Arduino Loop Break

时间:2017-06-08 03:46:25

标签: java loops arduino break

目前我们正在学校使用可以通过蓝牙控制的arduino来创建一个使用Thunkable的机器人。目前,该应用程序发送arduino将识别的arduino字符,并将遵循IF STATEMENT。我已经创建了一个图8命令,它现在可以工作,但是它被卡在循环中并且不会停止,即使按下了STOP按钮。我确保在off if语句中设置x = false,但我认为它不适用于当前代码。我试过休息,但无济于事。我想做的就是使用off命令停止循环继续。任何帮助将不胜感激。

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

}

1 个答案:

答案 0 :(得分:0)

Arduino循环与您在正常代码段中编写的循环不完全相同。我喜欢为我的arduino程序做的是声明一个名为&#34; isOn&#34;的全局布尔变量。或类似的东西。如果用if语句包围整个循环,检查是否为真,那么你将能够通过改变这个全局变量的值来关闭你的数字8循环,这样你的循环就会停止运行。 Break语句不会像你在过去做过的其他编程一样对整个循环起作用。