2017-11-21 16 views
-1

스테퍼 모터를 오른쪽, 왼쪽으로 이동시키고 모터를 멈추게하는 정지 버튼이있는 프로그램이 있습니다. 내 프로그램의 한 부분에서 모터는 점차적으로 속도를 낮추고 특정 시간이 지나면 멈 춥니 다. 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 
} 
+0

while 루프의 변수 중 하나를 루프로 끝내는 것을 고려한 적이 있습니까? 'iv = 0'처럼 똑같이 열등한 이름의'te '에 뭔가 신비한 이름이 무엇이든'iv'를 설정하는 것과 마찬가지로? –

+0

이것은 어떻게해야하는지 묻지 않고 쉽게 해결할 수있는 X \ Y 문제이기 때문에이 주제를 오프 토픽으로 끝내기로했습니다. –

+0

귀하의 질문은 [X/Y 문제] (https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)입니다. 솔루션에 대한 도움을 요청하는 대신 해결하려는 문제를 알려주십시오. 올바른 방법이 아닌 것으로 보입니다. –

답변

-1

귀하의 break 조건이 당신의 while 루프 내부에 업데이트되고 있지 않습니다 stateStop으로 트리거하지 않습니다

여기 내 기능입니다. 귀하의 프로그램은 어떻게 알 수 있습니까? 루프를 실행하는 데 바쁘고 범위 밖에있는 것은 신경 쓰지 않습니다.

while 루프 내의 단추 상태를 확인하거나 인터럽트를 사용하십시오.

+0

인터럽트를 사용하는 것은 두 개의 핀이 스테퍼 모터 스텝 및 디렉터에 이미 사용되어 있기 때문에 인터럽트를 사용하는 것이 나의 경우는 아닙니다. 그러나 while 루프 내에서 버튼 상태를 확인하려고합니다. 감사 –