주기적인 처리를 위한 함수
void delay(unsigned long ms)
밀리초 단위의 정한 시간만큼 아두이노를 지연시키는 함수
매개변수
ms: 밀리초 단위의 지연 시간
반환값
-
void delayMicroseconds(unsigned int us)
마이크로초 단위의 정한 시간만큼 아두이노를 지연시키는 함수
매개변수
us: 마이크로초 단위의 지연 시간
반환값
-
unsigned long millis(void)
프로그램 경과 시간을 알려주는 함수
매개변수
-
반환값
프로그램이 시작된 이후의 밀리초 단위의 경과 시간
delay함수를 이용하여
LED1은 1초 단위로 점멸, LED2는 버튼이 눌러질 때마다 반전하는 코드:
int pin_button = 14; // 버튼 연결 핀
int pin_LED1 = 13, pin_LED2 = 2; // LED 연결 핀
boolean LED_state1 = false; // LED 상태
boolean LED_state2 = false;
void setup() {
pinMode(pin_button, INPUT);
pinMode(pin_LED1, OUTPUT);
digitalWrite(pin_LED1, LED_state1);
pinMode(pin_LED2, OUTPUT);
digitalWrite(pin_LED2, LED_state2);
}
void loop(){
digitalWrite(pin_LED1, LED_state1);
delay(1000); //1초 대기
LED_state1 = !LED_state1;
if(digitalRead(pin_button)){ //버튼이 눌러진 경우
LED_state2 = !LED_state2; //2번 LED 반전
digitalWrite(pin_LED2, LED_state2);
}
}
delay 함수가 실행 중인 동안에는 대부분의 마이크로컨트롤러 동작이 중지된다.
delay(1000)을 실행하면서 1초 대기 시간동안 버튼의 눌림 여부를 검사하지 못해
LED2가 버튼에 즉각적으로 반응하지 못한다.
delay함수 없이 Millis 함수를 이용하여 시간을 재어 버튼과 LED를 제어하는 코드:
int pin_button = 14; // 버튼 연결 핀
int pin_LED1 = 13, pin_LED2 = 2; // LED 연결 핀
boolean LED_state1 = false; // LED 상태
boolean LED_state2 = false;
boolead button_state_current;
boolead button_state_previous = false;
void setup() {
pinMode(pin_button, INPUT);
pinMode(pin_LED1, OUTPUT);
digitalWrite(pin_LED1, LED_state1);
pinMode(pin_LED2, OUTPUT);
digitalWrite(pin_LED2, LED_state2);
}
void loop(){
time_current = millis();
if(time_current - time_previous >= 1000){
time_previous =time_current; //시작 시간 생신
LED_state1 = !LED_state1; //LED1 반전
digitalWrite(pin_LED1, LED_state1);
}
button_state_current = digitalRead(pin_button; //현재 버튼상태 읽기
if(button_state_current){ //버튼이 눌러진 경우
if(!button_state_previous){
button_state_previous = ture; //현재 눌린것을 previous 버튼상태에 저장
LED_state2 = !LED_state2; //LED2 반전
digitalWrite(pin_LED2, LED_state2);
}
}
else{
button_state_previous = false;
}
}
루프를 돌 때마다 프로그램 경과 시간을 불러와 1초가 지났는지 검사를 하고 LED1을 제어하기 때문에,
지연 없이 버튼을 제어할 수 있다.
728x90