Newer
Older
M5StickCPlus_FactoryTest2022 / SampleSrc / serial03.ino
// シリアル入力サンプル src/serial03.ino

// 使い方(VSCodeの場合)
// 1.このスケッチ(serial03.ino)をM5StickC Plusに書き込む("./Upload.sh serial03.ino"などを実行)
// 2.Visual Studio Code(以下VSCode)を起動し、M5StickC PlusをPCに接続する
// 3.VSCodeの右下のusbserialをクリックしてシリアルポートを設定する(Windowsなら"COM3"など Macなら"/dev/tty.usbserial-XXXXXXXXXX"など)
// 4.シリアルモニタを起動する(VSCodeの右下コンセント🔌マークを押す)
// 5.キーボードのF1キーを押して"Arduino: Send Text to Serial Port"を選択(キーボードで"Arduino"と入力すると絞り込める)
// 6.送りたい文字を入力してEnterキーを押す
// 7.入力した文字がLCD画面とシリアルモニタに表示されれば成功

#include <M5StickCPlus.h>

TaskHandle_t blinkTH; //LED点滅用

int line = 0; // LCD画面から文字が見切れないように文字数が一定以上になったら画面を初期化する処理に使用
String text; // PCから送られてきたシリアル入力を格納する

void setup()
{
  M5.begin(115200); // M5StickCPlusの初期化処理
  M5.Lcd.setRotation(3); // Aボタンが左側になる向きで画面を使用するよう設定
  M5.Lcd.fillScreen(BLACK); // 画面を黒く塗りつぶす
  M5.Lcd.setCursor(0, 0, 2); // 左から0,上から0ピクセルの位置にフォントサイズ2の文字を出力するよう設定
  M5.Lcd.println("Serial Input Test");
  M5.Lcd.println("--------------------------------------");
  //    Serial.begin(115200); // シリアル通信を開始する
  
}

void loop()
{
  if(Serial.available()) // シリアルが使用可能なら
  {
    xTaskCreatePinnedToCore(blinkTask , "blink", 1024, NULL, 1, &blinkTH,  1 );//LED点滅1回
    text = Serial.readString(); // PCから送られてきたシリアル入力を text に格納する
    if (line >= 5) // LCD画面から文字が見切れないように文字数が一定以上になったら画面を初期化する
    {
      M5.Lcd.fillScreen(BLACK);
      M5.Lcd.setCursor(0, 0, 2);
      M5.Lcd.println("Serial Input Test");
      M5.Lcd.println("--------------------------------------");
      line = 0;
    }
    M5.Lcd.print("From PC : " + text + "\0"); // \0(ヌル文字)を文字列の最後につけて終端処理をする
    Serial.print("Recieved : " + text + "\0"); //送られてきた文字をPCのシリアルモニタにも出力
    line++;
  }
  delay(30); // delayをloop内につけることで負荷の軽減を図る
}

// LED点滅用
void blinkTask(void *pvParam){
  portTickType lastTime;
  int PIN = 10;
  pinMode(PIN, OUTPUT); // PINのモード設定
  digitalWrite(PIN, 0); // HIGH = 1, LOW = 0
  lastTime = xTaskGetTickCount();
  vTaskDelayUntil(&lastTime, 2000 ); // 第2引数に、実行間隔ミリ秒を指定
  digitalWrite(PIN, 1); // HIGH = 1, LOW = 0
  vTaskDelete(NULL); // 自タスクを削除する
}