I've tested this with my code, but for some reason it didn't work like expected, and it was slower than my original code, but maybe i've made something wrong
#include <SPI.h>
#include <SdFat.h>
#include <SdFatUtil.h>
#include <Ethernet.h>
#include <Flash.h>
#include <VirtualWire.h>;
#define ledIndicadorComms 2
#define configConcl 3
#define ledRececao 7
#define BUFSIZ 128
const int pinoRececao = 8;
int leitura = 0;
float percentagem = 0;
float litros = 0;
float dados = 0;
char mensagem[5];
boolean verifica = false;
boolean verifica2 = false;
boolean Log = false;
int nr = 1;
byte mac[] = {
0x90, 0xA2, 0xDA, 0x00, 0xEA, 0x8C };
IPAddress ip(196,168,0,3);
char rootFileName[] = "index.htm";
char ficheiroLog[] ="&niv_LOG.txt";
EthernetServer server(80);
Sd2Card card;
SdVolume volume;
SdFile root;
SdFile file;
SdFile LOGfile;
#define error(s) error_P(PSTR(s))
void error_P(const char* str) {
PgmPrint("Erro: ");
SerialPrintln_P(str);
if (card.errorCode()) {
PgmPrint("Erro cartao SD: ");
Serial.print(card.errorCode(), HEX);
Serial.print(',');
Serial.println(card.errorData(), HEX);
}
digitalWrite(configConcl, HIGH);
while(1);
}
void setup() {
Serial.begin(9600);
delay(1);
pinMode(ledIndicadorComms, OUTPUT);
pinMode(configConcl, OUTPUT);
PgmPrint("Memoria RAM Livre: ");
Serial.println(FreeRam());
pinMode(10, OUTPUT);
digitalWrite(10, HIGH);
if (!card.init(SPI_FULL_SPEED, 4)) error("Falha no card.init!");
if (!volume.init(&card)) error("Falha no vol.init!");
PgmPrint("O volume e FAT");
Serial.println(volume.fatType(),DEC);
Serial.println();
if (!root.openRoot(&volume)) error("Falha ao abrir raiz do cartao!");
PgmPrintln("Ficheiros na raiz do cartao:");
root.ls(LS_DATE | LS_SIZE);
Serial.println();
PgmPrintln("Ficheiros encontrados em todos os directorios do cartao:");
root.ls(LS_R);
Serial.println();
PgmPrintln("Concluido");
Log = file.open(&root, ficheiroLog, O_WRITE | O_APPEND);
if (Log){
file.println("Leitura , Nivel Tanque , Quantidade Agua");
file.close();
Serial.println(F("Escrita do Header no ficheiro LOG concluida!"));
}else{
Serial.println(F("ERRO! Nao foi possivel abrir o ficheiro LOG."));
while(1){
digitalWrite(configConcl, HIGH);
delay(1000);
digitalWrite(configConcl,LOW);
delay(1000);
}
}
Ethernet.begin(mac, ip);
server.begin();
delay(2);
pinMode(ledRececao, OUTPUT);
vw_set_rx_pin(pinoRececao);
vw_setup(2000);
vw_rx_start();
digitalWrite(configConcl, HIGH);
delay(250);
digitalWrite(configConcl,LOW);
delay(250);
digitalWrite(configConcl, HIGH);
delay(250);
digitalWrite(configConcl,LOW);
}
void loop() {
char clientline[BUFSIZ];
char *filename;
int image = 0;
int index = 0;
verifica = false;
Log = false;
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;
if (vw_get_message(buf, &buflen)){
int i;
for (i=0; i<buflen; i++){
mensagem[i] = buf[i];
if (mensagem[0] == 'R'){
leitura = atoi(&mensagem[1]);
percentagem = (leitura * 100)/465;
litros = (percentagem*700000)/100;
Serial.print(F("Nivel do Tanque:"));
Serial.print(percentagem, 1);
Serial.println(F("%"));
Serial.print(F("Quantidade de agua no Tanque:"));
Serial.print(litros, 1);
Serial.println(F("litros"));
Log = file.open(&root, ficheiroLog, O_WRITE | O_APPEND);
if (Log){
file.print(nr);
file.print(" , ");
file.print(percentagem, 1);
file.print(" , ");
file.println(litros, 1);
file.close();
Serial.println(F("Valores gravados com sucesso!"));
nr++;
Log = false;
} else {
Serial.println(F("Nao foi possivel gravar dados no ficheiro LOG!"));
}
}
memset(&mensagem, 0, sizeof(mensagem)); //APAGA A MENSAGEM RECEBIDA
}
}
EthernetClient client = server.available();
if (client) {
boolean current_line_is_blank = true;
index = 0;
while (client.connected()) {
if (client.available()) {
char c = client.read();
if (c != '\n' && c != '\r') {
clientline[index] = c;
index++;
if (index >= BUFSIZ)
index = BUFSIZ -1;
continue;
}
clientline[index] = 0;
filename = 0;
Serial.println(clientline);
digitalWrite(ledIndicadorComms, HIGH);
delay(1);
digitalWrite(ledIndicadorComms, LOW);
delay(1);
if (strstr(clientline, "GET / ") != 0) {
filename = rootFileName;
}
if (strstr(clientline, "GET /") != 0) {
if (strstr(clientline, "GET /iframe") != 0) {
verifica = true;
}
if (strstr(clientline, "GET /2iframe") != 0) {
verifica2 = true;
}
if(strstr(clientline, "GET/&niv") !=0){
break;
}
if (!filename) filename = clientline + 5;
(strstr(clientline, " HTTP"))[0] = 0;
Serial.println(filename);
if (! file.open(&root, filename, O_READ)) {
client.println(F("HTTP/1.1 404 Not Found"));
client.println(F("Content-Type: text/html"));
client.println();
client.println(F("<h2>Erro 404</h2>"));
client.println(F("<s2>O ficheiro nao existe.<s2>"));
client.println(F(""));
break;
}
Serial.println("Ligado!");