Autor Tema: Como recibir 2 bytes puerto serie?  (Leído 5339 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado rolansel

  • PIC10
  • *
  • Mensajes: 25
Como recibir 2 bytes puerto serie?
« en: 29 de Diciembre de 2011, 17:20:12 »
hola necesito recibir 2 bytes por el puerto serie,  solo he conseguido recibir uno solo, la verdad no me queda muy claro como asignarlos a mi array ya que manda error el codigo es el siguiente:

void setup() {
  // initialize both serial ports:
  Serial.begin(300);
  
  for (int thisPin = 2; thisPin < 7; thisPin++) {
        pinMode(thisPin, OUTPUT);
                                                  }
              }

void loop() {
  // read the sensor:
  if (Serial.available() > 0)
                  {
                   int inByte[2];
     inByte[0] = Serial.read();  //<----aqui es donde me da el error voy a recibir 2 bytes pero la instruccion al parecer                 //solo  recibe 1
     inByte[1] =Serial.read();                                           // aqui la modificacion que propuesta
  
                                if (inByte[0]<51)
                                {
                                digitalWrite(2, HIGH);
                                //break;
                                }
    
    
                                if (inByte[0]>50){
                                //for (int thisPin = 2; thisPin < 7; thisPin++) {
                              digitalWrite(2, LOW);
                                    }
                                    
                                 if (inByte[1]>51){digitalWrite(3,HIGH);}
                                
                                 if (inByte[1]<52){digitalWrite(3,LOW);}
                                                    //}
                  }
 
          }

de momento solo prende y apaga leds, pero pienso controlar unos servos mas adelante
« Última modificación: 29 de Diciembre de 2011, 19:32:20 por rolansel »

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Como recibir 2 bytes puerto serie?
« Respuesta #1 en: 29 de Diciembre de 2011, 17:23:23 »
inByte[0]= Serial.read();
inByte[1]= Serial.read();

Desconectado rolansel

  • PIC10
  • *
  • Mensajes: 25
Re: Como recibir 2 bytes puerto serie?
« Respuesta #2 en: 29 de Diciembre de 2011, 19:26:23 »
no funciona, parece que de los 2 bytes me asigna el primeroa inByte[0] en la primer vuelta del loop y luego me asiga el segundo a inByte[0] pero no puedo afetar a inByte[1]
« Última modificación: 29 de Diciembre de 2011, 19:33:53 por rolansel »

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Como recibir 2 bytes puerto serie?
« Respuesta #3 en: 30 de Diciembre de 2011, 23:23:35 »
exactamente no se como es la funcion del arduino, pero quizas sea no bloqueante y vea que no hay datos entonces retorna 0, prueba a poner un delay o algo asi, o mirate si hay alguna funcion para detectar si hay datos en el puerto serie.

Desconectado ASTROCAR

  • PIC24F
  • *****
  • Mensajes: 666
Re: Como recibir 2 bytes puerto serie?
« Respuesta #4 en: 31 de Diciembre de 2011, 07:37:46 »
Hola buen dia, viendo tu codigo creo que tu error lo tienes en no saber el control de la llegada de cada byte por puerto serial ademas la sentencia:
if (Serial.available() > 0)
 permite saber si por puerto serial llego un byte y en este momento es que puedes leerlo y usted quiere es leer los dos bayte en ese momento cosa que no deberia hacer por eso le comento de tener un control de los byte que esten entrando, un ejemplo rapido para ver si me explico es el siguiente:
void loop(){
if (Serial.available() > 0) {
aca leer el primer byte
}
if (Serial.available() > 0) {
aca leer el 2do byte
}
}
 notgo ojo pero de esa manera seria de forma de ejemplo porque de igual forma no se el tiempo en que netra cada byte lo mas sano seria tener un loop o ciclo preguntando y hacer un control con un contador para saber la que byte llego.

Saludos.
EL APRENDER ES NADA; MEJOR ES COMPARTIR EL APRENDIZAJE

Desconectado rolansel

  • PIC10
  • *
  • Mensajes: 25
Re: Como recibir 2 bytes puerto serie?(solucionado)
« Respuesta #5 en: 10 de Enero de 2012, 21:06:28 »
Gracias ASTROCAR, la sugerencia del delay me puso en el camino, gracias tambien MerLiNz, resulto que al poner el famoso delay, pude recibir adecuadamente mis 2 bytes, probando delays me di cuenta que tenia que ver con la velocidad de transmision de 300 bauds que estaba usando entonces el programa terminaba antes que  pudiera tener los 2 bytes accesibles, le aumente  la velocidad al normal de 9600 y le meti un delay de 3 ms y funciono de maravilla! :-/