this one to show the free ram
int freeRam () {
extern int __heap_start, *__brkval;
int v;
return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval);
}
And for last the one responsible for the hole Ethernet connection
//Serial.println(freeRam());
char clientline[BUFSIZ];// cria avariável para armazenar os dados enviados pelo cliente ethernet
int index = 0;// Auxilia no armazenamento dos dados enviados pelo cliente ethernet
EthernetClient client = server.available();// cria o objeto cliente, como sendo disponível
if (client) {
boolean currentLineIsBlank = true;// checa se a linha é vazia, opções do HTTP/HTML
index = 0; // Zera a variável index, que anda no vetor clientline para sempre pegar.
while (client.connected())// Enquanto cliente conectado
{
if (client.available())// Se o cliente estiver disponível
{
char c = client.read();// Lê caracter por caracter do request do cliente
if(c != '\n' && c != '\r') // verifica se o caracter é \n ou \r, se nao for significa que tem dados a ler, se for pode pular fora do loop
{
clientline[index] = c;// armazena cada caracter que o cliente manda em um buffer para criar a string
index++;
if (index >= BUFSIZ) // Se o index ultrapassar o tamanho do BUFSIZ faz index = BUFSIZ e descarta o resto dos dados
index = BUFSIZ - 1;
continue;
}
clientline[index] = 0;//faz o último caracter do vetor clientline nulo, para o programa reconhecer que o vetor acaba ali
Serial.println(clientline);// imprime na serial oque o cliente solicitou, para debug
if (strstr(clientline, "GET / ") != 0) // Procura na string que o cliente enviou o comando GET / se achar:
{
client.println(F("HTTP/1.1 200 OK"));// Envia menssagens padrão de conecção aceita e OK
client.println(F("Content-Type: text/html"));
client.println();
client.print(F("<center>"));
client.println(F("<h1>Hospital e Maternidade Santa Clara<h1>"));// Imprime na página a frase centrada
client.print(F("</center>"));
client.print(F("<center>"));
client.println(F("<h1>Controle de dejetos Infectantes<h1>"));// Imprime na página a frase centrada
client.print(F("</center>"));
client.print(F("<center>"));
client.println(F("<h1>Arquivos no SD: <h1>"));// Imprime na página a frase centrada
client.print(F("</center>"));
root = SD.open("/");// DEfine a variável root como sendo a entrada root do cartão
printDirectory(root, 0, client);// chama a função que escaneia todo o SD procurando todos os arquivo e os imprime na tela do client já como links
}
else if (strstr(clientline, "GET /") != 0)// caso encontre a GET / sem espaço depois significa que estará solicitando algum arquivo,
{
char *filename;
filename = clientline + 5;// então salvamos essa solicitação de arquivo em outra variável com um pequeno truque para pegar o nome do arquivo
(strstr(clientline, " HTTP"))[0] = 0; // Então anulamos a substring HTTP
Serial.println(filename);// Debug
if(!SD.open(filename))// Se não conseguirmos abrir o arquivo solicitado enviamos uma menssagem padrão de erro
{
client.println(F("HTTP/1.1 404 Not Found"));
client.println(F("Content-Type: text/html"));
client.println();
client.println(F("<h2>File Not Found!</h2>"));
break;
}
if(regular_relogio != 2){
Serial.println(F("Opened!"));// caso contrário enviamos uma menssagem padrão de OK
client.println(F("HTTP/1.1 200 OK"));
client.println(F("Content-Type: text/plain"));
client.println();
myFile = SD.open(filename);// Abrimos o arquivo que foi solicitado
if(!myFile) Serial.println(F("file open failed"));
int8_t c;
while(myFile.available())
{
if(parar_erro == 20)
{
Serial.println(F("Erro, o cartão retornou está em loop !"));
delay(4000);
break;
parar_erro == 20
}
char buffer_arquivo[20];
int k = 0;
while(k < 20)
{
c = myFile.read();
if(c == -1)
{
Serial.println(F("Erro, o cartão retornou -1 !"));
parar_erro ++;
break;
}
buffer_arquivo[k] = char(c);
k++;
if(k == 20){
for (int i=0; i < 20; i++)
{
client.print(buffer_arquivo[i]);
Serial.print(buffer_arquivo[i]);
}
}
//Serial.println((char) c);//Dai imprimimos na tela do cliente e na serial tudo que tem no arquivo
}}
myFile.close();// fecha o arquivo do SD que fora aberto
}
if(regular_relogio == 2)
{
client.print(F("Equipamento atualmente em uso, ou travado na tela errada!
Caso esse erro persista cheque o equipamento"));
}}
else// Qualquer outra coisa é a menssagem padrão de não encontrado
{
client.println(F("HTTP/1.1 404 Not Found"));// Código padrão HTTP para página não encontrada
client.println(F("Content-Type: text/html"));// Código padrão HTTP, para tipo html de texto
client.println();// pula uma linha, navegador saber que a parte de códigos, hand_shake, acabou.
client.println(F("<h2>Arquivo Não Encontrado!</h2>"));// Plota na tela a menssagem de arquivo não encontrado
}
break;
}
}
// Delay para que o cliente tenha tempo para receber os dados
delay(1);
// encerra a conexão
client.stop();
}
Here are my setup
void setup() //Função setup padrão, roda apenas uma vez, basicamente uma função para configurações
{
Serial.begin(9600);// Inicializa a comunicação USD na velociade 9600
lcd.begin(84,48); // Inicializa o display de 84X48 pixels
pinMode(10, OUTPUT);// Pôe o pino dez como saída
digitalWrite(4, LOW);// põe o pino quatro em baixo
digitalWrite(10,HIGH);// e o dez em alto, para iniciar e configurar o cartão SD
if (!SD.begin(4)) {
Serial.println(F("Erro na inicializacao do SD"));// Printa na USB-serial caso o SD não seja iniciado
return;
}
Serial.println(F("SD iniciado com sucesso"));// caso o SD seja iniciado com sucesso mostra isso no serial-USB
Ethernet.begin(mac, ip); // Inicializa o Ethernet
server.begin();// Inicializa o servidor
Serial.print(F("server is at "));// imprime na serial USB o endereço do servidor
Serial.println(Ethernet.localIP());
}