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/」と入力すると以下のようになります。
シリアルモニタからEnterキーを押しても文字列の最後とはみなされず、バッファに蓄えられます。"/"が入力された時点で文字列の最後とみなし、処理しています。
「Serial.available()」 でバッファに何byteのデータが入っているのかを知ることができます。