Show Posts
Pages: [1] 2
1  Topics / Device Hacking / Re: server sd files logger on: July 09, 2013, 06:56:34 pm
I think the problem is in the servidor() function

2  Topics / Device Hacking / Re: server sd files logger on: July 09, 2013, 06:54:07 pm
//////////////////////////////////////////////////////////////////////

void LeerSe()
{ digitalWrite(19, LOW);
  Davis.println("LOOP 1");
  delay(4);
   for (i=1;i<=60;i++)//Davis.available())
   {   d=Davis.read();
       delay(4);
   }
    Davis.flush();
    i=1;
    temp=0.5*((d[15]*256+d[14])-320)/9; // ºC
    hum=(d[35]);                        // %  
    vel_v=0.44704*d[16];                // m/s
    dir_v=d[18];                        // º
    bar=0.0254*(d[10]*256+d[9]);        // mmHg
    lluv=(d[44]*256+d[43])*0.2;         // mm/hr
    lluv_ac=(d[57]*256+d[56])*0.2;       // mm
    rad=(d[47]*256+d[46]);              // W/m2

//// **************************************************************************************
//for(i=1;i<=2;i++)
//{
  if(temp<-20||temp>100)
  {  Davis.println("LOOP 1");
    delay(4);
    for (i=1;i<=2;i++)
   {   d=Davis.read();
       delay(4);
   }
       temp=0.5*((d[15]*256+d[14])-320)/9; // ºC
  }
  if (hum<0||hum>100)
  {  Davis.println("LOOP 1");
    delay(4);
    for (i=1;i<=2;i++)
     {   d=Davis.read();
       delay(4);
     }
    hum=(d[35]); // %  
  }
  if (vel_v>50|| vel_v<0)
  {  Davis.println("LOOP 1");
  delay(4);
    for (i=1;i<=2;i++)
   {   d=Davis.read();
       delay(4);
   }
    vel_v=0.44704*d[16];
}
  if (dir_v>360||dir_v<0||dir_v==255)
  {  Davis.println("LOOP 1");
    delay(4);
      for (i=1;i<=2;i++)
       {   d=Davis.read();
           delay(4);
       }
     dir_v=d[18];  
}    
    if (rad==128||rad>10000||rad<0)
    {  Davis.println("LOOP 1");
          delay(4);
          for (i=1;i<=2;i++)
      {   d=Davis.read();
           delay(4);
       }
        rad=(d[47]*256+d[46]);
}
  if (lluv_ac<0)
  {  Davis.println("LOOP 1");
    delay(4);
      for (i=1;i<=2;i++)
       {   d=Davis.read();
           delay(4);
       }
  lluv_ac=(d[57]*256+d[56])*0.2;
  }
  if(lluv<0||lluv>2000)
  {  Davis.println("LOOP 1");
    delay(4);
      for (i=1;i<=2;i++)
       {   d=Davis.read();
           delay(4);
       }
  lluv=(d[44]*256+d[43])*0.2;
  }
  if(bar<0)
  {  Davis.println("LOOP 1");
    delay(4);
    for (i=1;i<=2;i++)
       {   d=Davis.read();
           delay(4);
       }
  bar=0.0254*(d[10]*256+d[9]);
  }
//}

////////////////////////////////////////////////////////// ASIGNAR VALORES INVALIDANTES 9999
if(temp<-20||temp>100)
    temp=9999;
if (hum<0||hum>100)
    hum=9999;
if (vel_v>50|| vel_v<0)
    vel_v=9999;
if (dir_v>360||dir_v<0||dir_v==255)
    dir_v=9999;
if (rad==128||rad>10000||rad<0)
   rad=9999;
if (lluv_ac<0)//||lluv_ac!=lluv_aca)
  lluv_ac=9999;
if(lluv<0||lluv>2000)
  lluv=9999;
if(bar<0)
  bar=9999;

//////////////////////////////////////////////////////////TERMINA VALORES INVALIDANTES



//********************************************************************************************
////////////////////////////////////////    
 
//Serial.println("Datos leidos");
//Serial.print("temp=");
//Serial.println(temp);
//Serial.print("hum=");
//Serial.println(hum);
//Serial.print("vel_v=");
//Serial.println(vel_v);
//Serial.print("dir_v=");
//Serial.println(dir_v);
Serial.print("bar=");
Serial.println(bar);
//Serial.print("lluv=");
//Serial.println(lluv);
//Serial.print("lluv_ac=");
//Serial.println(lluv_ac);
//Serial.print("dir_v=");
//Serial.println(dir_v);
//Serial.print("rad=");
//Serial.println(rad);
  //}
    Serial.flush();
    digitalWrite(19, HIGH);
}

//////////////////////////////////////////////////////////////////////
void Logger()
{
  if (sd.begin(4, SPI_FULL_SPEED))
  {   digitalWrite(18, LOW);
      sprintf(FileName, "%.2d%.2d%.2d%.2d.csv", t[7], t[6], t[5],id); //ddmmaa
      delay(5);
           if (!myFile.open(FileName, O_RDWR | O_CREAT | O_AT_END))
         { Serial.println("ERROR DE MEMORIA");
           digitalWrite(18, LOW);
           delay(200);
         }
      else
         { digitalWrite(18, LOW);
            myFile.print(t[4]);
            myFile.print(":");
            myFile.print(t[3]);
            myFile.print(":");
            myFile.print(t[2]);
            myFile.print(",");
            myFile.print(temp);
            myFile.print(",");
            myFile.print(hum);
            myFile.print(",");
            myFile.print(vel_v);
            myFile.print(",");
            myFile.print(dir_v);
            myFile.print(",");
            myFile.print(bar);
            myFile.print(",");
            myFile.print(lluv_ac);
            myFile.print(",");
            myFile.println(rad);
            myFile.close();
            delay(100);
            Serial.print("Almacenado en:");
            Serial.println(FileName);
            digitalWrite(18, HIGH);
         }

    }

else{
    Serial.println("ERROR DE MEMORIA");
    digitalWrite(18, LOW);
    delay(200);
    }
}
//////////////////////////////////////////////////////////////////////

void loop()
{
servidor();
unsigned long currentMillis = millis();
if(currentMillis - previousMillis > 50000||previousMillis==0)
{ previousMillis = currentMillis;
  LeerFH();
  
  if(Min!=t[3])
    {
      LeerSe();
      Logger();
      Min=t[3];
      t[3]=-1;
    }
}
delay(10);
}
3  Topics / Device Hacking / server sd files logger on: July 09, 2013, 06:53:45 pm
I am trying to implement a Data logger for a Davis meteo station.
I used the server example, the problem is that when I remotely access a file the arduino seems to stop working
I stops logging and rading dataand serving.

If any of you can give any suggestions I'd be glad

Thanks,

 
#include <SdFat.h>
#include <SdFatUtil.h>
#include <Ethernet.h>
#include <SPI.h>
#include <SoftwareSerial.h>
 
//%%**%%%%**%%%%**%%%%**%%%%**%%%%**%% ETHERNET STUFF %%**%%%%**%%%%**%%%%**%%%%**%%%%**%%/
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 0, 174 };
EthernetServer server(80);
 
//%%**%%%%**%%%%**%%%%**%%%%**%%%%**%% SDCARD STUFF %%**%%%%**%%%%**%%%%**%%%%**%%%%**%%/
Sd2Card card;
SdVolume volume;
SdFile root;
SdFile file;
SdFile myFile;
SdFat sd;

SoftwareSerial Davis(5, 3); // RX, TX
char FileName[13];
int t[50]={-1};
int i=1;
const int id=13;
int Min=-10;
int d[60];
long previousMillis;

   double temp;
   int hum;
   double vel_v=0.0001;
   int dir_v;
   double bar;
   double lluv=0.0001;
   double lluv_ac=0.0001;
   int rad;
 
// store error strings in flash to save RAM
#define error(s) error_P(PSTR(s))
 
void error_P(const char* str) {
  PgmPrint("error: ");
  SerialPrintln_P(str);
  if (card.errorCode()) {
    PgmPrint("SD error: ");
    Serial.print(card.errorCode(), HEX);
    Serial.print(',');
    Serial.println(card.errorData(), HEX);
  }
  while(1);
}

void setup() {
  pinMode(17, OUTPUT);
  pinMode(18, OUTPUT);
  pinMode(19, OUTPUT);
  Serial.begin(9600);
   Davis.begin(19200);
  //PgmPrint("Free RAM: ");
  //Serial.println(FreeRam());  
 
  // initialize the SD card at SPI_HALF_SPEED to avoid bus errors with
  // breadboards.  use SPI_FULL_SPEED for better performance.
  pinMode(10, OUTPUT);                       // set the SS pin as an output (necessary!)
  digitalWrite(10, HIGH);                    // but turn off the W5100 chip!
 
  if (!card.init(SPI_FULL_SPEED, 4)) error("card.init failed!");
 
  // initialize a FAT volume
  if (!volume.init(&card)) error("vol.init failed!");
 
  //PgmPrint("Volume is FAT");
  //Serial.println(volume.fatType(),DEC);
  //Serial.println();
 
  if (!root.openRoot(&volume)) error("openRoot failed");
 
  //  list file in root with date and size
  //  PgmPrintln("Files found in root:");
  //  root.ls(LS_DATE | LS_SIZE);
  //Serial.println();
 
  // Recursive list of all directories
  //PgmPrintln("Files found in all dirs:");
  //root.ls(LS_R);
 
  //Serial.println();
  //PgmPrintln("Done");
 
  // Debugging complete, we start the server!
  Ethernet.begin(mac, ip);
  server.begin();
}



void ListFiles(EthernetClient client, uint8_t flags) {
  // This code is just copied from SdFile.cpp in the SDFat library
  // and tweaked to print to the client output in html!
  dir_t p;
  
  root.rewind();
  client.println("<ul>");
  while (root.readDir(&p) > 0) {
    // done if past last used entry
    if (p.name[0] == DIR_NAME_FREE) break;
    // skip deleted entry and entries for . and  ..
    if (p.name[0] == DIR_NAME_DELETED || p.name[0] == '.') continue;
    // only list subdirectories and files
    if (!DIR_IS_FILE_OR_SUBDIR(&p)) continue;
    // print any indent spaces
    client.print("<li><a href=\"");
    for (uint8_t i = 0; i < 11; i++) {
      if (p.name == ' ') continue;
      if (i == smiley-cool {
        client.print('.');
      }
      client.print((char)p.name);
    }
    client.print("\">");
    
    // print file name with possible blank fill
    for (uint8_t i = 0; i < 11; i++) {
      if (p.name == ' ') continue;
      if (i == smiley-cool {
        client.print('.');
      }
      client.print((char)p.name);
    }
    
    client.print("</a>");
    
    if (DIR_IS_SUBDIR(&p)) {
      client.print('/');
    }

    // print modify date/time if requested
    if (flags & LS_DATE) {
       root.printFatDate(p.lastWriteDate);
       client.print(' ');
       root.printFatTime(p.lastWriteTime);
    }
    // print size if requested
    if (!DIR_IS_SUBDIR(&p) && (flags & LS_SIZE)) {
      client.print(' ');
      client.print(p.fileSize);
    }
    client.println("</li>");
  }
  client.println("</ul>");
}


// How big our line buffer should be. 100 is plenty!
#define BUFSIZ 64
 
void servidor()
{digitalWrite(17, HIGH);
  char clientline[BUFSIZ];
  int index = 0;
 
  EthernetClient client = server.available();
  if (client) {digitalWrite(17, HIGH);
    // an http request ends with a blank line
    boolean current_line_is_blank = true;
    // reset the input buffer
    index = 0;
 
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
 
        // If it isn't a new line, add the character to the buffer
        if (c != '\n' && c != '\r') {
          clientline[index] = c;
          index++;
          // are we too big for the buffer? start tossing out data
          if (index >= BUFSIZ)
            index = BUFSIZ -1;
 
          // continue to read more data!
          continue;
        }
 
        // got a \n or \r new line, which means the string is done
        clientline[index] = 0;
 
        // Print it out for debugging
        Serial.println(clientline);
 
        // Look for substring such as a request to get the root file
        if (strstr(clientline, "GET / ") != 0) {
          // send a standard http response header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();
 
          // print all the files, use a helper to keep it clean
          client.println("<h2> _- Archivos -_</h2>");
          ListFiles(client, LS_SIZE);
        } else if (strstr(clientline, "GET /") != 0) {
          // this time no space after the /, so a sub-file!
          char *filename;
 
          filename = clientline + 5; // look after the "GET /" (5 chars)
          // a little trick, look for the " HTTP/1.1" string and
          // turn the first character of the substring into a 0 to clear it out.
          (strstr(clientline, " HTTP"))[0] = 0;
 
          // print the file we want
          //Serial.println(filename);
          
          if (! file.open(&root, filename, O_READ)) {
            //client.println("HTTP/1.1 404 Not Found");
            //client.println("Content-Type: text/html");
            //client.println();
            client.println("<h2>File Not Found!</h2>");
            client.stop();
            return;
          }
 
          //Serial.println("Opened!");
 
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/plain");
          client.println();
 
          int16_t c;
          while ((c = file.read()) > 0) {
              // uncomment the serial to debug (slow!)
              //Serial.print((char)c);
              client.print((char)c);
          }
          file.close();
          client.stop();
          return;
        } else {
          // everything else is a 404
          client.println("HTTP/1.1 404 Not Found");
          client.println("Content-Type: text/html");
          client.println();
          client.println("<h2>File Not Found!</h2>");
          client.stop();
          return;
        }
        client.stop();
        return;
      }
    }
    // give the web browser time to receive the data
    delay(2500);
    client.stop();
    digitalWrite(17, LOW);
  }
}



