Go Down

Topic: Esperar input serial (Read 313 times) previous topic - next topic

OldTatita

Estimados, hay alguna manera de esperar a que ingresen valor en el puerto serial.

Resulta que tengo esto

Code: [Select]
while(Serial.available() == 0){
char ch = Serial.read();
}


Y funciona, pero al siguiente loop ya no, hay alguna solución?

Saludos

Lucario448

Y funciona, pero al siguiente loop ya no, hay alguna solución?
Envías más de un caracter/byte a la vez. Puede que necesites vaciar el buffer antes de reiniciar el loop:


Code: [Select]
while (Serial.available()) Serial.read();

Kike_GL

No te funciona porque esta al revés.

Con Serial.available() == 0 estas preguntando si el buffer esta vacio.

Code: [Select]

void loop(){
   if (Serial.available()){
      char ch = Serial.read();
   }
}
Saludos, Kike_GL

Lucario448

Estás equivocado. En los lenguajes C, insertar un valor numérico en un contexto booleano implícitamente equivale a la condición de que si es diferente de cero. Por lo tanto:
Code: [Select]
if (Serial.available())

Es lo mismo que:
Code: [Select]
if (Serial.available() != 0)

Observa que eso significa que incluso un valor negativo equivale a true.

laremi

Igual ya lo tienes hecho, pero ahí va una idea. ¿Por que no usas la interrupción SerialEvent? No es buena idea poner a esperar al arduino a que entren caracteres por el serie.

Code: [Select]

//------------------------------------------------------------------------
// Este evento ocurre cuando entran nuevos datos al serie.
// Esta funcion corre entre cada vez que el loop se ejecuta, asi que mucho
// ojo con meter delays aqui por que ralentizara todo el proceso
// Esta funcion es como el loop propiedad del arduino no hay que ponerle otro nombre
//------------------------------------------------------------------------
void serialEvent()
{

while(Serial.available())
     {
     char in_car = (char)Serial.read();
     
     //Serial.print(in_car);
     } //while

} //end serialEvent


Go Up