Serial.flush () in arduino (Deutsch)

Ich bin neu bei Arduino und habe Folgendes:

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); } 

Die Code-Ausgabe in der virtuellen Brotkarte: (i Enter 100)

Ausgabe 1

Aber wenn ich Serial.flush() entferne Die Ausgabe wie (ich habe 100 eingegeben)

Ausgabe 2

Ich erwarte die Ausgabe:

Nummer eingeben (ich möchte eingeben Nummer 100 nach der Ausgabe)

100

Warum funktioniert der Code nicht?

Ich verwende Arduino IDE mit virtuellem Bread Board (ATMega328p)

Kommentare

  • Es handelt sich um einen Fehler der Emulation. Serial.flush () wartet nur, bis die Daten vollständig gesendet wurden.

Antwort

Nicht bekannt, welches virtuelle Steckbrett Auf einem normalen Arduino würde es Folgendes tun:
Serial.flush () löscht den Puffer und dies dauert einige Zeit. Normalerweise warten Sie mindestens 100 ms, um erneut in diesen Puffer zu schreiben / lesen.
Da Ihr Code im Setup ausgeführt wird (also nur einmal), ist die Seriennummer nicht verfügbar, da sie immer noch leert und somit Ihr Ergebnis.
Wie der Name Setup besagt, sollte dies nur zum Einrichten von HW / SW verwendet werden, aber nicht zum Ausführen Routinen, da Sie möglicherweise alle möglichen seltsamen Ergebnisse erzielen.
Wenn Sie in Ihrer Kommunikation „\ n“, auch bekannt als Newline-Terminatoren, verwenden, können Sie diese verwenden. Eine Spülung ist nur erforderlich, wenn die Verbindung unterbrochen wird und Sie die Daten erneut senden müssen.
BEARBEITEN

Waits for the transmission of outgoing serial data to complete. 

Wenn Sie ein Zeichen senden, wird es zur Übertragung in einen Puffer gestellt. Es dauert einige Zeit, bis jedes Zeichen gesendet wird, da die Seriennummer langsam ist. Sobald es sich im Puffer befindet, wird es automatisch im Hintergrund gesendet, während das Programm sofort mit der nächsten Anweisung fortfährt. Dies geschieht, damit das Programm keine Zeit damit verschwendet, auf das Senden von Zeichen zu warten.

flush () ist eine Möglichkeit, auf das Senden zu warten, anstatt sofort im Benutzer fortzufahren Programm.

Nach dem Aufruf von flush () können Sie also sicher sein, dass alle Daten gesendet wurden und der Puffer leer ist. In Ihrem Fall, in dem Sie ihn platziert haben, macht dies keinen Sinn.

Kommentare

  • Können Sie dies genauer erklären und Arduino verwendet denselben Puffer für Eingabe und Ausgabe oder serial.flush (), um sowohl Eingabe- als auch Ausgabepuffer zu leeren?
  • Siehe meine Bearbeitung oben. Bitte als akzeptiert markieren, wenn es in Ordnung ist.
  • In Ihrem Fall, in dem Sie es platziert haben, macht es keinen Sinn, warum? Arduino wartet nicht in der Setup-Funktion und wofür ist die Lösung Das kannst du erklären, bitte, ich bin neu in diesem Bereich.
  • Bitte lies auf Arduino.cc das Basic101. Ich werde hier nicht lehren, dass wir jeweils ein Problem lösen.
  • Irgendwie funktioniert diese Antwort nicht ' Sagen Sie nichts, um das Problem zu beantworten

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.