Necesito de su ayuda, resulta que al mezclar un servidor en ethernet shield, la sd, la libreria Time, me da problemas de escritura. Existen veces que no me lee los datos de la sd, otras veces no escribe en la sd, según yo la programación esta bien, necesito que me digan si estoy yo equivocado, o el arduino no funciona bien, o alguna de sus partes, me sería de mucha ayuda su sabiduría, vale decir que soy nuevo programando arduino.
Actualmente al agregar la linea setTime no permite que escriba en la sd, si la quito, no ocurre ningun problema.
#include <Time.h>
#include <TimeLib.h>
#include <SPI.h>
#include <SD.h>
#include <Dhcp.h>
#include <Dns.h>
#include <Ethernet.h>
#include <EthernetClient.h>
#include <EthernetServer.h>
#include <EthernetUdp.h>
#include <Servo.h>
#define SD_CARD 4
#define BOTON 6
#define DATOS 7
#define RECIBIR 0
#define SOLTAR 170
/*SERVIDOR*******************************************/
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xEE};
IPAddress ip(192, 168, 1, 80);
EthernetServer eServer(80);
String readString;
/*SERVIDOR*******************************************/
/*SERVOMOTOR*/
Servo SG90;
/*SERVOMOTOR*/
File archivo;
void setup() {
Serial.begin(9600);
SG90.attach(DATOS);
Ethernet.begin(mac, ip);
eServer.begin();
pinMode(SD_CARD, OUTPUT);
pinMode(BOTON, INPUT);
SG90.write(RECIBIR);
iniciarLecturaSD();
setTime(00,00,00,21,11,2017);
}
void loop() {
webApp();
onBoton();
}
void webApp() {
EthernetClient client = eServer.available();
if (client) {
while (client.connected()) {
if (client.available()) {
char c = client.read();
if (readString.length() < 100) {
readString += c;
}
if (c == '\n') {
client.println("HTTP/1.1 200 OK");
client.println("Context-Type: text/html");
client.println();
client.println("<html>");
client.println("<head>");
client.println("<title> Link Feeder </title>");
client.println("</head>");
client.println("<body>");
client.println("<h1>LINK FEEDER</h1>");
client.println("<h2>Alimentacion de Mascotas Remotamente</h2>");
client.println("<h3><a href=\"/?feed\"\">Alimentar</a></h3>");
client.println("<table>");
archivo = SD.open("registro.bd");
if (archivo) {
while(archivo.available()) {
client.write(archivo.read());
}
archivo.close();
}
client.println("</table>");
client.println("</html>");
if (readString.indexOf("?feed") > 0) {
onServo();
}
readString = "";
delay(500);
client.stop();
}
}
}
}
}
void onServo() {
SG90.write(SOLTAR);
delay(2000);
SG90.write(RECIBIR);
saveNewFeed();
}
void onBoton() {
if (digitalRead(BOTON) == HIGH) {
onServo();
}
}
void iniciarLecturaSD() {
Serial.println("Inicializando Tarjeta SD...");
if (!SD.begin(SD_CARD)) {
Serial.println("ERROR - Fallo al inicializar.");
return;
}
Serial.println("LISTO! - Tarjeta SD Inicializada.");
String fileName = "registro.bd";
if (!SD.exists(fileName)) {
Serial.println("ERROR - No se encuentra "+fileName+"!");
return;
}
Serial.println("LISTO! - "+fileName+" disponible y accesible.");
}
void saveNewFeed(){
iniciarLecturaSD();
File archivoTwo = SD.open("registro.bd", FILE_WRITE);
if(archivoTwo){
Serial.println("Escribiendo...");
archivoTwo.println("<tr>");
archivoTwo.println("<td>asd</td>");
archivoTwo.println("<td>asd</td>");
archivoTwo.println("</tr>");
archivoTwo.flush();
archivoTwo.close();
}
}
Muchas Gracias