パソコン・スマホ備忘録

パソコン、スマホ、マイコン、家電などの備忘録と日記。使えるところを簡潔に解説!

Arduino

Arduinoのシリアル通信で文字の入出力:文字列

前回はArduinoのシリアル通信で一文字つづ読み込み、それをそのまま書き込むプログラムを考えました。今回は「文字列」読み書きしてみます。

スケッチ例

char in[60];//文字列格納用
int i=0;//文字カウント用
void setup(){
  Serial.begin(9600); // シリアルポートを9600 bpsで初期化
}
void loop(){
  if (Serial.available() > 0){ // 受信したデータが存在する
    in[i] = Serial.read();    //文字の読み込み」
    if (in[i] == '/') {       //「/」が読み込まれたなら文字列の最後とみなし
      in[i] = '\0';           //終端文字(「Null」と同様)を挿入
      Serial.write(in);       //シリアルに文字列を書込
      Serial.write("\n");     //改行コードを書込
      i=0;                    //カウントを戻す
    }
  else { i++; }               //文字数をカウントする
  }
}
    

文字列は60文字分までです。シリアルモニタから"/"が入力されるまでの一連の文字列を配列に入れ、その文字列をシリアルに書き込んでいます。

シリアルモニタで「abcdefg/」「hijklmn/」と入力すると以下のようになります。

スクリーンショット (21)

シリアルモニタからEnterキーを押しても文字列の最後とはみなされず、バッファに蓄えられます。"/"が入力された時点で文字列の最後とみなし、処理しています。

「Serial.available()」 でバッファに何byteのデータが入っているのかを知ることができます。

-Arduino