我有一个程序可以将步进电机向右,向左移动,并有一个停止电机的停止按钮。在我的程序的一部分中,电机逐渐降低速度并在一段时间后停止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
}
答案 0 :(得分:-1)
您的break
条件永远不会触发,因为{while}循环内永远不会更新stateStop
。你的程序应该怎么知道?它忙于运行循环,并不关心它的范围之外的任何东西。
检查while循环内的按钮状态或使用中断