![]() |
Lチカ |
お馴染みのLEDを点滅させるいわゆるLチカです。![]() LED出力を22番ピンにしました。 電流制限抵抗は220Ωです。 M5StackでLチカの記事は, Aボタンが押されたら点灯 Bボタンが押されたら消灯 みたいな記事ばかりで点滅している記事が見つかりませんでした。 別に見つからなくても全然問題ないのですぐ作ってしまいました。 タイマー割込みを使ったLチカです。 Aボタンが押されたらLチカ開始。もう一度押されたらLチカ終了。点滅周期は500msです。 #include <M5Stack.h> enum {OFF, ON}; #define LED_PIN 22 uint8_t g_ledOut = LOW; uint8_t g_ledBlinkMode = OFF; hw_timer_t* g_timer = NULL; void onTimer(){ if(g_ledBlinkMode == ON){ if(g_ledOut == LOW){ g_ledOut = HIGH; } else{ g_ledOut = LOW; } } else{ g_ledOut = LOW; } } // the setup routine runs once when M5Stack starts up void setup(){ // Initialize the M5Stack object M5.begin(); M5.Lcd.printf("LED blink world"); pinMode(LED_PIN, OUTPUT); // タイマの分周 g_timer = timerBegin(0, 80, true); // タイマ割り込みコールバック関数 onTimer を登録 timerAttachInterrupt(g_timer, &onTimer, true); // 割り込みタイミング(ms * 1000)の設定 timerAlarmWrite(g_timer, 250000, true); // タイマ有効化 timerAlarmEnable(g_timer); } // the loop routine runs over and over again forever void loop() { // BtnAを押したらLチカモード if (M5.BtnA.wasPressed()) { if(g_ledBlinkMode == OFF){ g_ledBlinkMode = ON; } else{ g_ledBlinkMode = OFF; } } digitalWrite(LED_PIN, g_ledOut); m5.update(); }setup()で、 タイマーの分解能 80MHz/80=1MHz にしています。またタイマーの応答関数(コールバック関数)onTimerを設定します。 タイマーの分解能が1MHzなので250msは250*1000=250000をtimerAlarmWrite()にセットします。 loop()で AボタンによるLチカのモード切替をします。 また現在出力すべきLEDのON・OFFデータを出力します。 onTimer()で、 Lチカのモードにより出力するデータを決定します。 タイマー割込みが使えるようになるといろいろな設計ができます。 |