스테퍼 모터를 오른쪽, 왼쪽으로 이동시키고 모터를 멈추게하는 정지 버튼이있는 프로그램이 있습니다. 내 프로그램의 한 부분에서 모터는 점차적으로 속도를 낮추고 특정 시간이 지나면 멈 춥니 다. iv
. 문제는 프로그램의이 부분 (모터가 점차적으로 속도를 낮추고 멈출 때) 멈춤 버튼을 누르면 모터를 멈출 수 없다는 것입니다. 나는 while
루프를 어쨌든 깨뜨릴 필요가 있음을 이해하지만, break
문을 사용하는 것은 나를 저해하지 않는다.Arduino의 while 루프 반복하기
아이디어가 있으십니까?
이/* --- 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
}
while 루프의 변수 중 하나를 루프로 끝내는 것을 고려한 적이 있습니까? 'iv = 0'처럼 똑같이 열등한 이름의'te '에 뭔가 신비한 이름이 무엇이든'iv'를 설정하는 것과 마찬가지로? –
이것은 어떻게해야하는지 묻지 않고 쉽게 해결할 수있는 X \ Y 문제이기 때문에이 주제를 오프 토픽으로 끝내기로했습니다. –
귀하의 질문은 [X/Y 문제] (https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)입니다. 솔루션에 대한 도움을 요청하는 대신 해결하려는 문제를 알려주십시오. 올바른 방법이 아닌 것으로 보입니다. –