Newer
Older
M5StickCPlus_FactoryTest2022 / SampleSrc / serial02.ino
@motoki miura motoki miura on 5 Apr 2023 1 KB mod
#include <M5StickCPlus.h>

TaskHandle_t blinkTH; //LED点滅用

int num = 0;
char buf[100];

void setup() {
  Serial.begin(115200); // 通信速度をbpsで設定

  xTaskCreatePinnedToCore(blinkTask , "blink", 1024, NULL, 1, &blinkTH,  1 );//LED点滅
}

void loop() {
  int pos = 0;
  while (Serial.available()) { //PCから送信された文字があるあいだ、くりかえす
    char c = Serial.read(); // 1バイト読み取る
    buf[pos] = c;           // 配列buf に格納
    pos++;    // 格納位置をひとつ右へ
  }
  if (pos > 0) {
    buf[pos] = 0; // さいごに Null (文字列の終端)を追加(これを忘れるとどうなる?)
    Serial.print("> from pc: ");
    Serial.print( buf ); // 格納しておいた文字列を表示
    if (buf[0] == '0' && pos == 2) { // buf={ 48(='0'), 10(=改行) } のとき
      num = 0;  // num を 0 にする
      Serial.println( "Reset num" );
    }
    delay(2000);
  }

  Serial.printf("%d \n" , num );
  num++;
  delay(500);
}

// LED点滅用
void blinkTask(void *pvParam){
  portTickType lastTime;
  int PIN = 10;
  pinMode(PIN, OUTPUT); // PINのモード設定
  int highOrLow = 0;
  for (;;) {
    /** loop をここに書く **/
    lastTime = xTaskGetTickCount();
    vTaskDelayUntil(&lastTime, num*10+100 ); // 第2引数に、実行間隔ミリ秒を指定
    digitalWrite(PIN, highOrLow); // HIGH = 1, LOW = 0
    highOrLow = 1 - highOrLow; // HIGH <=> LOW を切り替える
  }
}