Go Down

Topic: Porque no funciona este codigo?? (Read 1 time) previous topic - next topic

hawai50

A continuacion os pego un codigo que lo que pretende es leer una cadena del tipo !10:55# como veis el codigo, para empezar, es sencillo pero en el monitor serie solo salen ceros del tipo 00:00....La idea es almacenar la cadena por medio del bucle while y a continuacion leer las partes del aaray que me interesen. Gracias.

/*
Cadena ejemplo +10:33+
*/

int contador = 0;
byte tramaLeida[7] ;

void setup() {
  // initialize serial:
  Serial.begin(9600);
  Serial.println("Start");

}

void loop() {

  while(Serial.available()>0) {

   tramaLeida[contador] = Serial.read();
   contador++;
  }
   
      Serial.print(tramaLeida[1]);
      Serial.print(tramaLeida[2]);
       Serial.print(":");
       Serial.print(tramaLeida[4]);
        Serial.print(tramaLeida[5]);
    }

Cheyenne

¿Estás seguro de que te salen sólo ceros? Inicialmente por supuesto ya que el array estará a cero pero cuando introduces datos en la consola te aparecerán. Eso sí, como el array lo has hecho tipo byte te aparecerán los códigos en decimal de los byte introducidos. Para que veas los caracteres tienes que crear el array tipo char. Y por último si quieres introducir más de una trama y que la imprima tendrás que resetear a cero el contador. El código quedará así:

Code: [Select]
/*
Cadena ejemplo +10:33+
*/

int contador = 0;
char tramaLeida[7] ;

void setup() {
  // initialize serial:
  Serial.begin(9600);
  Serial.println("Start");

}

void loop() {

  while(Serial.available()>0) {

   tramaLeida[contador] = Serial.read();
   contador++;
   if (contador == 7) contador = 0;
  }
   
      Serial.print(tramaLeida[1]);
      Serial.print(tramaLeida[2]);
       Serial.print(":");
       Serial.print(tramaLeida[4]);
        Serial.println(tramaLeida[5]);
}
http://cuadricopterodiyarduino.blogspot.com/

ozcy

¿Por que pones tramaleida como un byte?  debería ser un char tramaleida[n] para que puedas escribir la cadena de caracteres.

un byte solo son 8 bits un conjunto de ceros y unos con este formato B00000000 o B11111111 y sus combinanciones

Un saludo.

Pofenas

... es decir, exactamente lo mismo que un char: un valor ascii entre 0 y255.

chiva

Mas precisamente, igual que un unsigned char
El problema es que puede que Serial.print esté sobrecargado con funciones distintas según se le pase un char o byte, tampoco he mirado el fuente, pero no tengo mucho tiempo...
Mercadillo electrónico. Kit iniciación a Arduino, shield LCD a color y más cosas!

nkl_ale

Hola hawai50

a lo mejor es que el código no hace las cosas como piensas que debe hacerlo

Para empezar, si no hay ningún dato en el puerto serie, no entra en el while, y va a escribir directamente lo que hay en tramaleida.
cuando introduzcas 2 caracteres verás el segundo como el primero de la linea.
si envías al puerto serie 1234567, deberías ver
00:00 (o lo que coincida que haya en ese array en ese momento, nunca se sabe)
00:00
.... (hasta que envías 2)
20:00
20:00
.... (hasta que envías 3)
23:00
...
23:50
....
23:56
y cuando llegues a 7, vuelta a empezar (pero ahora si sabes lo que hay en el array)


prueba a hacer algo como :

define una variable que sirva para marcar que hay datos válidos para enviar, inicializada a algo que sea no
cuando llegues a 7 datos recibidos, pon esa variable a si (dentro del while)
cuando hay datos para enviar, escribe la salida, y pones otra vez la variable a no para que arduino sepa que no hay que enviar nada mas hasta llenar el array tramaleida otra vez

recuerda que loop() empieza otra vez casi inmediatamente después de haber terminado

Go Up