Pages: [1]   Go Down
Author Topic: Porque no funciona este codigo??  (Read 1303 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Offline Offline
God Member
*****
Karma: 7
Posts: 635
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

¿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:
/*
 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]);
}
Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 38
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

¿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.
Logged

Albacete
Offline Offline
Full Member
***
Karma: 0
Posts: 140
Arduino mola que te pasas
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Offline Offline
Edison Member
*
Karma: 23
Posts: 1375
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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...
Logged

Mercadillo electrónico. Kit iniciación a Arduino, shield LCD a color y más cosas!

Spain
Offline Offline
Newbie
*
Karma: 0
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Pages: [1]   Go Up
Jump to: