Arduinoで遊ぶページ

Arduinoで遊んだ結果を残すページです。
garretlab
サンプルプログラム解説

概要

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

プログラム

定義等

#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()

void change() {
  blinkerPace = 0.5;
}

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

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

blink()

void blink() {
  digitalWrite(LED_PIN, !digitalRead(LED_PIN));
}

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

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

toggle()

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()

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()

void loop() {
  
}

何もしません。

バージョン

1.0.0



メニューを表示するためにJavaScriptを有効にしてください。

Arduinoで遊ぶページ
Copyright © 2018 garretlab all rights reserved.
inserted by FC2 system