#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);
}