Serial.flush () dans arduino

Je suis nouveau sur Arduino et jai ce qui suit:

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

La sortie de code dans la planche à pain virtuelle: (i Entré 100)

Sortie 1

Mais quand je supprime Serial.flush() La sortie comme (i Entered 100)

Sortie 2

Jattends la sortie:

Entrez le numéro (je veux entrer numéro 100 après la sortie)

100

Pourquoi le code ne fonctionne pas?

Jutilise Arduino IDE avec une carte de pain virtuelle (ATMega328p)

Commentaires

  • cest une erreur de lémulation. Serial.flush () attend seulement que les données soient complètement envoyées.

Réponse

Ne sachant pas quelle maquette virtuelle fait sur un Arduino normal, il ferait ce qui suit:
Serial.flush () efface le tampon et cela nécessite normalement un certain temps, vous attendez au minimum environ 100 ms pour écrire / lire à nouveau dans ce tampon.
Comme votre code sexécute dans la configuration (donc juste une fois), le numéro de série nest pas disponible car il est toujours en cours de vidage et donc votre résultat.
Comme son nom lindique, cela ne doit être utilisé que pour configurer HW / SW mais pas pour exécuter routines car vous pouvez obtenir toutes sortes de résultats étranges.
Si vous utilisez des terminateurs de nouvelle ligne « \ n » aka dans votre communication, vous pouvez les utiliser et le vidage ne sera nécessaire que si la connexion est interrompue et que vous devez renvoyer les données.
EDIT

Waits for the transmission of outgoing serial data to complete. 

Si vous envoyez un caractère, il est placé dans un tampon pour la transmission. Lenvoi de chaque caractère prend du temps car le numéro de série est lent. Une fois quil est dans la mémoire tampon, il sera envoyé automatiquement en arrière-plan tandis que le programme passe immédiatement à linstruction suivante. Ceci est fait pour que le programme « ne perde pas de temps à attendre que les caractères soient envoyés.

flush () est un moyen dattendre quil soit envoyé, au lieu de passer immédiatement à lutilisateur

Donc, après avoir appelé flush (), vous pouvez être sûr que toutes les données ont été envoyées et que le tampon est vide. Donc, dans votre cas où vous lavez placé, cela na aucun sens.

Commentaires

  • Pouvez-vous expliquer plus en détail et Arduino utilise le même tampon pour lentrée et la sortie ou serial.flush () vider les tampons dentrée et de sortie?
  • Voir ma modification ci-dessus. Veuillez marquer comme accepté si cest ok
  • Donc, dans votre cas où vous lavez placé, cela na aucun sens, pourquoi? Arduino nattend pas dans la fonction de configuration et quelle est la solution pour ceci pouvez-vous expliquer sil vous plaît je suis nouveau dans ce domaine.
  • Sil vous plaît lire sur Arduino.cc le basic101 Je ne vais pas enseigner ici, nous résolvons un problème à la fois
  • en quelque sorte cette réponse ne ' ne rien dire pour répondre au problème

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *