아두이노

아두이노 millis

haniru 2026. 3. 29. 20:02

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