Buenos días a todos.
Mi problema es el siguiente, tengo un Arduino MEGA 2560 y una Ethernet Shield conectados por USB y Ethernet respectivamente. Lo que quiero hacer es algo que ya hice en su momento subir los datos de un acelerómetro a internet. Utilizo un código que ya me funcionó en su día pero no se porque ahora no me funciona... El código es el siguiente:
#include <SPI.h>
#include <Ethernet.h>
#include <AcceleroMMA7361.h>
#include <TimeLib.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,0,69); //192.168.0.69
EthernetServer server(80);
IPAddress gateway(192, 168, 0, 25);
IPAddress subnet(255, 255, 255, 0);
AcceleroMMA7361 accelero;
int x;
int y;
int z;
// Guardamos en que entrada de Arduino esta conectado el pin CS del modulo.
const int chipSelect = 4;
void setup()
{
Serial.begin(9600);
accelero.begin(13, 12, 11, 10, A0, A1, A2);
accelero.setARefVoltage(3.3); //sets the AREF voltage to 3.3V
accelero.setSensitivity(LOW); //sets the sensitivity to +/-6G
accelero.calibrate();
setTime(7,14,00,13,07,2018);
Ethernet.begin(mac, ip);
server.begin();
// El pin CS por defecto de la placa arduino debe ser configurado como salida
// aunque no se use (10 en la mayoria de las placas, 53 en Arduino Mega).
pinMode(53, OUTPUT);
Serial.print("server is at ");
Serial.println(Ethernet.localIP());
}
void loop()
{
x = accelero.getXAccel();
y = accelero.getYAccel();
z = accelero.getZAccel();
time_t t = now();//Declaramos la variable time_t t
EthernetClient client = server.available();
if (client)
{
Serial.println("new client");
bool currentLineIsBlank = true;
String cadena = "";
while (client.connected())
{
if (client.available())
{
char c = client.read();
Serial.write(c);
// Al recibir linea en blanco, servir página a cliente
if (c == '\n' && currentLineIsBlank)
{
client.println(F("HTTP/1.1 200 OK\nContent-Type: text/html"));
client.println();
//meta-refresh page every 2 seconds
client.println("<HTML>");
client.print("<HEAD>");
client.print("<meta http-equiv=\"refresh\" content=\"1\">");
client.print("<TITLE />URTASUN</title>");
client.print("</head>");
client.println("<BODY>");
client.println("
");
client.println(F("<html>\n<head>\n<title>URTASUN</title>\n</head>\n<body>"));
client.println(F("<div style='text-align:center;'>"));
client.println(F("<h2>Valor Acelerometro</h2>"));
client.print("\nEje X: ");
client.println(F("
"));
client.print(x);
client.print("\tG*10^-2 ");
client.println(F("
"));
client.println(F("
"));
client.print(" \tEje Y: ");
client.println(F("
"));
client.print(y);
client.print("\tG*10^-2 ");
client.println(F("
"));
client.println(F("
"));
client.print(" \tEje Z: ");
client.println(F("
"));
client.print(z);
client.print("\tG*10^-2 ");
client.println("
");
break;
client.println("</BODY>");
client.println("</HTML>");
}
if (c == '\n')
{
currentLineIsBlank = true;
}
else if (c != '\r')
{
currentLineIsBlank = false;
}
}
}
delay(1000);
client.stop();
}
else {
Serial.println("eror");
}
}
El código me compila bien y cuando lo cargo en la placa y compruebo el Monitor Serie me sale todo el tiempo "error" por lo que el problema me viene de que no hay ningún cliente escuchando (creo). Si pongo la dirección IP del Arduino en Internet no me sale nada...
Me he ayudado de las siguientes páginas:
http://www.educachip.com/arduino-ethernet-shield/
Ya he comprobado en el terminal que la dirección IP asignada está en mi red y no está ocupada. No entiendo porque no funciona un código que ya me funcionó en su día, espero que no sea un problema de los componentes...
Espero haber expuesto bien el problema y seguido las normas del foro, gracias.