😎 κ³΅λΆ€ν•˜λŠ” μ§•μ§•μ•ŒνŒŒμΉ΄λŠ” μ²˜μŒμ΄μ§€?

[아두이노] λ©€ν‹° νƒœμŠ€ν‚Ή ν•˜κΈ° - millis() & μΈν„°λŸ½νŠΈ & 타이머 λ³Έλ¬Έ

πŸ‘©‍πŸ’» IoT (Embedded)/Arduino

[아두이노] λ©€ν‹° νƒœμŠ€ν‚Ή ν•˜κΈ° - millis() & μΈν„°λŸ½νŠΈ & 타이머

μ§•μ§•μ•ŒνŒŒμΉ΄ 2023. 4. 5. 11:59
728x90
λ°˜μ‘ν˜•

<λ³Έ λΈ”λ‘œκ·ΈλŠ” μ—˜λ¦¬μŠ€ IoT 1λ₯Ό μ°Έκ³ ν•΄μ„œ κ³΅λΆ€ν•˜λ©° μž‘μ„±ν•˜μ˜€μŠ΅λ‹ˆλ‹€ :-)>

(μ½”λ“œλŠ” μ €μž‘κΆŒμƒ 곡유 μ•ˆλ©λ‹ˆλ‹Ή!!)

 

πŸ₯‘ delay 없이 μž‘μ—… μˆ˜ν–‰

: μ›λž˜ μž‘μ—… λ‹€μŒμ— delay μ£Όκ³  loop 내에 κ΅¬μ„±ν•˜λ©΄ 주기적으둜 μž‘μ—… μˆ˜ν–‰ κ°€λŠ₯

 

πŸ” millis() ν•¨μˆ˜

unsigned long time = millis();

: 아두이노가 ν”„λ‘œκ·Έλž¨μ„ μ‹œμž‘ν•œ λ’€ 경과된 μ‹œκ°„μ„ ms λ‹¨μœ„λ‘œ λ³€ν™˜ 

: delay 없이 주기적인 λ™μž‘ μˆ˜ν–‰ κ°€λŠ₯

: μ‹œκ°„ κ²½κ³Ό 쑰건 λ§Œμ‘±ν•  λ•Œλ§Œ μž‘μ—… μˆ˜ν–‰ν•¨

 

πŸ₯‘ 아두이노 λ©ˆμΆ”μ§€ 말기

: λ©ˆμΆ”μ§€ μ•Šκ³  LEDλ₯Ό 깜빑이기 μœ„ν•΄ millis ν•¨μˆ˜λ₯Ό ν™œμš©ν•˜κΈ°

 

πŸ₯‘ μΈν„°λŸ½νŠΈ

: μ‹€ν–‰ 쀑인 ν”„λ‘œκ·Έλž¨μ—μ„œ μ¦‰μ‹œ μ²˜λ¦¬ν•΄μ•Ό ν•  ν”„λ‘œκ·Έλž¨μ΄ λ°œμƒλ˜λŠ” 것

: μ‹€ν–‰ 쀑인 ν”„λ‘œκ·Έλž¨μ„ μ€‘λ‹¨ν•˜κ³  μ¦‰μ‹œ μ‹€ν–‰ν•΄μ•Ό ν•  ν”„λ‘œκ·Έλž¨ μˆ˜ν–‰

// μΈν„°λŸ½νŠΈκ°€ λ°œμƒν–ˆμ„ λ•Œ 싀행될 callback ν•¨μˆ˜
attachInterrupt(interrupt, callback, mode);

// μΈν„°λŸ½νŠΈκ°€ λ°œμƒν–ˆμ„ λ•Œ μˆ˜ν–‰ν•  callback ν•¨μˆ˜ 지정
void callback();

 

πŸ” μΈν„°λŸ½νŠΈ μ‹œκ·Έλ„

LOW : μž…λ ₯ κ°’ LOW

CHANGE : μž…λ ₯ κ°’ μƒνƒœ λ³€ν•  λ•Œ

RISING : μž…λ ₯ 값이 LOW μ—μ„œ HIGH

FALLING : μž…λ ₯ 값이 HIGH μ—μ„œ LOW

 

πŸ₯‘ 즉각 λ°˜μ‘ν•˜λŠ” κ·Έλ¦° 라이트

: νŒŒλž€ LEDλŠ” 1μ΄ˆλ§ˆλ‹€ 깜빑이고 λ²„νŠΌμ„ λˆ„λ₯΄λ©΄ 녹색 LEDκ°€ 즉각 μ λ“±ν•˜κΈ°

 

πŸ₯‘ 타이머

: 아두이노 μ»¨νŠΈλ‘€λŸ¬μ— λ‚΄μž₯된 ν•˜λ“œμ›¨μ–΄μ˜ ν•œ κ΅¬μ„±μš”μ†Œ

: Timer 0, Timer1, Timer2 3개의 타이머 있음

 

πŸ” TimerOne 라이브러리

// Timer1 에 μ‹œκ°„ 간격 μ„€μ •
Timer1.initialize(1000);

// μ‹œκ°„ 만료되면 μˆ˜ν–‰ν•  callback ν•¨μˆ˜ 등둝
Timer1.attachInterrupt(callback);

 

πŸ” Timer-master 라이브러리

: millis() ν•¨μˆ˜ ν™œμš©ν•΄μ„œ 폴링 λ°©μ‹μœΌλ‘œ 타이머 κ΅¬ν˜„

폴링 - μ–΄λ–€ νŠΉμ •ν•œ 사건이 λ°œμƒν–ˆλŠ”μ§€ 반볡적으둜 검사, μ§€μ •ν•œ λ™μž‘μ„ μˆ˜ν–‰ν•˜λŠ” 것

#import "Timer.h"

// Timer 객체 생성
Timer t;

// pin μƒνƒœλ₯Ό 맀 interval λ§ˆλ‹€ λ°˜μ „
t.oscillate(pin, interval, signal);

// 맀 interval λ§ˆλ‹€ callback ν•¨μˆ˜ μ‹€ν–‰
t.every(interval, callback);

// 타이머 μ΄λ²€νŠΈμ™€ κ΄€λ ¨λœ λͺ¨λ“  κΈ°λŠ₯을 μˆ˜ν–‰ν•˜λŠ” ν•¨μˆ˜λ‘œ loop λ‚΄ κΌ­ 호좜
t.update();

 

 

πŸ” μœ„μΉ˜λ… 타이머(WDT, Watchdog Timer)

: μ‹œμŠ€ν…œμ„ ν†΅μ œν•  수 μ—†λŠ” μ˜ˆμ™Έκ°€ λ°œμƒν•˜λ©΄ μžλ™μœΌλ‘œ μ‹œμŠ€ν…œμ„ 리셋

 

πŸ₯‘ 타이머λ₯Ό λ°”κΏ”μ£Όμ„Έμš”

: 두 개의 LED λ₯Ό 각각 λ‹€λ₯Έ μ£ΌκΈ° (1000ms, 700ms)둜 κΉœλΉ‘μ΄λ„λ‘ λ™μž‘

: Timer 1을 μ†Œν”„νŠΈμ›¨μ–΄λ‘œ κ΅¬ν˜„λœ 타이머 라이브러리(Timer-master)λ₯Ό ν™œμš©ν•˜λ„λ‘ λ°”κΎΈκΈ°

 

728x90
λ°˜μ‘ν˜•
Comments