반응형

 

안녕하세요. 블로그 첫 글이네요.

이 블로그는 공부 노트와 같이 제가 공부하면서 팁과 필요한 부분을 점점 적어내려갈 예정입니다.

바로 시작하겠습니다!

 

아두이노는 교육용 목적으로 만들어진 C++ 기반의 언어라고 볼 수 있습니다. 

초등학생부터 나이불문하고 쉽게 접할 수 있습니다. 

 

저도 아두이노를 처음 사용할 때 예제를 따라하고 LED를 점멸하고 스위치를 눌러보고 아주 신기했던 기억이 납니다.

 

하지만 예제를 따라하는 것만으로는 제가 원하는 것을 만들 수 없었습니다.

저는 학부 연구생으로 평소와 같이 아두이노를 돌리고 있었습니다.

여러 센서를 붙여 delay()함수를 사용하여 한번에 여러 작동을 하려고 했으나 계속해서 실패했습니다.

제 뒤로 하드웨어 박사과정 중이신 선배님께서 delay()함수와 millis()함수에 대해 알려주셨습니다. 

 

delay(1000)은 1초동안 멈춘다는 뜻입니다.  좀 더 생각을 해보았죠. 1초동안 멈춘다. 1초동안 아무 동작을 하지 않는다.

 

제가 3학년 때 컴퓨터 구조시간에 배운 하나의 cpu는 하나의 명령밖에 수행할 수 없다고 배웠습니다.

 

delay(1000)라는 뜻은 cpu가 1초동안 아무 동작을 할 수 없다는 뜻입니다. 

 

하드웨어에서 1초는 매우 긴 시간입니다.

저희 컴퓨터 구조 시간 때 교수님은 IT에서 일주일은 무한의 시간이라고 말씀하셨던게 기억이 나네요! 

 

 

자! 그렇다면 본론으로 들어가서 그러면 어떻게 한 번에 여러가지 함수를 사용할 수 있을까요.

 

바로 정답은 millis() 함수에 있습니다. 

 

millis() 함수는 아두이노 보드에서 프로그램이 시작된 시점부터 밀리초(ms) 단위로 카운트(증가) 된 값을 unsigned long 타입으로 반환한다고 나와 있

네요!

우선 두 개의 변수를 선언해주세요

 

       

void setup()에 선언해주세요. 
void roop()문에 이와 같이 선언해줍니다.
가장 중요한 부분입니다.  현재시간의 카운트에서 시작시간의 카운트를 뺸 값이 1초보다 크면 if문을 실행합니다. 만약 >= 10000이라면 10초를 의미합니다.

 

loop() 함수가 반복되면서 현재의 밀리초를 millis() 함수로부터 계속 업데이트하며 이전 밀리초 값과 차이를 비교하는 방식으로 delay() 함수와 똑같은 기능을 할 수 있습니다. 

 

 

 

마치 cpu는 분명 한 가지의 동작을 하고 있지만, 아두이노의 속도가 상당히 빨라 저희 눈에는 동시에 움직이는 것처럼 보이는 것입니다. 마치 도트 매트리스의 잔상효과처럼!

 

delay()보다 사용하기 어려운건 분명 하나 여러가지 동작을 줄 때는 millis()함수가 상당히 효율적으로 사용할 수 있습니다.

 

선배님께서도 delay()함수는 없다고 생각하고 오로지 millis()함수만을 이용해서 공부하라고 하셨던 기억이 납니다!

여러분들도 최대한 delay()함수를 사용하지 않고 millis()함수를 애용하면 좋겠습니다!!

728x90
반응형

+ Recent posts