Pages: [1]   Go Down
Author Topic: [Problema] comunicaciones XBEE  (Read 727 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 41
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola.

Necesito saber en mi código ¿por qué cuándo envío datos analógicos entre dos arduinos no responde como se esperaría?
Probado con dos arduinos uno conectados por TX RX y también, con dos uno arduinos UNO con sus correspondientes XBEE.
El emisor tiene dos pulsadores digitales y un potenciómetro analógico (pin 2 y pin 3 digital pulsador – pin A0 analógico potenciómetro).
El receptor tiene dos leds para comprobar que responden a los pulsadores del emisor (pin 7 digital led // pin 12 digital led).

Si solo actuamos sobre los pulsadores, los leds responden correctamente.
Pero al actuar sobre el potenciómetro, no se que ocurre pero no responde al código programado al 100% como inicialmente empezamos, ya que después de actuar sobre el potenciómetro los leds no se encienden cuando activamos los pulsadores del emisor. También ocurre que al actuar sobre el potenciómetro los leds parpadean secuencialmente.
Y curiosamente en el monitor del receptor todo se visualiza correctamente.

##################################################################################################

CÓDIGO del emisor

int valorAnalogicoA0 = 0;
int valorAnalogicoA1 = 0;

void setup()
  {
    Serial.begin(19200);  // declaramos la velocidad del puerto

    pinMode(2, INPUT);
    pinMode(3, INPUT);
    
  }
  
void loop()               // entramos en el bucle
  {
        valorAnalogicoA0 = analogRead(0);
        valorAnalogicoA1 = analogRead(1);
        analogWrite(6, valorAnalogicoA0/4);
        Serial.print(digitalRead(2));     // primer dato enviado (leemos el valor de la entrada 2)
        Serial.print(',');                // separamos por una coma
        Serial.print(digitalRead(3));   // tercer dato enviado (leemos el valor de la entrada 3)
        Serial.print(',');                // separamos por una coma
        Serial.println(valorAnalogicoA0/4);
      delay(100);     // retardo de 10 msegundos
  }

########################################################################

CÓDIGO del receptor

#include <Servo.h>

int count = 0;
int a = 0, b = 0, c = 0, d = 0, e1 = 0, e2 = 0, e3 = 0, e4 = 0;
int LEDpin7 = 7;
int LEDpin12 = 12;
int valorservo = 0;
Servo myservo; // crea un objeto tipo servo para controlar el servo


void setup()
  {
    Serial.begin(19200);  // declaramos la velocidad del puerto
    pinMode(LEDpin7, OUTPUT);
    pinMode(LEDpin12, OUTPUT);
    myservo.attach(smiley-cool;    // En EduBasica el servo se conecta al pin 8

  }
  
void loop()               // entramos en el bucle
  {
     if (Serial.available() > 0)
   {                
                if (count < 7)      // si el dato leido es menor que 7, saca por pantalla e incrementa
                  {

                    count++;            // incrementa el contador
                    //Serial.print(count);
                    
                    switch (count)      // analiza cada valor enviado por el puerto serie
                      {
                        case 1:                // contador a 1 sera el primer dato
                          a = Serial.read();   // lee ese dato y lo asigna a a                          
                          break;
                        
                        case 2:                 // contador a 2 sera el segundo dato
                          b = Serial.read();    // lee ese dato y lo asigna a b (es una ',')                        
                          break;
                        
                        case 3:                 // contador a 3 sera el tercer dato
                          c = Serial.read();    // lee ese dato y lo asigna a c                          
                          break;
                          
                        case 4:                 // contador a 2 sera el segundo dato
                          d = Serial.read();    // lee ese dato y lo asigna a d (es una ',')                        
                          break;
                        
                        case 5:                 // contador a 2 sera el segundo dato
                          e1 = Serial.read();    // lee ese dato y lo asigna a e1 (bit analogico 2)                        
                          break;
                        
                        case 6:                 // contador a 2 sera el segundo dato
                          e2 = Serial.read();    // lee ese dato y lo asigna a e2 (bit analogico 1)                        
                          break;
                          
                        case 7:                 // contador a 2 sera el segundo dato
                          e3 = Serial.read();    // lee ese dato y lo asigna a e3 (bit analogico 0)        
                          break;                        
                      }
                      
                      if (a == '1')        // analiza si a es 1
                            {
                              digitalWrite(LEDpin7, HIGH);  // activa el led salida 7
                            }
                      else digitalWrite(LEDpin7, LOW);  // en caso contrario lo desactiva                          
                      Serial.print (char(a));     // saca por pantalla el valor de a en ASCII
                      
                      Serial.print (char(b));   // saca por pantalla ","
                      
                      if (c == '1')         // analiza si c es 1
                            {
                              digitalWrite(LEDpin12, HIGH);  // activa el led salida 12
                            }
                      else digitalWrite(LEDpin12, LOW);  // en caso contrario lo desactiva
                      Serial.print (char(c));     // saca por pantalla el valor de c en ASCII
                      
                      Serial.print (char(d));   // saca por pantalla ","
                      
                      Serial.print (char(e1));   // saca por pantalla bit 2 analogico
                      
                      Serial.print (char(e2));   // saca por pantalla bit 1 analogico
                      
                      Serial.print (char(e3));   // saca por pantalla bit 0 analogico
                      
                      valorservo = char(e1)+char(e2)+char(e3);
                      myservo.write(valorservo);
                      
                  }
                else         // en caso contrario salto de linea y comienza la cuenta
                  {
                    Serial.println("");  // salta a la siguiente linea en pantalla
                    count = 0;           // pone el contador a 0
                  }
                  
   }
  }

#############################################################################################

« Last Edit: March 31, 2013, 03:14:11 pm by Arduteka » Logged

Offline Offline
Newbie
*
Karma: 1
Posts: 47
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Donde pones
if (a == '1')
creo que deberías poner
if (a == 1)
no estás leyendo datos de tipo char del puerto serie, sino bits y bytes.........ya que estás enviando las lecturas digitales y anañlógicas.
Salu2.
Logged

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

Gracias por tu respuesta pero eso ya lo he probado y hace lo mismo.
Logged

Offline Offline
Newbie
*
Karma: 1
Posts: 47
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Viendo un poco más a fondo el código del receptor veo que usas el mismo puerto serie para el XBee y para el monitor serial..........es conveniente que no uses el mismo puerto para las dos cosas, puedes crear un puerto en cualquier otra pareja de pines con la librería software serial y usar ese puerto hecho por software para el XBee ya que la conexión al pc de la placa de aruduino no la puedes cambiar y a la fuerza será la de los pines 0 y 1.
Salu2.
Logged

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

Perdona por tardar en responder, tenías toda la razón, así si funciona.

Mil gracias y saludos.
Logged

Pages: [1]   Go Up
Jump to: