GR-SAKURA
GR-KURUMI
GR-COTTON
GR-CITRUS
GR-PEACH
GR-KAEDE
GR-ADZUKI
GR-LYCHEE
GR-ROSE
GR-MANGO(*)
SNShield
Web Compiler
IDE for GR
TOPPERS関連
女子美コラボ
その他
※プロデューサミーティング中
作り方使い方資料
イベント関連
作品記事
体験記事
ライブラリ
ツール
その他・過去ファイル
現在、gr-sakuraのSerial2を使いまして、別の機器からシリアル通信をしてデータを集めていますが、別の機器からくるデータの一部が欠損して送られてくることがたまにあり、正確なデータが収集できない状態となっております。
データを正しく受信できるようにするには、どうしたらよいでしょうか。
該当箇所のプログラム
bool receive_data(char *ANS) { bool ret = false; int data_length,data_length1,data_length2; int i = 0; int count = 0;
load_time2(); if (Serial2.available()) { led1(); count = Serial2.available(); do { if(Serial2.available() != 0) { ANS[i] = Serial2.read(); Serial.print(ANS[i]); } else { Serial.println("continue"); delay(1); continue; } Serial.println(""); if (ANS[0] != '*') { ret = false; return ret; } else if(ANS[i] == '*') { Serial.println("* in"); ANS[0] = ANS[i]; i = 0; data_length = 0; } i++; if (i == POS_LENGTH) { data_length1 = (ANS[i - 2] - '0') * 10; data_length2 = (ANS[i - 1] - '0'); data_length = data_length1 + data_length2; }
if (i >= POS_LENGTH + (data_length * 2)) { Serial.print("data_length: "); Serial.println(POS_LENGTH + (data_length * 2)); break; } } while (true); ret = true; } else { led0(); delay(1);
} return ret;}
上記プログラムのSerial2.readでANS[i]に書き込んだ内容に欠損が見られます。
データは1秒間隔で機器からGR-sakuraへ送られます。
よろしくお願いいたします。