//////////////////////////////////////////////////////////////////////

void LeerFH()
{digitalWrite(19, LOW);
  Davis.println("GETTIME");
  delay(10);
  t[3]=0;
   for(i=1;i<=8;i++) // (Davis.available())
    {
     t=Davis.read();
     delay(5);
     }
    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(25);
    Davis.println("GETTIME");
    delay(10);
    t[3]=0;
     for(i=1;i<=8;i++) // (Davis.available())
      {t=Davis.read();
       delay(5);
      }
      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(50);
    Davis.println("GETTIME");
    delay(10);
    t[3]=0;
     for(i=1;i<=8;i++) // (Davis.available())
      {t=Davis.read();
       delay(5);
      }
      Davis.flush();
     i=1; // reiniciar el contador
     t[7]=t[7]-100; //ajuste al año
    }

   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(19, HIGH);

}

//////////////////////////////////////////////////////////////////////

4  Topics / Home Automation and Networked Objects / Re: make code smaller on: February 18, 2013, 02:59:46 pm
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)
Code:

// 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);
}
5  Topics / Home Automation and Networked Objects / make code smaller on: February 14, 2013, 03:27:36 pm
I have been working to get my weather station connected to internet.

unfortunately it seems that the sketch it too big to be transfered to the Arduino UNO.

Can a good soul  help me.

Can someone give some hints on how to make ma code smaller.

Thank you so much!!!




//incluir librerías
#include <SdFat.h>
#include <SdFatUtil.h>
#include <Ethernet.h>
#include <SPI.h>
#include <SoftwareSerial.h>

SoftwareSerial Davis(3, 5); // RX, TX
int Min=-10;
int t[12]={-1};
int d[55];
int i=1;
char FileName[12];
SdFile myFile;
SdFat sd;

   float temp;
   int hum;
   float vel_v;
   int dir_v;
   float bar;
   float lluv;
   float lluv_ac;
   float rad;

byte mac[] = { 0x90, 0xA2, 0xDA, 0x0D, 0x41, 0xF9 };
//byte ip[] = { 192,168,0,163};
byte server[] = {190,147,203,25}; // Direccion ip del servidor
EthernetClient client;

void setup()
{
  if (!sd.begin(4, SPI_HALF_SPEED)) sd.initErrorHalt();
  pinMode(18, OUTPUT);
  pinMode(19, OUTPUT);
  Davis.begin(19200);
  //Ethernet.begin(mac, ip);
  Serial.begin(9600);
  delay(1000);
}

//////////////////////////////////////////////////////////////////////

void LeerSe()

{ digitalWrite(19, HIGH);
  Davis.println("LOOP 1");
  delay(10);
   for(i=1;i<=47;i++)// (Davis.available())
   {   d=Davis.read();
       delay(10);
   }

    i=1;
    if(d[11]*d[12]*d[13]==0){
      delay(1000);
      LeerSe();
    }

    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){
    LeerSe();
    }
    else{

 //   Serial.println(" DATOS LEIDOS ");
//    Serial.print("temp=");
//    Serial.println(temp);
//    Serial.print("hum=");
//    Serial.println(hum);
//    Serial.print("vel_v=");
//    Serial.println(vel_v);
//    Serial.print("dir_v=");
//    Serial.println(dir_v);
//    Serial.print("bar=");
//    Serial.println(bar);
//    Serial.print("lluv=");
//    Serial.println(lluv);
//    Serial.print("lluv_ac=");
//    Serial.println(lluv_ac);
//     Serial.print("dir_v=");
//    Serial.println(dir_v);
//    Serial.print("rad=");
//    Serial.println(rad);
    Davis.flush();
    delay(5);
    }
    digitalWrite(19, LOW);
}


//////////////////////////////////////////////////////////////////////

void LeerFH()
{digitalWrite(18, HIGH);
  Davis.println("GETTIME");
  delay(5);
   for(i=1;i<=8;i++)// (Davis.available())
    {
     t=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);
   }
}

//////////////////////////////////////////////////////////////////////

void Enviar() {

  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    // no point in carrying on, so do nothing forevermore:
    for(;smiley-wink
      ;
  }
  // give the Ethernet shield a second to initialize:
  delay(1000);
  Serial.println("connecting...");

  // if you get a connection, report back via serial:
  if (client.connect(server, 1830)) {
    Serial.println("connected");
    // Make a HTTP request:
    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);
  }
  else {
    // kf you didn't get a connection to the server:
    Serial.println("connection failed");
  }

  // if there are incoming bytes available
  // from the server, read them and print them:
  int i =0;
  if (client.available()) {
    for(i=1;i<=12;i++){
      delay(5);
    char c = client.read();
    Serial.print(c);
  }
  }

  // if the server's disconnected, stop the client:
  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();

  }
  delay(5000);
}

//////////////////////////////////////////////////////////////////////

//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);
Serial.println(FileName);
   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);
            digitalWrite(18, LOW);

}

//////////////////////////////////////////////////////////////////////

void loop(){
  LeerFH();
  delay(10);
  if(Min<t[3]){
  Min=t[3];
  LeerSe();
  Logger();
  Enviar();
}
delay(25000);
}


 
6  International / Español / Re: Problema con comunicacion en serie on: February 14, 2013, 03:20:00 pm
Estoy casi seguro que sucede cuando no hay suficiente espacio en la memoria del Arduino para alojar el programa, a mi me sucede en ubuntu con programas de mas de 30KB para el UNO
7  Products / Arduino Due / Re: sdfat + due error on: December 17, 2012, 06:17:43 pm
#include <SdFat.h>
#include <SdFatUtil.h>
#include <Ethernet.h>
#include <SPI.h>

/************ ETHERNET STUFF ************/
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 1, 3 };
EthernetServer server(80);

/************ SDCARD STUFF ************/
Sd2Card card;
SdVolume volume;
SdFile root;
SdFile file;

// store error strings in flash to save RAM
#define error(s) error_P(PSTR(s))

void error_P(const char* str) {
  PgmPrint("error: ");
  SerialPrintln_P(str);
  if (card.errorCode()) {
    PgmPrint("SD error: ");
    Serial.print(card.errorCode(), HEX);
    Serial.print(',');
    Serial.println(card.errorData(), HEX);
  }
  while(1);
}

void setup() {
  Serial.begin(9600);
  SPI.begin();
  PgmPrint("Free RAM: ");
  Serial.println(FreeRam()); 
 
  // initialize the SD card at SPI_HALF_SPEED to avoid bus errors with
  // breadboards.  use SPI_FULL_SPEED for better performance.
  pinMode(53, OUTPUT);                       // set the SS pin as an output (necessary!)
  digitalWrite(53, HIGH);                    // but turn off the W5100 chip!

  if (!card.init(SPI_HALF_SPEED, 4)) error("card.init failed!");
 
  // initialize a FAT volume
  if (!volume.init(&card)) error("vol.init failed!");

  PgmPrint("Volume is FAT");
  Serial.println(volume.fatType(),DEC);
  Serial.println();
 
  if (!root.openRoot(&volume)) error("openRoot failed");

  // list file in root with date and size
  PgmPrintln("Files found in root:");
  root.ls(LS_DATE | LS_SIZE);
  Serial.println();
 
  // Recursive list of all directories
  PgmPrintln("Files found in all dirs:");
  root.ls(LS_R);
 
  Serial.println();
  PgmPrintln("Done");
 
  // Debugging complete, we start the server!
  Ethernet.begin(mac, ip);
  server.begin();
  delay(1000);
}

void ListFiles(EthernetClient client, uint8_t flags) {
  // This code is just copied from SdFile.cpp in the SDFat library
  // and tweaked to print to the client output in html!
  dir_t p;
 
  root.rewind();
  client.println("<ul>");
  while (root.readDir(&p) > 0) {
    // done if past last used entry
    if (p.name[0] == DIR_NAME_FREE) break;

    // skip deleted entry and entries for . and  ..
    if (p.name[0] == DIR_NAME_DELETED || p.name[0] == '.') continue;

    // only list subdirectories and files
    if (!DIR_IS_FILE_OR_SUBDIR(&p)) continue;

    // print any indent spaces
    client.print("<li><a href=\"");
    for (uint8_t i = 0; i < 11; i++) {
      if (p.name == ' ') continue;
      if (i == smiley-cool {
        client.print('.');
      }
      client.print((char)p.name);
    }
    client.print("\">");
   
    // print file name with possible blank fill
    for (uint8_t i = 0; i < 11; i++) {
      if (p.name == ' ') continue;
      if (i == smiley-cool {
        client.print('.');
      }
      client.print((char)p.name);
    }
   
    client.print("</a>");
   
    if (DIR_IS_SUBDIR(&p)) {
      client.print('/');
    }

    // print modify date/time if requested
    if (flags & LS_DATE) {
       root.printFatDate(p.lastWriteDate);
       client.print(' ');
       root.printFatTime(p.lastWriteTime);
    }
    // print size if requested
    if (!DIR_IS_SUBDIR(&p) && (flags & LS_SIZE)) {
      client.print(' ');
      client.print(p.fileSize);
    }
    client.println("</li>");
  }
  client.println("</ul>");
}

// How big our line buffer should be. 100 is plenty!
#define BUFSIZ 100

void loop()
{
  char clientline[BUFSIZ];
  int index = 0;
 
  EthernetClient client = server.available();
  if (client) {
    // an http request ends with a blank line
    boolean current_line_is_blank = true;
   
    // reset the input buffer
    index = 0;
   
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
       
        // If it isn't a new line, add the character to the buffer
        if (c != '\n' && c != '\r') {
          clientline[index] = c;
          index++;
          // are we too big for the buffer? start tossing out data
          if (index >= BUFSIZ)
            index = BUFSIZ -1;
         
          // continue to read more data!
          continue;
        }
       
        // got a \n or \r new line, which means the string is done
        clientline[index] = 0;
       
        // Print it out for debugging
        Serial.println(clientline);
       
        // Look for substring such as a request to get the root file
        if (strstr(clientline, "GET / ") != 0) {
          // send a standard http response header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();
         
          // print all the files, use a helper to keep it clean
          client.println("<h2>Files:</h2>");
          ListFiles(client, LS_SIZE);
        } else if (strstr(clientline, "GET /") != 0) {
          // this time no space after the /, so a sub-file!
          char *filename;
         
          filename = clientline + 5; // look after the "GET /" (5 chars)
          // a little trick, look for the " HTTP/1.1" string and
          // turn the first character of the substring into a 0 to clear it out.
          (strstr(clientline, " HTTP"))[0] = 0;
         
          // print the file we want
          Serial.println(filename);

          if (! file.open(&root, filename, O_READ)) {
            client.println("HTTP/1.1 404 Not Found");
            client.println("Content-Type: text/html");
            client.println();
            client.println("<h2>File Not Found!</h2>");
            break;
          }
         
          Serial.println("Opened!");
                   
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/plain");
          client.println();
         
          int16_t c;
          while ((c = file.read()) > 0) {
              // uncomment the serial to debug (slow!)
              //Serial.print((char)c);
              client.print((char)c);
          }
          file.close();
        } else {
          // everything else is a 404
          client.println("HTTP/1.1 404 Not Found");
          client.println("Content-Type: text/html");
          client.println();
          client.println("<h2>File Not Found!</h2>");
        }
        break;
      }
    }
    // give the web browser time to receive the data
    delay(1);
    client.stop();
  }
}
8  Products / Arduino Due / Re: sdfat + due error on: December 17, 2012, 06:09:19 pm
I finally had some time to test the sketch, in hardware.

it compiles perfect, but on the due it does not seem to work. I enter the IP. but it does not work.

I tested using the Ethernet library examples like the Web Server, it worked.

I wonder if the issue has to do with the SS pin and the SPI library - - SPI.begin()

Thanks,

w

9  Products / Arduino Due / Re: sdfat + due error on: December 05, 2012, 01:50:42 pm
Thank you so much, you have been really helpful.

one more question, How can I use the softwareserial library in the Due.

My code used it but now I have 4 Serial Ports I just want to know smiley

Again, thanks.

W
10  Products / Arduino Due / Re: sdfat + due error on: December 05, 2012, 10:21:52 am
thanks, I overcome that issue

I got this new error:

In file included from SDWebBrowse.ino:30:
/home/admin-aite/sketchbook/libraries/SPI/SPI.h:16: fatal error: avr/pgmspace.h: No such file or directory
compilation terminated.
11  Products / Arduino Due / Re: sdfat + due error on: December 04, 2012, 06:15:59 pm
the tutorial is this

http://www.ladyada.net/learn/arduino/ethfiles.html
12  Products / Arduino Due / sdfat + due error on: December 04, 2012, 06:15:09 pm
I've got my Due

but whe trying to upload the tutorial I found

i got this error-->

error: call to 'SdBaseFile::readDir' declared with attribute error: use readDir(&dir)

Can you tell me how can I work it out?

Thanks,
13  Community / Gigs and Collaborations / Re: 2 arduinos 1 shield on: November 29, 2012, 04:18:04 pm
Thanks,

Do you think that using a faster Arduino, as the Due, can make the application work better?
14  Community / Gigs and Collaborations / 2 arduinos 1 shield on: November 29, 2012, 09:45:42 am
Hello Arduino pals

I am wondering if I can use 2 different arduinos to access the same sd card on a Ethernet shield, I am working on a web server logger but while Accessing to to the data via web browser the logging is not done, I am think on implement the logger in one UNO ant the web server in other UNO.

Best,
15  International / Español / Re: Compartir Servidor Web para Arduino UNO y Ethernet Shield con SD on: November 28, 2012, 10:01:04 am
Estoy tratando de mejorar la velocidad de transferencia para un servidor sobre Arduino UNO, por ahora va a 330 bytes/segundo...
si gusta puedo enviar mi código para que me de sugerencias

Saludos,
Pages: [1] 2