arduinoでシリアルモニタ経由でint型を送信するプログラム

どーもTOKKOです.

先日の記事で備忘録として残したプログラムの記事です.
arduinoにint型を渡す場合はシリアル通信を用いてchar型からint型への変換を行いますね.しかし,arduinoシリアル通信では,エンターキーを押して送信するときの終端を検出することが出来ないため,個人で終端文字を打って文字の送信を完了していました.

例えば,"200"を送信したいときは,"200F"のようにモニタに入力することで"F"を検出してシリアル通信の終了を判断するのが簡単な方法です.

しかし,めんどくさい…
そこで,最後のFを自ら挿入しなくてもシリアルモニタ経由でint型を渡すプログラムを作りました.結構回りくどくなってしまったのでもう少し考えればスマートになりそうです.

以下ソースコード
----------------------alphabet_to_integer.ino---------------------------
char c_num[6];
int i_num;
int i = 0;

void setup() {
Serial.begin(9600);
//フッターの初期化
for(i = 0; i < 10; i++){
c_num[i]='F';
}
i = 0;
}

void loop() {
while(1){
//入力があるまで待機し、1文字取得してbreak
if (Serial.available()) {
c_num[i] = Serial.read();
i++;
//次のシリアル通信まで待機する時間
delay(100);
break;
}
}
//次のシリアル通信の入力を取得
//終わるとelseの分岐へ
while(1){
if (Serial.available()) {
c_num[i] = Serial.read();
i++;
}else{
//入力した数値を送信し終わるとこのループに入る
if (c_num[i] == 'F') {
// 末尾に終端文字の挿入
c_num[i] = '\0';
break;
}
}
}

//atoi関数へ文字型配列の先頭アドレス?を渡す
//alphabet to integerの略らしい
i_num = atoi(c_num);
Serial.println(i_num);
//フッターの初期化
for(i = 0; i < 10; i++){
c_num[i]='F';
}
//カウンタを最後に初期化する
i = 0;
delay(500);
}
------------------ここまで-----------------------------------------


この記事へのコメント