buenas tardes, soy nuevo en el foro y queria compartir mi problema con ustedes para ver si es posible realizar lo que quiero hacer y como lo debo hacer.
el proyecto que estoy haciendo se basa en registrar el momento (dia, hora, mes, año) cuando una maquina detuvo su proceso y cuando inicio nuevamente, en pocas palabras es registrar los tiempo de parada de una maquina, hasta ahora puedo registrar los datos sin problemas en la SD, y tambien puedo mostrar los datos de la tarjeta en el puerto serie USB, es decir en el monitor serie. hasta ahora todo en orden, pero aqui viene el problema, cuando quiero hacer un codigo para que arduino tome los datos de la tarjeta almacenados en un .txt y me lo muestre en el navegador atravez de una conexión ethernet, es decir escribir el ip de mi arduino en el exprorer y cuando se conecte me muestre los datos de la tarjeta, hasta ahora pude conectarme y enviar un mensaje determinado pero como dije no puedo enviar los datos de la tarjeta, es posible hacer esto? les dejo el codigo que hice para que lo revisen
para hacer esto utilizo arduino MEGA, Ethernet Shield, RTC I2C
#include <SPI.h>
#include <Ethernet.h>
#include <SD.h>
#include <Wire.h>
#include "RTClib.h"
RTC_DS1307 RTC;
// Configuración de direccion MAC e IP.
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,1,177);
// Inicia la libreria Ethernet server con el puerto 80 (por defecto el puerto HTTP).
EthernetServer server(80);
void setup() {
// Inicia el puerto serie.
Serial.begin(9600);
// Inicia la conexión Ethernet y el servidor.
Ethernet.begin(mac, ip);
server.begin();
Serial.print("IP local del servidor ");
Serial.println(Ethernet.localIP());
pinMode(53, OUTPUT);
if (!SD.begin(4))
{ Serial.println("No hay tarjeta");
return; // NO sigas
}
Serial.println("Sd encontrada.");
}
void loop() {
EthernetClient client = server.available(); // Escucha a los clientes entrantes.
if (client) { // Si un cliente se conecta al servidor:
Serial.println("Nuevo cliente");
boolean currentLineIsBlank = true; // Marcador para enviar la respuesta desde el servidor.
while (client.connected()) { // Repite mientas existe clientes conectados:
if (client.available()) {
char c = client.read();
Serial.write(c); // Imprime por el puerto serie la petición del cliente (caracter a caracter)
if (c == '\n' && currentLineIsBlank) { // Se envia la respuesta a una petición de un cliente cuando a finalizado la petición:
// Respuesta:
File dataFile = SD.open("data.html"); //abro el archivo .txt donde almacene los datos
while (dataFile.available()) //mientras el archivo este disponible
Serial.write(dataFile.read()); //muestro los datos en monitor serial
client.println("HTTP/1.1 200 OK"); // Enviar un encabezado de respuesta HTTP estándar
client.println("Content-Type: text/html");
client.println("Connection: close"); // Se cerrará la conexiós despues de enviar la respuesta.
client.println("Refresh: 5"); // Refrescar automáticamente la página después de 5 segundos.
client.println();
client.println("<!DOCTYPE HTML>"); // Tipo de documento
client.write(dataFile.read()); //tomo los datos de la tarjeta y los escribo en el cliente
client.println("<html>"); // Etiqueta html inicio del documento.
client.println("
"); // Etiqueta html salto de linea.
client.println("</html>"); // Etiqueta html fin del documento.
dataFile.close(); //cierro la comunicacion con la SD
break;
}
if (c == '\n') { // Si el caracter es un salto de linea:
currentLineIsBlank = true; // La petición a terminado, se respondera a dicha peticón en el sigueitne ciclo.
}
else if (c != '\r') { // Si el caracter no es un retorno de carro (la petición no a terminado).
currentLineIsBlank = false; // Seguimos escuchando la petición.
}
}
}
delay(1); // Espera para dar tiempo al navegador a recivir los datos.
client.stop(); // Cierra la conexión.
Serial.println("Cliente desconectado");
Serial.println();
}
delay(5000);
}
les agradeceria mucho por su ayuda
saludos