I made that, I am trying to use recursiveness, when the reading is not property done then I try to read once again.
I changed the code now I am not using DHCP to get the ip adress, the code is smaller now but I am having a problem as the funtion Logger seems to "stop" the process is I coment the line it works perfectly but whe I want to try adding the Logger it does nothing.
(Code tags added by moderator)
// 19-02-13
// "logger+cliente" para estación meteorológica Davis para Arduino
// con microcontrolador Atmel ATmega328
// Se usa un ethernet shield con tarjeta SD 4GB
// La estación meteorológica se conecta a los pines 3 y 5
// leds indicadores en los pines 18 y 19
// Puerto serial para revisar estado (debug)
//incluir librerías
#include <SdFat.h>
#include <SdFatUtil.h>
#include <Ethernet.h>
#include <SPI.h>
#include <SoftwareSerial.h>
// Tarjeta SD
Sd2Card card;
SdVolume volume;
SdFile root;
SdFile myFile;
SdFat sd;
#define error(s) error_P(PSTR(s))
SoftwareSerial Davis(3, 5); // RX, TX
int Min=-10;
int Hr=99;
int t[50]={-1};
int d[100];
int i=1;
char c[33];
char FileName[13];
float temp;
float hum;
float vel_v;
float dir_v;
float bar;
float lluv;
float lluv_ac;
float rad;
byte mac[] = { 0x90, 0xA2, 0xDA, 0x0D, 0x41, 0xF9 };
byte ip[] = { 192,168,8,162};
byte server[] = {190,147,203,25}; // Direccion ip del servidor
EthernetClient client;
void setup()
{pinMode(10, OUTPUT);
pinMode(18, OUTPUT);
pinMode(19, OUTPUT);
Davis.begin(19200);
Ethernet.begin(mac, ip);
Serial.begin(9600);
if (!sd.begin(4, SPI_FULL_SPEED)) sd.initErrorHalt();
//Serial.println(" start ");
delay(1000);
}
//////////////////////////////////////////////////////////////////////
void LeerSe()
{ digitalWrite(19, HIGH);
Davis.println("LOOP 1");
delay(10);
for (i=1;i<=50;i++)//Davis.available())
{ d[i]=Davis.read();
delay(10);
}
Davis.flush();
i=1;
temp=0.1*(d[12+3]*256+d[11+3]);
temp=5*(temp-32)/9;
hum=(d[13]);
vel_v=0.44704*d[16];
dir_v=d[18];
bar=0.001*(d[10]*256+d[9]);
lluv=0.001*(d[49]*256+d[46]);
lluv_ac=0.001*(d[49]*256+d[46]);
rad=0.1*(d[47]*256+d[46]);
//if(bar<0||temp<0||rad>1000){
// delay(20);
//LeerSe();
// }
// else{
Serial.println(" DATOS LEIDOS ");
//Serial.print("temp=");
//Serial.println(temp,DEC);
//Serial.print("hum=");
//Serial.println(hum,DEC);
//Serial.print("vel_v=");
//Serial.println(vel_v,DEC);
//Serial.print("ve_v=");
//Serial.println(dir_v,DEC);
//Serial.print("bar=");
//Serial.println(bar,DEC);
//Serial.print("lluv=");
//Serial.println(lluv,DEC);
//Serial.print("lluv_ac=");
//Serial.println(lluv_ac,DEC);
//Serial.print("dir_v=");
//Serial.println(dir_v,DEC);
//Serial.print("rad=");
//Serial.println(rad,DEC);
delay(50);
//}
digitalWrite(19, LOW);
}
//////////////////////////////////////////////////////////////////////
void LeerFH()
{digitalWrite(18, HIGH);
Davis.println("GETTIME");
delay(5);
t[3]=0;
for(i=1;i<=8;i++) // (Davis.available())
{
t[i]=Davis.read();
delay(10);
}
Davis.flush();
i=1; // reiniciar el contador
t[7]=t[7]-100; //ajuste al año
if(t[3]<0||t[3]>59||t[4]<0||t[4]>23||t[5]<1||t[5]>31||t[6]<1||t[6]>12||t[7]<0||t[7]>100)
{delay(10);
LeerFH();
}
else{
Serial.print("Fecha y hora=");
Serial.print(t[7]+2000);
Serial.print("-");
Serial.print(t[6]);
Serial.print("-");
Serial.print(t[5]);
Serial.print(" ");
Serial.print(t[4]);
Serial.print(":");
Serial.print(t[3]);
Serial.print(":");
Serial.println(t[2]);
delay(10);
digitalWrite(18, LOW);
}
}
//////////////////////////////////////////////////////////////////////
//Función de Guardar datos leídos
void Logger()
{sprintf(FileName, "MT%.2d%.2d%.2d.csv", t[7], t[6], t[5]); //ddmmaa
delay(5);
if (!myFile.open(FileName, O_RDWR | O_CREAT | O_AT_END)) {
sd.errorHalt("ERROR SD");
return;
}
digitalWrite(18, HIGH);
myFile.print(t[4]);
myFile.print(",");
// TEMP (°F)
myFile.print(temp);
myFile.print(",");
// HUM (%)
myFile.print(hum);
myFile.print(",");
// VELV (mph)
myFile.print(vel_v);
myFile.print(",");
// DIRV (°;N=0)
myFile.print(dir_v);
myFile.print(",");
// BAR (in)
myFile.print(bar);
myFile.print(",");
// LLUVIA
myFile.print(lluv_ac);
myFile.print(",");
// RAD (W/m^2)
myFile.println(rad);
//
myFile.close();
delay(5);
Serial.print("almacenados en ");
Serial.println(FileName);
digitalWrite(18, LOW);
}
//////////////////////////////////////////////////////////////////////
void Enviar()
{
///////
digitalWrite(18, HIGH);
Ethernet.begin(mac, ip);
Serial.println("Conectando...");
delay(100);
if (client.connect(server, 1830)) {
Serial.println("Conectado");
delay(1000);
client.print("GET /logger/prueba_arduino.php?id_arduino=");
client.print(1);
client.print("&temp=");
client.print(temp,DEC);
client.print("&hum=");
client.print(hum,DEC);
client.print("&vel_v=");
client.print(vel_v,DEC);
client.print("&dir_v=");
client.print(dir_v,DEC);
client.print("&bar=");
client.print(bar,DEC);
client.print("&rad=");
client.print(rad,DEC);
client.print("&lluv=");
client.print(lluv,DEC);
client.print("&lluv_ac=");
client.println(lluv_ac,DEC);
//client.println(" HTTP/1.0");
//client.println("User-Agent: Arduino 1.0");
client.println();
delay(10);
client.flush();
}
////////
// i=1;
// while (client.available()) {
// c[i] = client.read();
// Serial.print(c[i]);
// i++;
// }
if (!client.connected()) {
Serial.println("Datos no enviados.");
delay(2000);
client.stop();
Enviar();
delay(10);
}
client.stop();
digitalWrite(18, LOW);
}
//////////////////////////////////////////////////////////////////////
void loop(){
LeerFH();
if(Min!=t[3]){
Serial.println(" ! ");
LeerSe();
//Logger();
Enviar();
Min=t[3];
t[3]=-1;
}
delay(5000);
}