Blinker

はじめに

LEDの点灯・消灯する関数を定期的に実行させ、LEDを点滅させます。

プログラム

定義等

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
#include <Arduino.h>
#include <Ticker.h>

// attach a LED to pPIO 21
#define LED_PIN 21

Ticker blinker;
Ticker toggler;
Ticker changer;
float blinkerPace = 0.1;  //seconds
const float togglePeriod = 5; //seconds
 

LEDを接続するピン番号をLED_PINとして定義します。

blinkerとtoggler、changerは、それぞれ、Ticker型の変数で、定期的に実行する関数の設定を行うためのものです。

blinkerPaceは点滅の周期、togglePeriodは、点滅をする時間と消灯をする時間の間隔を示します。

change()

13
14
15
16
void change() {
  blinkerPace = 0.5;
}
 

もともと0.1だったblinkerPaceを0.5にします。

0.1秒周期で点滅していたLEDが、0.5秒周期の点滅に変わります。

17
18
19
20
void blink() {
  digitalWrite(LED_PIN, !digitalRead(LED_PIN));
}
 

LED_PINをdigitalRead()で読み取って、その値を!で反転し、digitalWrite()で書き込むことで、LEDが点灯しているときは消灯、消灯しているときは、点灯させます。

実際に動かしてみると動作するので、ESP32の場合は、pinMode()を意識しなくていいのかもしれません。

toggle()

21
22
23
24
25
26
27
28
29
30
31
32
33
void toggle() {
  static bool isBlinking = false;
  if (isBlinking) {
    blinker.detach();
    isBlinking = false;
  }
  else {
    blinker.attach(blinkerPace, blink);
    isBlinking = true;
  }
  digitalWrite(LED_PIN, LOW);  //make sure LED on on after toggling (pin LOW = led ON)
}
 

isBlinkingがtrueならば、blinker.detach()を呼ぶことで、関数(blink())の実行を停止します。

isBlinkingがfalseならば、blinker.attach()を呼び出すことで、blink()を定期実行(blinkerPace秒ごとに)させます。

digitalWrite()で、LEDを消灯します。

setup()

34
35
36
37
38
39
void setup() {
  pinMode(LED_PIN, OUTPUT);
  toggler.attach(togglePeriod, toggle);
  changer.once(30, change);
}
 

pinMode()を使って、LED_PINを出力モードに設定します。

toggler.attach()を使って、togglePeriod(=5)秒毎に、toggle()関数を呼び出すように設定します。

changer.once()を使って、30秒後に一度だけchange()関数を呼び出すように設定します。

toggle()とonce()は、以下のように呼び出されます。LEDの状態が点滅の間は、blink()が点滅周期(blinkerPace)毎に呼び出されます。

秒数実行関数LEDの状態点滅周期
5秒toggle()点滅0.1秒
10秒toggle()消灯
15秒toggle()点滅
20秒toggle()消灯
25秒toggle()点滅
30秒toggle(), once消灯0.5秒
40秒toggle()点滅
45秒toggle()消灯

loop()

40
41
42
void loop() {

}

何もしません。

バージョン

Hardware:ESP-WROOM-32
Software:Arduino core for the ESP32 2.0.4

最終更新日

November 1, 2022

inserted by FC2 system