Arduinoからのシリアルモニタ入力を扱ってみる
最近VS codeのArduinoエディタを使おうとして、面倒になって結局公式エディタを使っています。
さて、今回はArduinoを使う方なら頻繁に使うであろうシリアルモニタから値の出力ではなく入力を行おう!というライトな記事です。
軽くエコーバックから
エコーバックをします。スーパーでレジ袋の代わりに商品を入れるやつの話ではないです。
因みに、私は袋を貰わずに腕に抱えて食材を持ち帰るスタイルです。野菜とか調味料抱えて家に帰るの海外っぽくないですか??
サンプルコード(エコーバック)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
void setup() { Serial.begin(9600); } // シリアル入力受け取り関数 int serialScanf(String *str){ int len=Serial.available(); if(len==0) return 0; *str = Serial.readString(); return len; } void loop() { String str; if( serialScanf(&str)!=0){ Serial.print("->"); Serial.print(str); } } |
解説
エコーバックというのは、CUIで入力した内容が返ってくるものを指すそうです。
今回は、入力を受け取る以下の関数を用意します。
1 |
int serialScanf(String *str) |
・引数:受け取った文字列の格納先アドレス(String*)
・戻値:受け取った文字列の文字数(int)
1 |
Serial.available() |
にてシリアル入力の文字数を取得します。
この時、0文字の(入力がない)場合は0を返します。
1 |
Serial.readString() |
にてシリアル入力の文字列を取得します。
取得した値は、引数として受け取ったString型変数のアドレスに格納されます。
String型からchar型配列に格納してみる
String型ではデータとして扱いやすいので今回はchar型配列に格納したいと思います。
と言ってもメインのループ処理に1行追加するだけです。
1 |
str.toCharArray(buf,(int)(str.length())) |
あくまで、bufというchar型配列を宣言したという前提で説明しますが、この1行でString型の str という変数からchar型配列 buf に格納されます。
あとは好きなようにデータを扱ってみましょう。
最後に
上記のプログラムを簡単に導入したいのであれば、キャリブレーションの値をシリアルモニタから入力してその値に変更する処理とか付けてみるのは良さそうですね。
細かいキャリブレーションを行う時にはいいかもしれません。
応用例としては接続したPC内の別プログラムとデータの送受信を行えるUSBデバイスのようなものの開発に役立ちそうですね。ゲームのコントローラを作ってみてもいいかもしれません。
今回のブログ曲
今回投稿中に聴いていた曲はこちら