Pages: [1]   Go Down
Author Topic: Por fin correcta lectura en fortma de array por puerto serie con XBee  (Read 1323 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 42
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola compañeros.

Después de mil vueltas que le he dado a mi código de lectura por puerto serie a través de los fabulosos modulos Xbees, ahora tengo una duda, cuando abro mi monitor del puerto serie en el shelch de receptor para visualizar lo que he enviado desde mi emisor, YEAh!!! ahí están mis datos ordenaditos, fabuloso NO?

Pues bien, me aparece una linea algo así   $0, 0, 0 , 0  los dos primeros ceros son datos analógicos los dos segundos son digitales, evidentemente no estoy actuando sobre ningún potenciometro o pulsador del emisor.

Osea que si actúo sobre mis potenciometros y pulsadores en mi emisor me apareceria algo así;

$255, 184, 1, 1

Es decir en el primer valor (255) estoy actuando hasta fondo sobre el potenciometro que tengo en el arduino emisor.

En el segundo valor (184) estoy actuando no tan hasta el fondo.

En el tercer valor (1) simplemente estoy actuando sobre el pulsador correspondiente al igual que en el cuarto valor.

La velocidad de refresco a tiempo casi real y digo casi por que siempre viene con un poco retardo pero inapreciable para nuestras neuronas.

AHORA es cuando pido ayuda:

¿COMO PUEDO LEER LOS DOS PRIMEROS VALORES PARA QUE ACTUEN SOBRE DOS SERVOS Y LOS SEGUNDOS VALORES PARA QUE ACTUEN ON/OFF EN LEDS???????

Ya se que puede parecer lo mas fácil pero me estoy volviendo loco al tratarse de un array no se extraer esos valores.

Saludos y Gracias.

Aqui os dejo mi codigo.-

#include <Servo.h>

Servo servo1;
Servo servo2;
int pin_motor = 13;
int pin_rec = 2;
char array1[4] = { '0', '0', '0', '0'};

void setup()
{
  Serial.begin(19200);

 pinMode(pin_motor, OUTPUT);
 pinMode(pin_rec, OUTPUT);
 servo1.attach(9);
 servo2.attach(10);

}
void loop() {
   if (Serial.available() >= 4){
        for ( int i = 0; i < 4; i++)
   array1 = Serial.read();
 
   }
  {
    Serial.print(array1[0]);
    Serial.print(array1[1]);
    Serial.print(array1[2]);
    Serial.print(array1[3]);
   
   
  Serial.flush();
 
delay (40);

}
}


Logged

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


Por que a pesar de recibir un 1 en mi monitor serie no se me enciende el pin_rec = 12, en el cual he colocado un led con la funcion:


 if(array1[3] == 1){
    digitalWrite(pin_rec, HIGH);
  }else{
    digitalWrite(pin_rec, LOW);
  }

Alguna idea ??????????????


#include <Servo.h>

Servo servo1;
Servo servo2;
int pin_motor = 11;
int pin_rec = 12;
char array1[4] = { '0', '0', '0', '0'};
int i;
void setup()
{
 
  Serial.begin(19200);
Serial.flush();


 pinMode(pin_motor, OUTPUT);
 pinMode(pin_rec, OUTPUT);
 servo1.attach(9);
 servo2.attach(10);

}
void loop() {
   if (Serial.available() >= 4){
        for ( int i = 0; i < 4; i++)
   array1 = Serial.read();

   }
  {
   
    Serial.print(array1[0]);
    Serial.print(array1[1]);
    Serial.print(array1[2]);
    Serial.print(array1[3]);
   
     if(array1[3] == 1){
    digitalWrite(pin_rec, HIGH);
  }else{
    digitalWrite(pin_rec, LOW);
  }
   
   Serial.flush();
 
delay (40);

}
}
Logged

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

Buenas, ten en cuenta que lo que recibes por el puerto serie es un char y se almacena en un array de chars. Cuando haces la comparacion con if para el valor de la posicion 3 del array lo comparas con un integer. No es lo mismo. Prueba a poner '1' en lugar de 1.
Saludos.
Logged

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

Por cierto, seria buena idea que añadieras un delay de 5 despues de la sentencia    
array1 = Serial.read(); en tu programa receptor. De otra manera te arriesgas a perder paquetes.
Logged

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

Gracias MBrodi,  lo pruebo y te digo como me ha ido.
Saludos
Logged

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

Ahora lo que me pasa es que al recibir un 1 en cualquiera de las posiciones del array1 se me enciende el led.

Alguna idea mas???
 
Saludos.
Logged

Pages: [1]   Go Up
Jump to: