質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

Q&A

解決済

1回答

2922閲覧

なぜこういう結果になるか。

wanwai

総合スコア12

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

0グッド

0クリップ

投稿2017/02/19 13:40

以下のコードはシリアル通信で、受信したデータをカンマ区切りでそれぞれ配列に格納するコードです。

例えば 10.5,20.5 と受信すると、ch[0]に10.5、ch[1]に20.5が格納され、
10.5
20.5
と出力されます。

1回目の受信は正常に作動しますが、2回目からゴミが入り込みます。
例えば先ほど同様 10.5,20.5 と受信すると、
210.5
20.5
と、最初の数字に2が入り込みます。なぜでしょうか?

因みにSerial.flush()を使用してみましたが、ダメでした。

char buf[20]; int i = 0; double ch[2]; bool dec = false; void setup() { Serial.begin(9600); Serial.println("start"); } void loop() { while(Serial.available() > 0) { buf[i] = Serial.read(); if(buf[i] == 'e') { buf[i] = '\0'; Serial.println(buf); ch[0] = atof(strtok(buf, ",")); ch[1] = atof(strtok(NULL, ",")); Serial.println(ch[0]); Serial.println(ch[1]); ch[0] = 0; ch[1] = 0; i = 0; } i++; } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

if内から出た後i++しているので、二回目からはbuf[1]からになります。

投稿2017/02/19 14:11

ozwk

総合スコア13521

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

wanwai

2017/02/19 14:59

ありがとうございました。 こんなので約5時間くらい悩んでいました。本当に感謝です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問