Ethernet e Cartão SD

Olá pessoal,será que vocês podem me ajudar.

Não estou conseguindo achar onde estou errando.

Gostaria de fazer um sisteminha que grava dados numa memoria sd, que lê os dados dessa memoria sd e envia para uma rede local, e que apaga os dados.

Para isto estou usando uma ethernet shield.

o endereço da rede local que coloquei na minha plaquinha é: 192.168.1.88

Gostaria que quando eu digitasse (192.168.1.88/bm) no browser este sistema buscasse todo o texto armazenado no sd e envie na página do browser.

se eu digitar (192.168.1.88/am) que ele excluisse o arquivo de texto.

Porém existe erro em meu código e não descobri aonde. ele só executa uma dessas funções na primeira conexão, por exemplo se eu digitar (192.168.1.88/bm) ele vai gerar a página com o todo o texto no cartão sd, mas se eu digitar em seguida (192.168.1.88/am) ele não apaga as informações, ele aparece a tela anterior com tudo que estava gravado no sd. O mesmo acontece se eu fizer o contrário ele fica só na tela de exclussão.

segue meu código:

#include <SPI.h>

#include <Ethernet.h>

#include <SD.h>

Sd2Card SDcard;

SdVolume volume;

// Pino do Arduino conectado ao pino CS do modulo

const int chipSelect = 4;

// Pino do Arduino conectado ao push-button

//int pinobotaocont = 5;

int pinobotaoleitura=6;

//int pinobotaoapagar=7;

int contador = 0;

byte mac[] = {

0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED

};

IPAddress ip(192, 168, 1, 88);

EthernetServer server(80);

int a=0;

int j=0;

String readString;

int clienteconectado=0;

int sensorPin = A0;

int sensorValue = 0;

void setup() {

Serial.begin(9600);

//Inicia a comunicacao com o modulo SD

if (!SD.begin(chipSelect))

{

Serial.println("Falha ao acessar o cartao !");

Serial.println("Verifique o cartao/conexoes e reinicie o Arduino...");

return;

}

Serial.println("Cartao iniciado corretamente ");

Serial.println("Aguardando acionamento do push-button...");

Serial.println();

// Serial.begin(9600);

while (!Serial) {

}

Ethernet.begin(mac, ip);

server.begin();

}

void loop() {

// listen for incoming clients

EthernetClient client = server.available();

if (client) {

Serial.println("new client");

// an http request ends with a blank line

boolean currentLineIsBlank = true;

while (client.connected()) {

if (client.available()) {

char c = client.read();

if (readString.length() < 100)

{

//store characters to string

readString += c;

}

Serial.write(c);

if (c == '\n' && currentLineIsBlank) {

// send a standard http response header

client.println("HTTP/1.1 200 OK");

client.println("Content-Type: text/html");

client.println("Connection: close"); // the connection will be closed after completion of the response

//client.println("Refresh: 5"); // refresh the page automatically every 5 sec

client.println();

client.println("<!DOCTYPE HTML>");

client.println("<html>");

// output the value of each analog input pin

if (readString.indexOf("bm") > 0)//busca na memoria

{

//ler os dados no cartão

// Agora vamos abri-lo para leitura

File dataFile = SD.open("arquivo.txt");

if (dataFile) {

Serial.println("//////////////////////////////////////////////");

Serial.println("lendo o cartão.txt:");

// Le todo o arquivo...

while (dataFile.available()) {

//Serial.write(dataFile.read());

client.write(dataFile.read());

//client.println(" ");

}

//Finalizado, fecha-se o arquivo

dataFile.close();

}

client.println("
");

client.println("</html>");

break;

}

if (readString.indexOf("am") > 0)//apagar a memoria

{

//apagar os dados no cartão

SD.remove("arquivo.txt");

Serial.println("dados apagados");

client.println("dados apagados");

contador=0;

client.println("
");

}

client.println("</html>");

break;

}

if (c == '\n') {

// you're starting a new line

currentLineIsBlank = true;

} else if (c != '\r') {

// you've gotten a character on the current line

currentLineIsBlank = false;

}

}

}

// give the web browser time to receive the data

delay(1);

// close the connection:

client.stop();

Serial.println("client disconnected");

}

}

Eu começaria testando apenas função exclusão, tem certeza que ele apagou mesmo os dados?
Removeu o cartão e colocou no leitor USB para ter certeza que ela apaga?
Feito isso resta apenas o problema da conexão, faria primeiro um teste conectando diretamente por cabo sem passar por router o Arduino e o PC. Assim pode ter certeza que não é algo na rede bloqueando o segundo acesso.
Testado isso vai restar apenas o código e pode pesquisar mais sobre a função e o objeto.
EthernetClient client = server.available();
Pois parece que o segundo não fica disponível.
Talvez não deveria usar client.stop(); ?

Obrigado Vinicius pela resposta, mas estou com algumas dúvidas ainda. Se alguém puder me ajudar.

Testei a função exclusão já, está tudo certo. Ela realmente apaga o arquivo, tirei cartão do shield e coloquei no leitor do notebook e realmente apagou. A primeira função também funcionou bem ele conseguiu ler tudo que estava no arquivo de texto e enviar. O grande problema é que se só funciona uma das funções por vez, aquela que eu chamar primeiro. Se eu chamar a outra função depois ele fica aparecendo a resposta da primeira, como se estivesse travado, independente de qual eu chamar primeiro.

Como faço essa conexão entre o pc e arduino? é só tirar o cabo do lado que vai no roteador e ligar direto no pc? funciona?

Mas a função client.stop(); servi justamente para fechar a conexão para que possa ser executado outra coisa, se não o sistema vai ficar bloqueado na função. Não é isso? Eu tinha entendido isso.

como se faz para comunicar o pc através do browser diretamente com o shiled ethernet , sem usar o roteador? não consegui encontrar.