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チカのモードにより出力するデータを決定します。

タイマー割込みが使えるようになるといろいろな設計ができます。