아두이노 기초 강좌 12 – delay 함수와 싱글 스레드

아두이노 기초 강좌는 아두이노를 처음 접하시는 전자분야 비 전공자를 위한 강좌입니다. 이해를 위해서는 간단한 프로그래밍 지식이 필요할 수 있습니다. 프로그래밍이 처음이라면 [아두이노 프로그래밍 기초] 강좌를 먼저 읽으시길 권해 드립니다.

=============================================================

 

이번 강좌에서는 delay 함수에 대해서 얘기해 보겠습니다.

 

 

1. delay 함수와 주의 사항

 

delay(milli_second);

굉장히 간단한 함수입니다. 이 함수를 사용하면 아두이노가 이 함수를 처리할 때 지정된 milli-second(밀리초, 1/1000초 단위) 동안 아무것도 안하고 쉬게됩니다. 이 함수는 아두이노에서 굉장히 빈번히 사용되는데, 사용할 때 주의할 점이 있습니다.

아두이노 기초강좌 5편을 보시면 버튼 예제가 있습니다. 버튼을 눌렀을 때 이를 감지하고 그 결과를 Serial Monitor로 출력하는 예제입니다.

주석을 제거하고 보면 간단한 코드입니다. loop 구문 안에서 수행되는 작업은

버튼 상태 읽기 –>  시리얼로 상태 출력 –> delay 로 잠시 쉼 (1/1000 초)

이 순서를 반복합니다.

 

그런데 여기서 delay(1000); 으로 수정하면 어떻게 될까요?

그럼 버튼 상태 읽기 –> 상태 출력 –> 1초 쉽… 이렇게 바뀌니까 버튼 상태를 읽고 다음번 버튼 상태를 읽기까지 적어도 1초가 걸리는 겁니다. 매우 짧은 시간동안 버튼의 상태를 읽고 1초를 기다려버리니 사용자가 버튼을 길게 누르지 않고 짧게 누르면 떼버리면 ‘클릭’ 상태를 인식하지 못할 가능성이 커집니다.

그래서 버튼과 같이 특정 상태가 지속되지 않는 입력을 체크해야 하는 경우 반복문이 최대한 빨리 수행될 수 있도록 주의해야 합니다. delay 함수와 같이 아두이노가 멈춰버리는 함수 혹은 시간이 오래 걸리는 작업을 최대한 줄여야 합니다.

 

 

2. 아두이노는 일꾼이 한 명 뿐

 

사실 delay 함수에 이런 제약이 생기는 것은 아두이노가 오로지 싱글 프로세스, 싱글 스레드 만을 지원하기 때문입니다. 뭔 소리냐면…

아두이노에서는 우리가 작성한 코드를 처리하기 위해 오로지 한 명의 일꾼만을 투입한다는 얘기입니다. PC나 폰은 다중 프로세스, 다중 스레드를 지원합니다. 즉 여러명의 일꾼들을 투입할 수 있다는 의미입니다. 따라서 PC나 폰에서 똑같은 버튼 입력 작업을 한다면 한명은 버튼 상태만 감지하도록 시키고 다른 한 명은 버튼 상태에 따라 원하는 작업을 하도록 하면 되죠. 아두이노는 이게 안된다는 의미입니다.

potentiometer

 

만약에 입력장치로 버튼을 사용하지 않고 포텐셔미터를 사용한다면 어떨까요?? 포텐셔미터는 휠의 위치에 따라 저항이 변하는 입력 장치이기 때문에, 사용자가 움직임을 주면 변경된 상태(저항값)가 유지됩니다. 그래서 이런 문제에서 더 자유롭죠.

버튼과 delay 함수 사용시 발생하는 이런 문제는 다른 곳에서도 발생합니다. 앞선 강좌에서.. PC에서 시리얼 모니터로 글자들을 전송하면 아두이노에서 아래 함수를 사용해서 읽어옵니다.

그런데 PC에서 전송한 데이터를 읽기 전후에 굉장히 복잡한 작업을 처리하거나 delay 함수를 써서 아두이노가 상당한 시간동안 손 놓고 있다면?? PC에서 많은 데이터를 전송할 때 전송한 데이터가 누락되거나 버퍼(데이터 임시 저장소)가 흘러넘쳐 알 수 없는 문제가 발생할 수 있습니다.

 

delay 함수는 굉장히 유용하고 간단한 함수이지만 프로젝트가 복잡해 질 수록 사용에 주의가 필요합니다.

 

 

 

===============================================================

이 문서는 작성자의 동의없이 개인적인 목적 외의 상업적인 목적으로 활용되어서는 안됩니다.

이 문서의 일부 혹은 전체를 수정, 삭제, 재배포 하여서는 안됩니다.

작성자 : GodsTale (godstale@hotmail.com)  

Post Author: TORTUGA

TORTUGA
궁금하신 점은 새로 개편한 홈페이지의 QnA 게시판을 이용해주세요!!!!!!! http://www.hardcopyworld.com/gnuboard5/bbs/board.php?bo_table=qna

댓글 남기기

이메일은 공개되지 않습니다.