Arduinoは初めてで、次のものがあります:
int delaynum; char cval[12]; void setup() { Serial.begin(9600); Serial.print("Enter Number"); Serial.flush(); int i=0; while(i<12) { if(Serial.available()>0) { char ch=Serial.read(); if(ch>="0"&&ch<="9") { cval[i]=ch; i++; } else { cval[i]=0; delaynum=atoi(cval); break; } } } } void loop() { Serial.println(delaynum); exit(0); }
仮想ブレッドボードでのコード出力:(i100を入力)
しかし、Serial.flush()
を削除すると(i Entered 100)のような出力
出力を期待しています:
番号を入力してください(入力したい出力後の番号100)
100
コードが機能しないのはなぜですか?
仮想ブレッドボード(ATMega328p)でArduinoIDEを使用しています
コメント
- これはエミュレーションのエラーです。 Serial.flush()は、データが完全に送信されるまで待機します。
回答
仮想ブレッドボードがわからない通常のArduinoでは次のようになります。
Serial.flush()はバッファをクリアします。これには通常、約100ミリ秒待ってからそのバッファに再度書き込み/読み取りを行う必要があります。
コードがセットアップで実行されると(1回だけ)、シリアルはまだフラッシュされているため使用できず、結果が得られます。
セットアップの名前が示すように、これはHW / SWのセットアップにのみ使用し、実行しないでください。あらゆる種類の奇妙な結果が得られる可能性があるため、ルーチン。
通信で「\ n」別名改行ターミネータを使用する場合は、それらを使用できます。フラッシュが必要になるのは、接続が中断され、データを再送信する必要がある場合のみです。
編集
Waits for the transmission of outgoing serial data to complete.
文字を送信すると、送信用のバッファーに配置されます。シリアルが遅いため、各キャラクターの送信に時間がかかります。バッファに入ると、プログラムがすぐに次のステートメントに進む間、バックグラウンドで自動的に送信されます。これは、プログラムが文字の送信を待つ時間を無駄にしないようにするためです。
flush()は、ユーザー内ですぐに移動するのではなく、文字が送信されるのを待つ方法です。プログラム。
したがって、flush()を呼び出した後、すべてのデータが送信され、バッファが空であることを確認できます。したがって、それを配置した場合は意味がありません。
コメント
- 詳細を説明できますか?Arduinoは入力と出力の両方に同じバッファーを使用するか、serial.flush()が入力と出力の両方のバッファーをフラッシュしますか?
- 上記の私の編集を参照してください。問題がない場合は承認済みとしてマークしてください
- それで、配置した場合は意味がありません。なぜですか?Arduinoはセットアップ機能を待機せず、解決策は何ですか。これは説明できますか?私はこれに不慣れです。
- Arduino.ccでbasic101を読んでください。ここでは教えません。一度に1つの問題を解決します
- どういうわけかこの答えは'問題に答えるために何も言わない