본문 바로가기
아두이노 기초 학습

4. 아두이노 millis() 사용하기

by 에이치엘 2022. 12. 9.

★ 제가 생각한 두번째 배워야될 내용!! millis() 함수 입니다.

 ○ millis()함수는 시간을 가져오는 함수입니다. 

   쉽게말해, 아두이노 시작부터 경과된 시간을 millisecond 단위로 가져온다고 보면되는데,

   milliseconde란, 1000분의 1초로 시간을 나타내어줍니다. 즉, 1000 은 1초라는 말입니다.

ex) 쉽게말해서, 아두이노 시작 후 3초가 경과되면? millis() 값은 3000 이라고 보시면 됩니다.

 

 

★★ 준비물 ★★

◎ 3. Serial 소스코드

◎ 아두이노 보드 ( 본 예제에서는 아두이노 시리즈 중 UNO 보드를 사용하였습니다 )

 

1. 이전 시간 소스코드에서 이어서 작업합니다. 이전에 학습한 코드는 다음과 같습니다

 

◎ 이전 학습에서는 시리얼 모니터를 통해 "내용"이라는것이 출력 되었습니다.

 

2. 다음은 millis() 사용법입니다

 

◎ millis() 를 Serial.println() 함수에 바로 적용 시켰습니다. 이것으로 millis() 사용방법은 끝이라고 보시면 됩니다. 

◎ 업로드 버튼을 눌러 아두이노 보드에 업로드 후 시리얼 모니터를 열고 확인하세요. 숫자가 빠른 속도로 오르는 것을 확인할 수 있습니다.

 

3-1. 다음은 millis() 의 활용법 입니다. ( millis() 값을 변수에 담아보자 )

◎millis() 함수의 값을 변수에 담았습니다.

  - unsigned : 정수라는 뜻입니다. 

  - long : 변수 타입이 long 타입입니다.

  - unsigned long : 정수를 담을 수 있는 long 타입 변수라는 뜻입니다

  - now : 변수의 이름입니다 ( 꼭! now로 할 필요는 없습니다. 닉네임으로 인식하시면 됩니다 ) 

◎ Serial.println() 함수에 millis()함수의 값이 저장된 now를 넣어줬습니다. 

 

※ 출력결과는 millis()함수를 바로 넣는거나 동일합니다. 

 

3-2. 조건문을 사용해보자.

◎ 조건문은 if(조건){ 실행 } 입니다.

◎ if(now > 5000) { } : 만약, now 값이 5000보다 크면 { } 안에 있는 코드를 실행하라는 뜻입니다.

     (now 에는 millis() 값이 들어있습니다. millis() 값이 1000 이면 1초입니다)

◎ 업로드 결과 시리얼모니터를 보시면 5초 후 5001 값부터 출력되는 것을 볼 수 있습니다.

 

3-3. 계속 출력하지말고, 1초마다 출력을 하고 싶다면, 아래와 같이 이전 시간을 다른 변수에 담아놓으면 됩니다.

◎ before 변수를 만듭니다. 해당 값은 0으로 초기화 해줍니다.

  ( 전역변수로 설정하는 이유는, loop()함수 속에 생성할 경우, 초기화가 되기때문에, 이전 시간을 저장하였다 하더라도,  loop()함수가 한바퀴 돌아버리면, 초기화가 이루어집니다. )

○ 전역변수란 : 쉽게말해, 전체적으로 해당 변수를 사용할 수 있다는 뜻입니다.

○ 지역변수란 : now 변수와 같이 함수내에서만 사용이 가능한 변수를 뜻합니다. 

 ※ befor 변수는 setup()함수에서 사용이 가능하나, now 변수는 setup()함수에서 사용이 불가능합니다.

 

◎ if(now - before >= 1000){ } : 만약, 현재 시간(now == millis())에서 이전 시간(before)을 뺀 시간이 1000 보다 크거나 같다면 { } 속에 있는 코드를 실행하라는 뜻입니다.

◎if(now - before >= 1000){ before = now; } : {} 괄호 속 before 변수에 now 현재 시간을 갱신합니다. 이유는, 마지막으로 출력한 시간을 갱신해두지 않을 경우 발생되는 현상은, 직접 업로드 해보시면 됩니다.

 

※ 시리얼모니터로 출력되는 값이 보이나요? 이전에는 파파팍! 올라갔다면... 이 코드부터는 1초마다 1번씩 출력이 되는 것을 보실 수 있습니다. 즉, 이 코드만 이해한다면, 1초마다 LED를 켜고 끄고, 또는 1초마다 모터를 정방향, 역방향 동작이 가능합니다. 제 예제에서는 꼭! 필요한 경우가 아니라면 delay()함수는 가능하면 사용하지 않을 예정입니다.

 

☆ '==' 와 '=' 의 차이

 ○ == : 양쪽의 값이 같은지를 비교 

  ex ) 'A' == 'B'  같나요? 다르죠? , 'A'=='A' 같죠?

 ○ = : 대입하라!

  ex ) 100 = 200 이럴 경우 100은 200이 됩니다.

         즉 A의 값이 100이고, B의 값이 200이면, A = B 코드가 실행되면 A는 100이 아닌 200값을 가지게 됩니다.

댓글