Hello, need your help again debugging an issue that is driving me crazy...
I can't get the code to pass the IF (client) statement when there is a client connected to the ip adress of ethernet shield. i've done a lot of debugging but i can't see why... could you please look at my code and tell me what is wrong?
#include <SPI.h>
#include <SdFatUtil.h>
#include <Ethernet.h>
#include <VirtualWire.h>
//DECLARAÇÃO DOS PINOS
const byte ledInfo = 2;
const byte ledRececao = 3;
const byte pinoRececao = 8;
const byte BUFSIZ = 128;
//DECLARAÇÃO DAS VARIÁVEIS GLOBAIS
char mensagem[5];
unsigned int dadosAgua = 0;
float dadosBat = 0; //confirmar se é melhor float ou int
float percentagem = 0;
unsigned long litros = 0;
unsigned int nrLeitura = 1;
boolean Log = false;
//CONFIGURAÇÃO DO ETHERNET SHIELD
byte mac[] = {0x80, 0xA2, 0xDA, 0x00, 0xEA, 0x8C};
IPAddress ip = (196, 168, 0, 3);
char ficheiroIndex[] = "index.htm";
char ficheiroLog[] = "&logg.txt";
char ficheiroTanque[] = "tanque.jpg";
char ficheiroBorder[] = "border.jpg";
char ficheiroRodape[] = "rodape.jpg";
char ficheiroIframe[] = "iframe.htm";
char ficheiro2Iframe[] = "2iframe.htm";
char* ficheiroLer = '\0';
EthernetServer server(80);
EthernetClient client;
//PROGRAMAÇÃO DO CARTÃO SD
Sd2Card card;
SdVolume volume;
SdFile root;
SdFile file;
SdFile LOGfile;
//ARMAZENA SEQUÊNCIAS DE ERRO NA MEMÓRIA FLASH PARA ECONOMIZAR RAM
#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(ledInfo, HIGH);
while(1);
}
void setup() {
Serial.begin(9600);
delay(100);
pinMode(ledInfo, OUTPUT);
pinMode(ledRececao, OUTPUT);
pinMode(10, OUTPUT);
//LIGA E DESLIGA OS 2 LEDS PARA INDICAR QUE ESTÃO OPERACIONAIS
digitalWrite(ledInfo, HIGH);
digitalWrite(ledRececao, HIGH);
digitalWrite(10, HIGH);
delay(1000);
digitalWrite(ledInfo, LOW);
digitalWrite(ledRececao, LOW);
PgmPrint("Memoria RAM Livre: ");
Serial.println(FreeRam());
//INICIALIZA O CARTÃO SD EM "FULL SPEED", MÁXIMO DESEMPENHO. (PARA EVITAR ERROS COM LIGAÇÃO À BREADBOARD DEVE ESTAR EM "HALF SPEED")
if (!card.init(SPI_FULL_SPEED, 4)) error("Falha ao inicializar o Cartão SD!");
//INICIALIZA O VOLUME FAT
if (!volume.init(&card)) error("Falha ao inicializar Volume do Cartão SD!");
PgmPrint("O volume e FAT");
Serial.println(volume.fatType(),DEC);
Serial.println();
//LISTA NA SÉRIE OS FICHEIROS QUE ESTÃO NA RAIZ DO CARTÃO SD, COM DATA E TAMANHO
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();
//LISTA OS FICHEIROS DE TODOS OS DIRECTÓRIOS DO CARTÃO SD
PgmPrintln("Ficheiros encontrados em todos os directorios do cartao:");
root.ls(LS_R);
Serial.println();
PgmPrintln("Concluida a inicializacao do Cartao SD");
//ESCREVE O CABEÇALHO DO FICHEIRO DE DATALOGGER
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."));
//SE NÃO CONSEGUIR ABRIR O FICHEIRO LOG, LED FICA A PISCAR PARA INDICAR AVARIA
while(true) {
digitalWrite(ledInfo, HIGH);
delay(1000);
digitalWrite(ledInfo, LOW);
delay(1000);
}
}
//INICIA O SERVIDOR
Ethernet.begin(mac, ip);
server.begin();
delay(100);
//CONFIGURA E INICIA O RECEPTOR
vw_set_rx_pin(pinoRececao);
vw_setup(2000);
vw_rx_start();
//LED PISCA 3 VEZES A INDICAR TODA A CONFIGURAÇÂO CONCLUÍDA COM SUCESSO
for (int i = 0; i<3; i++) {
digitalWrite(ledInfo, HIGH);
delay(250);
digitalWrite(ledInfo, LOW);
delay(250);
}
Serial.println(F("Configuracao Concluida"));
}
void loop() {
rececaoRF();
clienteLigado();
}
//RECEPÇÃO DOS DADOS POR RF 433MHz
void rececaoRF() {
byte buf[VW_MAX_MESSAGE_LEN];
byte buflen = VW_MAX_MESSAGE_LEN;
if (vw_get_message(buf, &buflen)) {
digitalWrite(ledRececao, HIGH);
for (int j = 0; j<buflen; j++) {
mensagem[j] = buf[j];
}
if (mensagem[0] == 'R') {
dadosAgua = atoi(&mensagem[1]);
percentAgua();
}
else if (mensagem[0] == 'B') {
dadosBat = atoi(&mensagem[1]);
litrosAgua();
}
Serial.print(F("Mensagem Recebida: "));
Serial.println(mensagem);
memset(&buf, 0, sizeof(buf));
memset(&mensagem, 0, sizeof(mensagem));
gravarDados();
}
Serial.println(F("RececaoRF Concluida"));
}
void percentAgua() {
percentagem = ((465-dadosAgua)*100)/465;
Serial.print(F("Percentagem: "));
Serial.println(percentagem);
}
void litrosAgua() {
litros = ((465-dadosAgua)*700000)/465;
Serial.print(F("Litros: "));
Serial.println(litros);
}
void gravarDados() {
Log = file.open(&root, ficheiroLog, O_WRITE | O_APPEND);
if (Log){
file.print(nrLeitura);
file.print(" , ");
file.print(percentagem, 1);
file.print(" , ");
file.println(litros);
file.close();
Serial.println(F("Valores gravados com sucesso!"));
nrLeitura++;
Log = false;
}
else {
Serial.println(F("ERRO ao gravar dados no ficheiro LOG!"));
}
}