Go Down

Topic: señales análogas con xbee (SOLUCIONADO) (Read 3394 times) previous topic - next topic

hugo0702

después de un buen tiempo pude seguir y dar con la solución para poder sacar el numero del dato enviado bueno a lo directo y aqui esta el codigo .. agradecer a Raulitus ya que me dio gran parte del trabajo echo.
 
Este seria del arduino receptor por si acaso.

Code: [Select]


char digitos[8];
int outpin=6;
int cont;
int lightLevel=0;
int high = 0, low = 1023;
void setup()
{
  Serial.begin(9600);
}

void loop()
{
 String valor;

 
    while(Serial.available()>0)
    {
          for(cont = 0; cont < 8; cont++)
          {
             digitos[cont] = Serial.read();       
          }
         
         
          if(digitos[0] == 'X')
          {
                 Serial.print("La temperatura medida es: ");
             
                 for(cont = 1; cont < 8; cont++)
                 {
                    if(digitos[cont] != 'Y')
                    {
                        Serial.print(digitos[cont]);
                        lightLevel = digitos[cont];
                       
                        valor += digitos[cont];
                    }
                    else
                      break;
                }
                int valor2 = atoi(valor.c_str());
                 Serial.print("\nEL VALOR " );
                  Serial.println(valor2);
                  valor2 = map(valor2, 0, 50, 0, 255);
                  valor2 = constrain(valor2, 0, 255);
                  analogWrite(outpin,valor2);
                 
             Serial.println(" oC");
           }
    }
       delay(500);
}
 

MrAyuso

Hola Hugo0702, Raulitius y demás miembros interesados en este TOPIC:

Me ha servido de gran ayuda vuestro ejemplo para leer los datos, en mi caso de varios sensores (3humedad + 1 temperatura), transmitirlos a través de Xbee Pro S1 (de Arduino UNO R3 a Arduino UNO R3) y sacarlos por pantalla bien presentados. Os dejo mi código por si le queréis echar un vistazo:
______________________________________________________________

Code: [Select]
char digitos[14];


int cont = 0;








void setup() {


 Serial.begin(9600);





}





void loop() {





 while (Serial.available() > 0)


 {


   for (cont = 0; cont < 14; cont++)


   {


     digitos[cont] = Serial.read();


   }


   if (digitos[0] == 'A')


   {


     Serial.print("SENSOR HUMEDAD 1: ");


     for (cont = 1; cont < 14; cont++)


     {


       if (digitos[cont] != 'B') {


         Serial.print(digitos[cont]);


       }


       else if (digitos[cont] == 'B')


       {


         Serial.print("SENSOR HUMEDAD 2: ");


         for(cont = cont + 1; cont<14; cont++)


         {


           if (digitos[cont] != 'C'){


             Serial.print(digitos[cont]);


           }


           else if (digitos[cont] == 'C')


           {


             Serial.print("SENSOR HUMEDAD 3: ");


             for(cont = cont + 1; cont<14; cont++)


             {


               if (digitos[cont] != 'D'){


                 Serial.print(digitos[cont]);


               }


               else if (digitos[cont] == 'D'){


                 Serial.print("TEMPERATURA: ");


                 for (cont = cont + 1; cont<14; cont++)


                 {


                   if (digitos[cont] != 'E'){


                     Serial.print(digitos[cont]);


                   }


                 


                   else{


                     break;}


                   }


                   Serial.println("");


                 }


               }


             }


           }


         }


     }


   }


 }


delay(3000);


}


_____________________________________________________

Me pongo en contacto con vosotros para ver si me podríais ayudar con mi siguiente paso:

Quiero enviar los datos que tengo bien presentados en Serial del receptor a un WebServer a través de una Ethernet shield unida a la misma placa que el Xbee Shield (receptor). Para ello he escrito un código que también facilito más abajo pero que no me está funcionando. No se me envía nada. El problema creo que está el la forma de trabajar con los datos y mezclar el código correspondiente a la lectura de datos en Serial con la transmisión a WebServer a través de Ethernet.

Para ello creo que la solución más sencilla y funcional seria escribir una función independiente (tipo void senddata()) sólo para enviar los datos a través del Ethernet pero para ello necesito crear un Array con los datos que voy leyendo en el bucle de lectura de datos. Aquí es donde está mi problema en crear ese array conforme va leyendo los valores en el programa diseñado por vosotros. No lo consigo...

¿Podríais darme alguna pista u orientación al respecto? Os estaría muy agradecido ya que estoy a muy pocos pasos de terminar mi proyecto.


El código con el que estoy intentando enviar los datos a WebServer es este:

______________________________________________________________________________

Code: [Select]
#include <Ethernet.h>


#include <SPI.h>





byte mac[] = {   0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };


IPAddress ip(192, 168, 1, 25); // Poned aqui vuestra IP <------- <------- <--------


EthernetServer server(80);  // Arrancamos el servidor en el puerto estandard 80





char digitos[14];


int cont = 0;








void setup() {


 Serial.begin(9600);





 Ethernet.begin(mac, ip);


 server.begin();          // Inicia el servidor web


 Serial.print("Servidor Web en la direccion: ");


 Serial.println(Ethernet.localIP());





}





void loop() {


 EthernetClient client = server.available();  // Buscamos entrada de clientes


 if (client)


 { Serial.println("new client");


   boolean currentLineIsBlank = true;  // Las peticiones HTTP finalizan con linea en blanco


   while (client.connected())


   { if (client.available())


     { char c = client.read();


       Serial.write(c);   // Esto no es necesario, pero copiamos todo a la consola


       // A partir de aquí mandamos nuestra respuesta


       if (c == '\n' && currentLineIsBlank)


       { // Enviar una respuesta tipica


         client.println("HTTP/1.1 200 OK");


         client.println("Content-Type: text/html");


         client.println("Connection: close");


         client.println("Refresh: 15");            // Actualizar cada 15 segs


         client.println();


         client.println("<!DOCTYPE HTML>");


         client.println("<html>");





         while (Serial.available() > 0)


         {


           for (cont = 0; cont < 14; cont++)


           {


             digitos[cont] = Serial.read();


           }


           if (digitos[0] == 'A')


           {


             Serial.print("SENSOR HUMEDAD 1: ");


             client.print("<head><title>Información Nodo Sensores 1</title></head>");


             client.print("<body><h1> Situacion Ambiente</h1><p>Humedad 1 m. - ");


             for (cont = 1; cont < 14; cont++)


             {


               if (digitos[cont] != 'B') {


                 Serial.print(digitos[cont]);


                 client.print(digitos[cont]);


               }


               else if (digitos[cont] == 'B')


               {


                 Serial.print("SENSOR HUMEDAD 2: ");


                 for (cont = cont + 1; cont < 14; cont++)


                 {


                   if (digitos[cont] != 'C') {


                     Serial.print(digitos[cont]);


                     client.print(digitos[cont]);


                   }


                   else if (digitos[cont] == 'C')


                   {


                     Serial.print("SENSOR HUMEDAD 3: ");


                     for (cont = cont + 1; cont < 14; cont++)


                     {


                       if (digitos[cont] != 'D') {


                         Serial.print(digitos[cont]);


                         client.print(digitos[cont]);


                       }


                       else if (digitos[cont] == 'D') {


                         Serial.print("TEMPERATURA: ");


                         for (cont = cont + 1; cont < 14; cont++)


                         {


                           if (digitos[cont] != 'E') {


                             Serial.print(digitos[cont]);


                             client.print(digitos[cont]);


                           }





                           else {


                             break;


                           }


                         }


                         Serial.println("");


                       }


                     }


                   }


                 }


               }


             }


           }


         }


         delay(10);         // Para asegurarnos de que los datos se envia


         client.stop();     // Cerramos la conexion


         Serial.println("client disonnected");


       }


     }


   }


 }



 delay(3000);
}
_________________________________________________________________________

Un saludo!

recalde93

Deberían todos los valores de los sensores desde el emisor mandar en una sola cadena usando string,y después con pulsadores en el receptor separar las posiciones y así evitar que se imprima todos los valores de los sensores. Pudiendo elegir cual quieres que se te aparezca, yo lo hice con un lcd 16x2 con i2c y me facilito menorar en tanto a programación se refiere a del receptor. Hasta el momento tengo 3 sensores uno de temperatura y humedad uno de temperatura del agua, sensor de nivel y me falta poner un sensor de viento y un estado de motor paso a paso. y su post me ayudo a entender la comunicación serial, pero es mejor mandar cadenas ténganlo en mente

Go Up