안녕하세요! 두 번째 아두이노 시간입니다.
1초에 한 번씩 LED 점멸, 2초에 한 번씩 LED 점멸 동시에 작동하는 예제입니다.
과연 아래 예제와 같이 delay()함수를 사용한다면 어떻게 동작할까요?
많은 예제들을 보면 delay()함수를 사용합니다.
간단하고 편하기 때문에 많이 쓰이지만, 제대로 된 동작을 알지 못하면 상당히 위험한 함수입니다.
위 스케치를 들어서 설명하겠습니다.
1. LED_state1 = !LED_state1 : LED_state1을 False 상태로 초기화되어 있기 때문에 True값이 대입됩니다.
2. digitalWrite(pin_LED1, LED_state1) : pin_LED1의 LED를 LED_state1의 상태에 동작합니다.
3. delay(1000) : 1초동안 아두이노의 동작을 멈춥니다.
4. 1, 2번과 똑같이 동작합니다.
5. delay(2000) : 2초동안 아두이노의 동작을 멈춥니다.
결국 두 개의 LED는 1초, 2초씩 깜빡이지 않고, LED1가 상태에 맞춰 동작하고,
1초 아두이노가 멈춘 후에 또 LED2가 상태에 맞춰 동작을 한 후 아두이노가 2초동안 멈추기를 반복합니다.
그렇다면 아두이노가 멈추지 않고 어떻게 해야 1초 깜빡, 2초 깜빡이게 만들 수 있을까요?
바로 millis()함수를 사용하면 됩니다.
이와 같이 사용하면 됩니다.
이렇게 사용하면 아두이노는 동작을 멈추지 않고 계속해서 loop()문이 동작합니다.
현재 시간 - 시작 시간 >= 1초
현재 시간 - 시작 시간 >= 2초
센서가 늘어나고, 함수가 늘어나다보면 delay()함수는 상당히 위험한 함수가 됩니다.
delay()함수를 사용해버리면 us(마이크로단위)로 동작하는데
delay(1000)을 주게 되면
아두이노 입장에서는 상당히 부담이 되는 함수일 수 밖에 없습니다.
delaymicroseconds() 함수인가? 마이크로 단위로 delay를 주는 함수도 있지만 결국 아두이노가 그 시간만큼의 동작을
하지 못하는 것은 상당히 치명적일 수 있습니다.
delay()함수와 millis()함수를 주어진 역할대로 적절히 쓰는 것이 중요한 포인트라고 생각합니다.
'Embeded SW > Arduino' 카테고리의 다른 글
PWM으로 아날로그 값을 출력해보자! 1편 (0) | 2020.01.28 |
---|---|
Pull up(풀업) , Pull down(풀다운) 저항에 대해 알아보자! (0) | 2020.01.26 |
아두이노, 안드로이드를 블루투스로 연결해서 센서값 읽어오기!(2) (9) | 2020.01.22 |
아두이노, 안드로이드를 블루투스로 연결해서 센서값 읽어오기!(1) (1) | 2020.01.21 |
아두이노 delay() VS millis() 정확히 알고 쓰자! (2) | 2020.01.19 |