안녕하세요. 블로그 첫 글이네요.
이 블로그는 공부 노트와 같이 제가 공부하면서 팁과 필요한 부분을 점점 적어내려갈 예정입니다.
바로 시작하겠습니다!
아두이노는 교육용 목적으로 만들어진 C++ 기반의 언어라고 볼 수 있습니다.
초등학생부터 나이불문하고 쉽게 접할 수 있습니다.
저도 아두이노를 처음 사용할 때 예제를 따라하고 LED를 점멸하고 스위치를 눌러보고 아주 신기했던 기억이 납니다.
하지만 예제를 따라하는 것만으로는 제가 원하는 것을 만들 수 없었습니다.
저는 학부 연구생으로 평소와 같이 아두이노를 돌리고 있었습니다.
여러 센서를 붙여 delay()함수를 사용하여 한번에 여러 작동을 하려고 했으나 계속해서 실패했습니다.
제 뒤로 하드웨어 박사과정 중이신 선배님께서 delay()함수와 millis()함수에 대해 알려주셨습니다.
delay(1000)은 1초동안 멈춘다는 뜻입니다. 좀 더 생각을 해보았죠. 1초동안 멈춘다. 1초동안 아무 동작을 하지 않는다.
제가 3학년 때 컴퓨터 구조시간에 배운 하나의 cpu는 하나의 명령밖에 수행할 수 없다고 배웠습니다.
delay(1000)라는 뜻은 cpu가 1초동안 아무 동작을 할 수 없다는 뜻입니다.
하드웨어에서 1초는 매우 긴 시간입니다.
저희 컴퓨터 구조 시간 때 교수님은 IT에서 일주일은 무한의 시간이라고 말씀하셨던게 기억이 나네요!
자! 그렇다면 본론으로 들어가서 그러면 어떻게 한 번에 여러가지 함수를 사용할 수 있을까요.
바로 정답은 millis() 함수에 있습니다.
millis() 함수는 아두이노 보드에서 프로그램이 시작된 시점부터 밀리초(ms) 단위로 카운트(증가) 된 값을 unsigned long 타입으로 반환한다고 나와 있
네요!
loop() 함수가 반복되면서 현재의 밀리초를 millis() 함수로부터 계속 업데이트하며 이전 밀리초 값과 차이를 비교하는 방식으로 delay() 함수와 똑같은 기능을 할 수 있습니다.
마치 cpu는 분명 한 가지의 동작을 하고 있지만, 아두이노의 속도가 상당히 빨라 저희 눈에는 동시에 움직이는 것처럼 보이는 것입니다. 마치 도트 매트리스의 잔상효과처럼!
delay()보다 사용하기 어려운건 분명 하나 여러가지 동작을 줄 때는 millis()함수가 상당히 효율적으로 사용할 수 있습니다.
선배님께서도 delay()함수는 없다고 생각하고 오로지 millis()함수만을 이용해서 공부하라고 하셨던 기억이 납니다!
여러분들도 최대한 delay()함수를 사용하지 않고 millis()함수를 애용하면 좋겠습니다!!