반응형

 

 







 


참고한 원본 글은 http://arduino.cc/en/Tutorial/BlinkWithoutDelay 입니다.


두 가지 일을 동시에 실행시키려고 하는 경우 delay()함 수를 사용하게 되면 원하는 결과를 얻지 못할 수 있습니다. 예를 들어 LED를 깜박이게 하려고 delay함수를 사용하면 delay 함수 시간 동안 프로그램을 정지시키기 때문에 그 때 버튼을 누르는 경우 놓치게 됩니다.


그래서 delay함수를 사용하는 대신에 시간을 측정합니다. 이전 시간을 기록해두고 현재시간을 계속 체크해서 일정 시간이 경과했다면 LED의 상태를 바꾸어 주고 현재 시간을 기록해둡니다. 이 과정을 반복함으로써 LED는 깜박이게 됩니다.


별도의 하드웨어 추가없이 아두이노 Uno의 13번 핀에 연결되어 있는 내장되어 있는 LED를 사용합니다.


  1. const int ledPin =  13; //LED 연견된 번호  
  2.     
  3. int ledState = LOW;     // LED상태를 LOW 초기화  
  4.     
  5. unsigned long previousMillis = 0; // LED 상태가 업데이트된 시간을 기록할 변수  
  6.     
  7. const long interval = 1000;    //LED 상태 변경할 시간 지정(ms단위)  
  8.     
  9. void setup() {  
  10.   pinMode(ledPin, OUTPUT);//ledPin 출력으로 설정        
  11. }  
  12.     
  13. void loop(){  
  14.       
  15.   //현재 시간을 기록  
  16.   unsigned long currentMillis = millis();  
  17.      
  18.   //지난번 LED 상태를 변경한  경과시간이 interval시간보다 크다면  
  19.   if(currentMillis - previousMillis >= interval) {  
  20.     //LED 상태를 변경한 시간을 기록한다.  
  21.     previousMillis = currentMillis;     
  22.         
  23.     if (ledState == LOW)//LED 꺼진상태면  
  24.       ledState = HIGH; //LED 켜진 상태로 하고   
  25.     else//LED 켜진상태라면  
  26.       ledState = LOW; //LED 꺼진상태로 한다.  
  27.     
  28.     //ledState변수에 저장된 값으로 ledPin핀의 상태를 설정한다.  
  29.     digitalWrite(ledPin, ledState);  
  30.   }  
  31. }  


반응형

문제 발생시 지나치지 마시고 댓글 남겨주시면 가능한 빨리 답장드립니다.


제가 쓴 책도 한번 검토해보세요 ^^

+ Recent posts