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("
- ");
- <a href="");
for (uint8_t i = 0; i < 11; i++) {
if (p.name == ' ') continue;- if (i == 8) {*
- 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 == 8) {
client.print('.');
}
client.print((char)p.name);
}*_* client.print("");*
* 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("
");
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("
}
client.println("
}
// 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("
- Archivos -
");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("
File Not Found!
");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("
File Not Found!
");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);
}
//////////////////////////////////////////////////////////////////////*_