ESP32、TM1637、Tickerコマンドの組み合わせによる3分間タイマーの製作

ESP32におけるクロックカウンターの製作事例が見受けられなかったので忘備録を兼ねて記します。
表示器として使用したseeedstudio社の「Grove-4-Digit Display」の活用事例は、ご本家Arduinoマイコンボードを用いたサンプルは数多く見受けられますが、Arduino開発環境を利用できるESP32での事例が見つかりません。「Grove-4-Digit Display」は、制御チップとして、TM1637が用いられており、このTM1637については、純正ライブラリはもちろん、他のTM1637ライブラリでもESP32で利用可能です。しかし、クロックカウンターを製作しようとした場合、正確な秒刻みの割り込みが欲しくなりますが、ご本家用に作られたTimerOneライブラリがESP32では、利用できません。今回は、ESP32に用意されているTickerコマンドを利用して製作してみます。

●接続
 ・4-Digit-Display————————–ESP32
          CLK—————————————-22
          DIO—————————————-21
          VCC—————————————-3.3V
          GND—————————————GND

 ・ESP32————————————–3.3V_LED
   19—————————————–ANODE
            GND————————————-CATHODE

 ・ESP32————————————–タクトスイッチ
   5——————————————–pin1
            5———–1kオーム———3.3V      プルアップ
                   pin2——————————GND

●プログラムリスト

//
// ESP32 3min Clock Down Counter
//
// 2019-12-23
// Fun to think,Fun to make,
//

#include <Arduino.h>
#include <Ticker.h>
#include <TM1637.h>

#define LED_PIN 19
#define switch_PIN 5
int switch1;
int LED_status=0;
int count_down;
int minite;
int second10;
int second1;
int flash;

const int CLK = 22;
const int DIO = 21;
TM1637 tm1637(CLK,DIO);

Ticker ticker1;

void count_down_LED() //カウントダウン表示
{
count_down = count_down – 1;
LED_status=!LED_status;

minite = count_down / 60;
second10 = (count_down % 60)/10;
second1 = (count_down % 60) – second10 * 10;
int8_t ListDisp[4];
ListDisp[0] = 0;
ListDisp[1] = minite;
ListDisp[2] = second10;
ListDisp[3] = second1;

digitalWrite(LED_PIN,LED_status);
// delay (100);
tm1637.displayNum(0, 2);
tm1637.display(0,ListDisp[0]);
tm1637.display(1,ListDisp[1]);
tm1637.display(2,ListDisp[2]);
tm1637.display(3,ListDisp[3]);

if (count_down == 0)
{
for(int flash = 0; flash < 10; flash++)
{
tm1637.displayNum(8888);
delay (100);
tm1637.clearDisplay();
delay (100);
}
flash = 0;
ticker1.detach();
delay(1000);
ESP.restart();

}

}

void setup()
{
pinMode(LED_PIN,OUTPUT);
pinMode(switch_PIN,INPUT_PULLUP);
tm1637.init();
tm1637.set(BRIGHT_TYPICAL);//BRIGHT_TYPICAL = 2,BRIGHT_DARKEST = 0,BRIGHTEST = 7;
tm1637.displayNum(8888);

while(digitalRead(switch_PIN) == HIGH);
{
count_down = 180; //270
ticker1.attach_ms(1000,count_down_LED);
}
}

void loop()
{
//記述なし
}

●動作試験
 回路を組み立て電源を入れると「8888」と表示されます。
 タクトスイッチを押すと、カウントダウンが始まります。
 3分間のカウントダウンが終了すると「8888」がフラッシュして再び「8888」が表示されます。
 カウントダウンの動作中、ポート19に接続したLEDが2秒間隔で点灯します。

以上。