Serial.flush () in arduino (Polski)

Jestem nowy w Arduino i mam:

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

Kod wyjściowy w wirtualnej tablicy chlebowej: (Wpisałem 100)

Wyjście 1

Ale kiedy usunę Serial.flush() Dane wyjściowe takie jak (Wpisałem 100)

Wyjście 2

Oczekuję wyniku:

Wpisz liczbę (chcę wprowadzić numer 100 po wyjściu)

100

Dlaczego kod nie działa?

Używam Arduino IDE z wirtualną płytką chlebową (ATMega328p)

Komentarze

  • to jest błąd emulacji. Serial.flush () czeka tylko na całkowite wysłanie danych.

Odpowiedź

Nie wiem, jaka wirtualna płytka prototypowa robi na normalnym Arduino, zrobiłoby to następująco:
Serial.flush () czyści bufor i wymaga to trochę czasu, normalnie trzeba czekać minimum około 100 ms na ponowne zapisanie / odczytanie w tym buforze.
Ponieważ twój kod jest uruchamiany w konfiguracji (a więc tylko raz), serial nie jest dostępny, ponieważ nadal jest opróżniany, a więc twój wynik.
Jak mówi nazwa setupu, powinno to być używane tylko do konfiguracji HW / SW, ale nie do uruchamiania procedury, ponieważ możesz uzyskać różnego rodzaju dziwne wyniki.
Jeśli używasz „\ n”, czyli terminatorów nowej linii w swojej komunikacji, możesz je wykorzystać, a opróżnianie będzie konieczne tylko wtedy, gdy połączenie zostanie przerwane i musisz ponownie wysłać dane.
EDYTUJ

Waits for the transmission of outgoing serial data to complete. 

Jeśli wysyłasz znak, jest on umieszczany w buforze do transmisji. Wysłanie każdego znaku zajmuje trochę czasu, ponieważ łącze szeregowe jest wolne. Gdy znajdzie się w buforze, zostanie automatycznie wysłany w tle, podczas gdy program natychmiast przejdzie do następnej instrukcji. Dzieje się tak, aby program nie tracił czasu na oczekiwanie na wysłanie znaków.

flush () to sposób na czekanie na wysłanie, zamiast natychmiastowego przechodzenia do użytkownika

Więc po wywołaniu flush () możesz być pewien, że wszystkie dane zostały wysłane, a bufor jest pusty. Więc w twoim przypadku, gdzie go umieściłeś, nie ma to sensu.

Komentarze

  • Czy możesz wyjaśnić bardziej szczegółowo i czy Arduino używa tego samego bufora zarówno dla wejścia, jak i wyjścia, czy też serial.flush () czyści bufory wejściowe i wyjściowe?
  • Zobacz moją edycję powyżej. Zaznacz jako zaakceptowaną, jeśli wszystko jest w porządku
  • Więc w twoim przypadku, gdzie ją umieściłeś, nie ma to sensu, dlaczego? Arduino nie czeka na funkcję konfiguracji i do czego służy rozwiązanie to czy możesz wyjaśnić proszę, jestem nowy w tym.
  • Proszę przeczytać na Arduino.cc basic101 Nie mam zamiaru tutaj uczyć, rozwiązujemy jeden problem na raz
  • jakoś ta odpowiedź nie ' nie mów nic, aby rozwiązać problem

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *