Go Down

Topic: CONSULTA PUERTO SERIAL, VOIDS, TIMMERS ETC (Read 84 times) previous topic - next topic

charpentier1993

Nov 22, 2017, 07:11 pm Last Edit: Nov 22, 2017, 07:59 pm by charpentier1993 Reason: Falta de etiquetas de codigo
Muy buenas a todos, tenia una consulta con respecto al puerto serial, void, delay, millis etc.

Resulta que estoy realizando una programación donde necesito tener comunicación serial y cuando reciba un mensaje encender algunos leds, pero con cierta secuencia.

la programación que voy a utilizar para recibir el mensaje via serial es la siguiente:

Code: [Select]

   while (Serial.available()){        // cuando canal de entrada lee datos
   delay(5);                                // me espero 5ms
   char c = Serial.read();             // guardo en variable c lo ultimo leido
   Mensaje += c;                        // guardo y adiciono en variable c lo interpretado
   }


Ahora bien, que sucede hago esto?
Code: [Select]

   int n = 1;

   void loop(){

   unsigned long MILISEGUNDOS_ACTUALES = millis();

   while (Serial.available()){        // cuando canal de entrada lee datos
   delay(5);                                // me espero 5ms
   char c = Serial.read();             // guardo en variable c lo ultimo leido
   Mensaje += c;                        // guardo y adiciono en variable c lo interpretado
   }


  if(Mensaje == HOLA){             //Si leo un mensaje hola
  SECUENCIA();                        //ejecuto la funcion secuencia
  }



  void SECUENCIA(){

  if( MILISEGUNDOS_ACTUALES -  MILISEGUNDOS_ANTERIORES >= 4000){  si cuento 4s


  n=1-n;                          // creo intermitencia de 0 a 1
  digitalWrite(13,n)           //utilizo n para cambiar cada 4s el estado del pin 13

  }

  }


ESTO POR DARLES MASO MENOS UN EJEMPLO.

Ahora bien según lo escrito anteriormente mi pregunta es
puedo llegar a tener algún problema como por ejemplo que mientras se este ejecutando la función "secuencia" entre un mensaje por el serial y no lo pueda leer o algun imperfecto de ese tipo?

y mi segunda pregunta si usara delays tendria el problema escrito en la primera pregunta?


ignoren la falta del void setup y otras variables declaradas, lo importante es el concepto y si tienen alguna sugerencia para robustecer el codigo es bienvenida, de antemano muchas gracias

   

surbyte

Te envié privado para que pongas el código (los códigos) con etiquetas.

Esto   
Code: [Select]
if(Mensaje == HOLA){ no funciona como esperas porque primero tiene errores.

debería ser
Code: [Select]
if(Mensaje.equals("HOLA")) como mínimo
Pero ademas cuando lees el puerto serie te olvidas que al presionar enter vienen dos codigos que uno no VE pero si estan presentes, uno es LIFE FEED 0x0d y otro es CARRIEAGE RETURN 0x0F o traducido '\r' y '\n'
si no consultas por ellos al momento de armar tu String Mensaje, los contendran y luego tu comparación es inválida.


charpentier1993

Gracias por la corrección de las etiquetas y del codigo

la verdad no entendi muy bien lo que dijiste de:

"Pero ademas cuando lees el puerto serie te olvidas que al presionar enter vienen dos codigos que uno no VE pero si estan presentes, uno es LIFE FEED 0x0d y otro es CARRIEAGE RETURN 0x0F o traducido '\r' y '\n'
si no consultas por ellos al momento de armar tu String Mensaje, los contendran y luego tu comparación es inválida."

si pudieses decirme que temas puedo buscar para informarme o si me pudieses facilitar un link para buscar sobre lo que comentaste te lo agradeceria y una cosa mas
 si utilizara el código:

Code: [Select]

if(Mensaje.equals("HOLA"))


me funcionaria sin ninguna interrupción en la lectura del serial de algún tipo?

surbyte

que cuando escribes HOLA como lo terminas? dandole ENTER y ese enter inserta dos cosas un 0xd y un 0xF o dicho de otro modo '\r' y '\n'

As ique tu no tienes "HOLA" sino como mínimo "HOLA\n" o "HOLA\r\n"

charpentier1993

ahhh ok ya te entiendo, pero no, lo que sucede es que tengo la comunicación serial con otro microprocesador mediante un transceptor TTL RS232, el mensaje de "hola" es de ejemplo, pueden ser numeros o binarios. lo que queria saber era si el concepto de programacion estaba correcto. Muchas gracias creo que ya me sacaste de la duda

surbyte

Igualmente cuando plantees algo intenta poner un código real, porque ese código no define la variable Mensaje.
Yo no veo un
Code: [Select]
String Mensaje = "";
Asi que, como no está, eso no funciona o ya te da error de complicación.

Ve a Documentación y mira el Indice de tutoriales y tendras todos los ejemplos sobre puerto serie que necesitas.

Go Up