Serial.flush () en arduino

Soy nuevo en Arduino y tengo lo siguiente:

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

El código de salida en la placa de pruebas virtual: (i Ingresé 100)

Salida 1

Pero cuando elimino Serial.flush() la salida como (ingresé 100)

Salida 2

Estoy esperando la salida:

Ingrese el número (quiero ingresar número 100 después de la salida)

100

¿Por qué el código no funciona?

Estoy usando Arduino IDE con placa virtual (ATMega328p)

Comentarios

  • es un error de la emulación. Serial.flush () solo espera hasta que los datos se envíen por completo.

Responder

Sin saber qué tablero virtual hace en un Arduino normal, haría lo siguiente:
Serial.flush () borra el búfer y esto necesita algo de tiempo, normalmente esperas un mínimo de alrededor de 100 ms para escribir / leer en ese búfer nuevamente.
Como su código se ejecuta en la configuración (por lo tanto, solo una vez), la serie no está disponible ya que todavía se está descargando y, por lo tanto, su resultado.
Como dice el nombre, la configuración solo debe usarse para configurar HW / SW pero no para ejecutar rutinas, ya que puede obtener todo tipo de resultados extraños.
Si usa «\ n» también conocidos como terminadores de nueva línea en su comunicación, puede utilizarlos y solo será necesario descargarlos si la conexión se interrumpe y tiene que reenviar datos.
EDIT

Waits for the transmission of outgoing serial data to complete. 

Si envía un carácter, se coloca en un búfer para su transmisión. Se necesita tiempo para que se envíe cada carácter porque el serial es lento. Una vez que esté en el búfer, se enviará automáticamente en segundo plano mientras el programa pasa inmediatamente a la siguiente instrucción. Esto se hace para que el programa no pierda tiempo esperando que se envíen los caracteres.

flush () es una forma de esperar a que se envíe, en lugar de pasar inmediatamente al usuario

Entonces, después de llamar a flush (), puede estar seguro de que se han enviado todos los datos y que el búfer está vacío. Por lo tanto, en su caso, donde lo colocó, no tiene sentido.

Comentarios

  • ¿Puede explicar con más detalle si Arduino usa el mismo búfer para entrada y salida o serial.flush () vaciar los búferes de entrada y salida?
  • Ver mi edición anterior. Marque como aceptado si está bien
  • Entonces, en su caso, donde lo colocó no tiene sentido, ¿por qué? Arduino no espera en la función de configuración y cuál es la solución para esto puede explicar por favor soy nuevo en esto.
  • Por favor lea en Arduino.cc el básico101 No voy a enseñar aquí, resolvemos un problema a la vez
  • de alguna manera esta respuesta no ' no diga nada para responder al problema

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *