Hola gente del foro... tengo una estacion meteorologica conectada y cada 5 minutos envia a una web los datos... el problema es que funciona bien un rato y luego me tira errores como por ejemplo 340km el viento o 200 grados de temperatura..... datos claramente erroneos.. subo el codigo arduino para saber si puede haber un error en el codigo.
se aceptan sugerencias que desde ya estan muy agradecidas
#include <SPI.h>
#include <Ethernet.h>
char databuffer[35];
double temp;
long intervalo =300000; // es el tiempo de nuestro delay 5 minutos 60000
long tiempo = 0;
long tiempoAnterior = 0;
boolean bandera=1;
// Mac unica de cada EthernetShield (deben cambiarla)
byte mac[] = { 0x90, 0xA2, 0xDA, 0x0D, 0x4E, 0xD7 };
// Descomentar esta linea si se desea un IP fijo
IPAddress ip(192,168,0,50);
// Descomentar esta linea para asignar un DNS fijo
IPAddress myDns(200,58,112,193);
// Inicializa la instancia client
EthernetClient client;
// Direccion del servidor
char server[] = "www.*****.com";
// Variable de tiempo de la ultima conexion en milisegundos
unsigned long ultimaConexion = 0;
// Estado de la ultima conexion
boolean ultimoEstado = false;
// Intervalo en milisegundos entre conexiones
const unsigned long intervaloConexion =1000; //300000;
// Datos del sensor
int Direccion;
float velocidad;
float velMax;
float temperatura;
float OneHour;
float OneDay;
float presion;
int humedad,i;
//String envioDatos = "GET /estacion/carga.php?";
String envioDatos = "GET /carga.php?";
String url = " ";
#define parametro1 "&WindDirection="
#define parametro2 "&WindSpeedAverage="
#define parametro7 "&WindSpeedMax="
#define parametro3 "&Temperature="
#define parametro4 "&RainfallOneHour="
#define parametro5 "&BarPressure="
#define parametro6 "&Humidity="
#define parametro8 "&RainfallOneDay="
void setup() {
// Inicializa puerto serial
Serial.begin(9600);
// Espera 1 segundo para que se inicie la tarjeta Ethernet
delay(1000);
// Si deseas usar un ip fijo y un DNS fijo descomentar esta linea y comentar la linea 39
Ethernet.begin(mac, ip, myDns);
// Inicializa la tarjeta ethernet mediante DHCP
Ethernet.begin(mac);
// Imprime la direccion IP de la tarjeta
Serial.print("Direccion IP: ");
Serial.println(Ethernet.localIP());
}
// Loop principal
void loop() {
tiempo = millis();
if(tiempo - tiempoAnterior > intervalo)
{
tiempoAnterior = tiempo;
getBuffer();
Serial.println("#### Prueba sensores ####");
Serial.print("Wind speed: ");
Serial.print(WindSpeedMax());
Serial.print("Wind Direction: ");
Serial.print(WindDirection());
Serial.println(" ");
Serial.print("Average Wind Speed (One Minute): ");
Serial.print(WindSpeedAverage());
Serial.println("m/s ");
Serial.print("Rain Fall (One Hour): ");
Serial.print(RainfallOneHour());
Serial.println("mm ");
Serial.print("Temperature: ");
Serial.print(Temperature());
Serial.println("C ");
Serial.print("Humidity: ");
Serial.print(Humidity());
Serial.println("% ");
Serial.print("Barometric Pressure: ");
Serial.print(BarPressure());
Serial.println("hPa");
Serial.println("");
Serial.println("");
Direccion = WindDirection();
velocidad=WindSpeedAverage();
temperatura=Temperature();
OneHour=RainfallOneHour();
presion=BarPressure();
humedad = Humidity();
velMax = WindSpeedMax();
OneDay =RainfallOneDay();
// Realiza la conexion http al servidor
if (client.available()) {
char c = client.read();
Serial.print(c);
}
// Se conecta al servidor en el puerto 80 (web)
if (client.connect(server, 80)) {
url = envioDatos + parametro1 + String(Direccion) + parametro2 + String(velocidad)+ parametro3 + String(temperatura) + parametro4 + String(OneHour) + parametro5 + String(presion) + parametro6 + String(humedad) + parametro7 + String(velMax)+ parametro8 + String(OneDay);
client.print(url);
// Envia el requerimiento al servidor via GET
Serial.print(presion);
Serial.print(temperatura);
Serial.println("Iniciando conexion...");
client.print("GET /carga2.php?");
client.println(" HTTP/1.1");
client.print("Host: ");
client.println(server);
client.println("User-Agent: Arduino-Ethernet");
Serial.println("Conectado");
client.println("Connection: close");
client.println();
// Actualiza el tiempo en milisegundos de la ultima conexion
ultimaConexion = millis();
}
else {
Serial.println("Fallo en la conexion");
}
if (!client.connected()) {
Serial.println("Disconnected!");
}
client.stop();
client.flush();
//delay(60000); // Espero un minuto antes de tomar otra muestra
}
}
// Fin del loop principal
void getBuffer() //Get weather status data
{
int index;
for (index = 0;index < 35;index ++)
{
if(Serial.available())
{
databuffer[index] = Serial.read();
if (databuffer[0] != 'c')
{
index = -1;
}
}
else
{
index --;
}
}
}
int transCharToInt(char *_buffer,int _start,int _stop) //char to int)
{
int _index;
int result = 0;
int num = _stop - _start + 1;
int _temp[num];
for (_index = _start;_index <= _stop;_index ++)
{
_temp[_index - _start] = _buffer[_index] - '0';
result = 10*result + _temp[_index - _start];
}
return result;
}
int WindDirection() //Wind Direction
{
return transCharToInt(databuffer,1,3);
}
float WindSpeedAverage() //air Speed (1 minute)
{
temp = 0.44704 * transCharToInt(databuffer,5,7);
return temp;
}
float WindSpeedMax() //Max air speed (5 minutes)
{
temp = 0.44704 * transCharToInt(databuffer,9,11);
return temp;
}
float Temperature() //Temperature ("C")
{
temp = (transCharToInt(databuffer,13,15) - 32.00) * 5.00 / 9.00;
return temp;
}
float RainfallOneHour() //Rainfall (1 hour)
{
temp = transCharToInt(databuffer,17,19) * 25.40 * 0.01;
return temp;
}
float RainfallOneDay() //Rainfall (24 hours)
{
temp = transCharToInt(databuffer,21,23) * 25.40 * 0.01;
return temp;
}
int Humidity() //Humidity
{
return transCharToInt(databuffer,25,26);
}
float BarPressure() //Barometric Pressure
{
temp = transCharToInt(databuffer,28,32);
return (temp / 10.00)*2;
}