반응형

안녕하세요! 두 번째 아두이노 시간입니다.

1초에 한 번씩 LED 점멸, 2초에 한 번씩 LED 점멸 동시에 작동하는 예제입니다. 

 

과연 아래 예제와 같이 delay()함수를 사용한다면 어떻게 동작할까요?

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()함수를 사용하면 됩니다. 

millis()함수를 이용한 2개의 LED 점멸

이와 같이 사용하면 됩니다.

이렇게 사용하면 아두이노는 동작을 멈추지 않고 계속해서 loop()문이 동작합니다.

 

현재 시간 - 시작 시간 >= 1초

현재 시간 - 시작 시간 >= 2초

 

센서가 늘어나고, 함수가 늘어나다보면 delay()함수는 상당히 위험한 함수가 됩니다.

delay()함수를 사용해버리면 us(마이크로단위)로 동작하는데

delay(1000)을 주게 되면 

아두이노 입장에서는 상당히 부담이 되는 함수일 수 밖에 없습니다.

delaymicroseconds() 함수인가? 마이크로 단위로 delay를 주는 함수도 있지만 결국 아두이노가 그 시간만큼의 동작을 

하지 못하는 것은 상당히 치명적일 수 있습니다. 

 delay()함수와 millis()함수를 주어진 역할대로 적절히 쓰는 것이 중요한 포인트라고 생각합니다. 

 

728x90
반응형

+ Recent posts