Newer
Older
OurSketch / SampleSrc / task01.ino
@motoki miura motoki miura on 10 May 2022 2 KB SampleSource
#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);
}