millis 함수로 현재 시간 확인하기
void setup() {
Serial.begin(115200);
}
void loop() {
unsigned long t_now = millis();
Serial.println(t_now);
}

millis 함수로 delay 대체하기
unsigned long t_prev = 0;
const unsigned long t_delay = 1000;
void setup() {
Serial.begin(115200);
}
void loop() {
unsigned long t_now = millis();
if (t_now - t_prev >= t_delay) {
t_prev = t_now;
Serial.println(t_now);
}
}

1초에 한번 t1, 0.5초에 한번 t2 문자열 출력
unsigned long t1_prev = 0;
const unsigned long t1_delay = 1000;
unsigned long t2_prev = 0;
const unsigned long t2_delay = 500;
void setup() {
Serial.begin(115200);
}
void loop() {
unsigned long t1_now = millis();
if (t1_now - t1_prev >= t1_delay) {
t1_prev = t1_now;
Serial.println("t1");
}
unsigned long t2_now = millis();
if (t2_now - t2_prev >= t2_delay) {
t2_prev = t2_now;
Serial.println("\tt2");
}
}

LED 점멸 반복해보기 - 0.5초 간격
const int LED = 13;
void setup() {
pinMode(LED, OUTPUT);
}
void loop() {
for (int on_off=0; on_off<=1; on_off++) {
digitalWrite(LED, on_off);
delay(500);
}
}
const int LED = 13;
int on_off = 0;
unsigned long t_prev = 0;
const unsigned long t_delay = 500;
void setup() {
pinMode(LED, OUTPUT);
}
void loop() {
unsigned long t_now = millis();
if (t_now - t_prev >= t_delay) {
t_prev = t_now;
on_off++;
if (on_off>1) on_off=0;
digitalWrite(LED, on_off);
}
}
KakaoTalk_20260329_133054233.mp4
0.54MB
millis 함수로 LED 밝기 조절해보기 - 1초간 256단계로 LED 의 밝기가 증가
const int LED = 10;
int t_high = 0;
unsigned long t_prev = 0;
const unsigned long t_delay = 4;
void setup() {
}
void loop() {
unsigned long t_now = millis();
if (t_now - t_prev >= t_delay) {
t_prev = t_now;
t_high++;
if (t_high > 255) t_high = 0;
analogWrite(LED, t_high);
}
}
class NDelayFunc {
unsigned long t_prev;
const unsigned long t_delay;
void (* func)();
public:
NDelayFunc(
const unsigned long t_delay,
void (* func)())
: t_prev(0), t_delay(t_delay), func(func) {}
void run() {
unsigned long t_now = millis();
if (t_now - t_prev >= t_delay) {
t_prev = t_now;
func();
}
}
};
const int LED = 10;
unsigned int t_high = 0;
void fading() {
t_high++;
if(t_high > 255) t_high = 0;
analogWrite(LED, t_high);
}
NDelayFunc nDelayFading(4, fading);
void setup() {
}
void loop() {
nDelayFading.run();
}
KakaoTalk_20260329_134209664.mp4
0.47MB
mills 함수로 다중작업 하기
13번은 0.5초 주기로, 10번은 1초 주기로 깜빡깜빡 한다
const int t1_LED = 13;
unsigned int on_off = 0;
const int t2_LED = 10;
unsigned int t_high = 0;
unsigned long t1_prev = 0;
const unsigned long t1_delay = 500;
unsigned long t2_prev = 0;
const unsigned long t2_delay = 4;
void setup() {
pinMode(t1_LED, OUTPUT);
}
void loop() {
unsigned long t1_now = millis();
if (t1_now - t1_prev >= t1_delay) {
t1_prev = t1_now;
on_off++;
if (on_off > 1) on_off = 0;
digitalWrite(t1_LED, on_off);
}
unsigned long t2_now = millis();
if (t2_now - t2_prev >= t2_delay) {
t2_prev = t2_now;
t_high++;
if (t_high > 255) t_high = 0;
analogWrite(t2_LED, t_high);
}
}
KakaoTalk_20260329_155030074.mp4
0.85MB
NDelayFunc 사용자 정의 라이브러리 만들기
(C:\Users\유저명\OneDrive\문서\Arduino\libraries)


NDelayFunc.cpp
#include "Arduino.h"
#include "NDelayFunc.h"
NDelayFunc::NDelayFunc(
const unsigned long t_delay,
void (* func)())
: t_prev(0), t_delay(t_delay), func(func) {}
void NDelayFunc::run() {
unsigned long t_now = millis();
if (t_now - t_prev >= t_delay) {
t_prev = t_now;
func();
}
}
NDelayFunc.h
#ifndef NDelayFunc_h_
#define NDelayFunc_h_
class NDelayFunc {
unsigned long t_prev;
const unsigned long t_delay;
void (* func)();
public:
NDelayFunc(
const unsigned long t_delay,
void (* func)());
void run();
};
#endif

NDelayFunc 사용자 정의 라이브러리 사용하기1
#include "NDelayFunc.h"
const int LED = 10;
unsigned int t_high = 0;
void fading() {
t_high++;
if(t_high>255) t_high=0;
analogWrite(LED, t_high);
}
NDelayFunc nDelayFading(4, fading);
void setup() {
}
void loop() {
nDelayFading.run();
}
NDelayFunc 사용자 정의 라이브러리 사용하기2
#include "NDelayFunc.h"
const int t1_LED = 13;
unsigned int on_off = 0;
const int t2_LED = 10;
unsigned int t_high = 0;
unsigned long t1_prev = 0;
const unsigned long t1_delay = 500;
unsigned long t2_prev = 0;
const unsigned long t2_delay = 4;
void setup() {
pinMode(t1_LED, OUTPUT);
}
void loop() {
unsigned long t1_now = millis();
if (t1_now - t1_prev >= t1_delay) {
t1_prev = t1_now;
on_off++;
if (on_off>1) on_off = 0;
digitalWrite(t1_LED, on_off);
}
unsigned long t2_now = millis();
if (t2_now - t2_prev >= t2_delay) {
t2_prev = t2_now;
t_high++;
if (t_high>255) t_high = 0;
analogWrite(t2_LED, t_high);
}
}
13번 핀에 연결된 LED를 0.5초 간격으로, 10번 핀에 연결된 LED를 1초 간격으로 껐다 켜기
#include "NDelayFunc.h"
const int blink_LED = 13;
unsigned int on_off = 0;
const int fading_LED = 10;
unsigned int t_high = 0;
void blink() {
on_off++;
if (on_off > 1) on_off = 0;
digitalWrite(blink_LED, on_off);
}
void fading() {
t_high++;
if (t_high>255) t_high = 0;
analogWrite(fading_LED, t_high);
}
NDelayFunc nDelayBlink(500, blink);
NDelayFunc nDelayFading(4, fading);
void setup() {
pinMode(blink_LED, OUTPUT);
}
void loop() {
nDelayBlink.run();
nDelayFading.run();
}'아두이노' 카테고리의 다른 글
| 온습도 센서(D11) openCR 에러 (0) | 2026.04.09 |
|---|---|
| 아두이노 - 도트 매트릭스 (0) | 2026.03.29 |
| 아두이노 - 7세그먼트 (0) | 2026.03.26 |
| 아두이노 - 서보모터, 초음파 (0) | 2026.03.23 |
| 아두이노 - Timer (빛, 부저) (0) | 2026.03.23 |