在Arduino打破一段时间

时间:2017-11-21 18:32:44

标签: while-loop arduino break

我有一个程序可以将步进电机向右,向左移动,并有一个停止电机的停止按钮。在我的程序的一部分中,电机逐渐降低速度并在一段时间后停止iv。 问题是在程序的这一部分(当电机逐渐降低速度然后停止时)我按下停止按钮时无法停止电机。我知道我需要以某种方式打破while循环,但使用break语句对我来说并不干净。

你有什么想法吗?

这是我的功能:

/* --- STEPPER MOTOR ---*/
const int motor_step = 3;
const int motor_dir = 4;        
int stepSpeed = 0;
int stepMaxSpeed = 1000;        
int fadeAmount = 100;           
int fadeDelay = 10;

/* ---- STOP BUTTON ---- */
int buttonStop = 5;             
int stateStop=0;

void setup() {
  .
  .
  .
  stateStop = digitalRead(buttonStop);
}
void loop () {
  .
  .
  .
  myfunc();
}


void myfunc() {
  if(stateStop == HIGH) {noTone(motor_step); stepSpeed = 0;}

  elapsedMillis te;
  unsigned int iv = 1500;

  while (te < iv) {
     if(stepSpeed == stepMaxSpeed) {
       stepSpeed = stepSpeed+0;
       tone(motor_step,stepSpeed);
       digitalWrite(motor_dir,HIGH); 
     }
     else {
       stepSpeed = stepSpeed + fadeAmount;
       tone(motor_step,stepSpeed);
       digitalWrite(motor_dir,HIGH);
       delay(fadeDelay);
     }
     if(stateStop == HIGH) { stepSpeed = 0; break;}
   }
   if(stepSpeed == stepMaxSpeed) {
     while(stepSpeed>0){
       stepSpeed = stepSpeed-fadeAmount;
       tone(motor_step,stepSpeed);
       digitalWrite(motor_dir,HIGH);
       delay(fadeDelay);
       if(stateStop == HIGH) { stepSpeed = 0; break;}
     }
   }
   stepSpeed = 0;
   noTone(motor_step);
   digitalWrite(enable,LOW); // enable changed from HIGH
}

1 个答案:

答案 0 :(得分:-1)

您的break条件永远不会触发,因为{while}循环内永远不会更新stateStop。你的程序应该怎么知道?它忙于运行循环,并不关心它的范围之外的任何东西。

检查while循环内的按钮状态或使用中断