パラメータの送信とかで使いたくなるカンマ区切りのデータですが、意外とお手軽に実装できたので紹介したいと思います。
1.解読の流れ
解読の流れとしてはこんな感じ
①シリアル入力をバッファに突っ込む
②strtok関数でトークンに分解して、各変数に読み込む
③atoi関数で数値に変換
2.実装
int angle = 0, mot_sta = 0, power = 0, i = 0; char buff[30]; void setup() { Serial.begin(9600); } void loop() { if (Serial.available() > 0) { buff[i] = Serial.read(); if (buff[i] == 'e') { buff[i] == '\0'; angle = atoi(strtok(buff, ",")); mot_sta = atoi(strtok(NULL, ",")); power = atoi(strtok(NULL, ",")); Serial.println(angle); Serial.println(mot_sta); Serial.println(power); i = 0; } else { i += 1; } } }
今回のプログラムはangle、mot_sta、powerの3つの変数に値を代入するモノです。
Arduino側に送られてくるフォーマットはこんな感じ
10,20,30,e
末尾の"e"はデータの終端を表す信号で、こいつが出るまでバッファに送られてきたデータを書き出します。
そのあと、strtok関数でバッファの中身を解読します。この関数は一回文字列に対して実行するごとに1つずつトークン(のポインタ)を返します。また2回目以降は対象の文字列を"NULL"にしてあげる必要があります。
それと並行してトークン(のポインタ)をatoi関数に入れることでint型の数値が得られます。atofを使えばfloat型として数値が得られるようです。
今回はここを参考にしました。
http://www9.plala.or.jp/sgwr-t/lib/strtok.html
©2018 shts All Right Reserved.
0 件のコメント:
コメントを投稿