前回は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のデータが入っているのかを知ることができます。