#include <M5StickCPlus.h> int interval_msec[] = { 333, 1000, 2000 }; // Led, Lcd, Beep TaskHandle_t tH[3]; void ledTask(void *pvParam) { /** setup をここに書く **/ portTickType lastTime; int PIN = 10; pinMode(PIN, OUTPUT); // PINのモード設定 int highOrLow = 0; for (;;) { /** loop をここに書く **/ lastTime = xTaskGetTickCount(); vTaskDelayUntil(&lastTime, interval_msec[0] ); // 第2引数に、実行間隔ミリ秒を指定 digitalWrite(PIN, highOrLow); // HIGH = 1, LOW = 0 highOrLow = 1 - highOrLow; // HIGH <=> LOW を切り替える } } void lcdTask(void *pvParam) { /** setup をここに書く **/ portTickType lastTime; M5.Lcd.setRotation(0); M5.Lcd.fillScreen(GREEN); M5.Lcd.setTextColor(WHITE, OLIVE); M5.Lcd.setTextSize(2); M5.Lcd.setCursor(0, 0); int count = 0; for (;;) { /** loop をここに書く **/ M5.Lcd.printf("count=%d\n", count); count++; lastTime = xTaskGetTickCount(); vTaskDelayUntil(&lastTime, interval_msec[1] ); // 第2引数に、実行間隔ミリ秒を指定 if (count % 10 == 0) { M5.Lcd.fillScreen(GREEN); M5.Lcd.setCursor(0, 0); } } } void beepTask(void *pvParam) { /** setup をここに書く **/ portTickType lastTime; int f[8] = { 262, 294, 330, 349, 392, 440, 494, 524 }; int note = 0; for (;;) { /** loop をここに書く **/ lastTime = xTaskGetTickCount(); // ここでの時刻を変数に保存 M5.Beep.tone( f[note] ); delay(500); //0.5秒鳴らす M5.Beep.mute(); note = (note+1)%8; vTaskDelayUntil(&lastTime, interval_msec[2] ); // 途中の処理やdelayは含まず、「保存」時刻の2秒後まで待つ。 } } void setup() { M5.begin(); xTaskCreatePinnedToCore(ledTask , "LedT", 4096, NULL, 1, &tH[0], 1/*<= CoreNo.*/ ); xTaskCreatePinnedToCore(lcdTask , "LcdT", 4096, NULL, 1, &tH[1], 1/*<= CoreNo.*/ ); xTaskCreatePinnedToCore(beepTask,"BeepT", 4096, NULL, 1, &tH[2], 0/*<= CoreNo.*/ ); } void loop() { delay(10); }