Desfase envio de datos a serivdor

Hola a todos, soy nuevo en arduino y estoy montando un proyecto para hacer pruebas y subir la temperatura de mi habitación a un servidor web del que dispongo, dicho servidor es un VPS completamente vacio en el que solo estoy, ahora mismo, haciendo estas pruebas.

Al código le hago un delay de 10 minutos para volver a subir la temperatura y esto es lo que me encuentro al cabo de un rato.

Me encuentro con un desfase de tiempo, también anoche, probé a subir un "hola" a la base de datos cada hora, y las 4 de la mañana se la saltó.

Dispongo de un arduino mega y la shield de ethernet, la sonda de temperatura es la DS18B20, lo que hago es obtener las medidas de la sonda y las mando a la web por un metodo GET.

Alguien sabe a que se debe este desfase?

Gracias!

Sin poner el código, poco se te puede ayudar, pero así, como para empezar, yo evitaría el uso del delay, y mucho más siendo de 10 minutos. Prueba a cambiarlo por millis. El ejemplo "blink without delay" te puede servir para entender cómo hacerlo.

Tienes razón compañero, voy a poner el código para que pueda ser mucho más fácil y comprensible.

//Se importan las librerías
#include <Ethernet.h>
#include <SPI.h>
#include <OneWire.h> 
#include <DallasTemperature.h>

#define Pin 2 //Se declara el pin donde se conectará el pin de la sonda

OneWire ourWire(Pin); //Se establece el pin declarado como bus para la comunicación OneWire

DallasTemperature sensors(&ourWire); //Se instancia la librería DallasTemperature

byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFF, 0xEE}; // Direccion MAC
byte ip[] = { 10,0,0,100 }; // Direccion IP del Arduino
byte server[] = { 92,xxx,xxx,xxx }; // Direccion IP del servidor
EthernetClient client;

float temperatura;

int analog_pin = 0;

void setup(void) {
  Serial.begin(9600);
  sensors.begin(); //Se inician los sensores
  Ethernet.begin(mac, ip); // Inicializamos el Ethernet Shield
  delay(1000); // Esperamos 1 segundo de cortesia
}
 
void loop(void) {
sensors.requestTemperatures(); //Prepara el sensor para la lectura

  if (client.connect(server, 80)>0) {  // Conexion con el servidor
    client.print("GET /arduino/datos.php?valor="); // Enviamos los datos por GET
    client.print(sensors.getTempCByIndex(0));
    client.println(" HTTP/1.0");
    client.println("User-Agent: Arduino 1.0");
    client.println();
    Serial.println("Conectado");
  } else {
    Serial.println("Fallo en la conexion");
  }
  if (!client.connected()) {
    Serial.println("Disconnected!");
  }
  client.stop();
  client.flush();
  delay(600000); // Espero 10 minutos antes de tomar otra muestra
}

Muchas gracias, voy a ver también lo que me comentas.

Un saludo.

Elimina esto

  delay(600000); // Espero 10 minutos antes de tomar otra muestra

jamas en un código uses semejante delay 10601000
en su reemplazo usa millis()
ve el ejemplo de blink sin delay del IDE.

Hola, ya veo que estais todos de acuerdo en que el fallo proviene de ese lugar, mañana mismo lo soluciono y os comento! Gracias!

Hola, lo he puesto así:

#include <Ethernet.h>
#include <SPI.h>
 #include <OneWire.h> //Se importan las librerías
#include <DallasTemperature.h>
// Configuracion del Ethernet Shield

#define Pin 2 //Se declara el pin donde se conectará la DATA
long millis_anteriores = 0; 
long intervalo = 600000; 
OneWire ourWire(Pin); //Se establece el pin declarado como bus para la comunicación OneWire

DallasTemperature sensors(&ourWire); //Se instancia la librería DallasTemperature

byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFF, 0xEE}; // Direccion MAC
byte ip[] = { 10,0,0,100 }; // Direccion IP del Arduino
byte server[] = { 92,222,26,217 }; // Direccion IP del servidor
EthernetClient client;
float temperatura;
int analog_pin = 0;

void setup(void) {
  Serial.begin(9600);
  sensors.begin(); //Se inician los sensores
  Ethernet.begin(mac, ip); // Inicializamos el Ethernet Shield
  delay(1000); // Esperamos 1 segundo de cortesia
}
 
void loop(void) {
  
     unsigned long millis_actuales = millis();
 
  if(millis_actuales - millis_anteriores > intervalo) {
    // almacena la ultima vez que parpadeo el LED
    millis_anteriores = millis_actuales;  

sensors.requestTemperatures(); //Prepara el sensor para la lectura

  if (client.connect(server, 80)>0) {  // Conexion con el servidor
    client.print("GET /arduino/datos.php?valor="); // Enviamos los datos por GET
    client.print(sensors.getTempCByIndex(0));
    client.println(" HTTP/1.0");
    client.println("User-Agent: Arduino 1.0");
    client.println();
    Serial.println("Conectado");
  } else {
    Serial.println("Fallo en la conexion");
  }
  if (!client.connected()) {
    Serial.println("Disconnected!");
  }
  client.stop();
  client.flush();
}}

lo puse a las 9 y 27, y me ha hecho bien, el 9-27, 9.37 pero las 9.47 y 9.57 no las ha puesto...

Gracias.

todos los millis son unsigned long. no quiero decir que el problema vebga de aqui, pero evita un posible problema. yo tengo un problema parecido con un programa que almacena datos en una sd.si le pido que grabe cada hora solo lo hace la primera vez. si le pongo cada 30 minutos lo hace perfecto.

pues no se que solución darle, la vida de mis peces está en peligro cuando ponga el termostado conectado al termometro xD

ahora por ejemplo, en una pruebas, no me ha enviado la medida de las 17:20

Y a quien se le ocurre probar sobre animales vivos? Debes probarlo fuera del acuario en tiempos mas cortos y mas repetitivos para poder comprobar su funcionamiento sin aburrirte entre lapsos de tiempo.

Ahora veo que tu programa no hace nada entre lapsos de 10 min de modo que da igual como estaba hecho con delay(10601000) y ahora usando millis()
Cambie algunas cosas menores. Pruebalo fuera del acuario por favor.

#define Pin 2 //Se declara el pin donde se conectará la DATA
unsigned long millis_anteriores = 0; 
unsigned long millis_actuales 0;
unsigned long intervalo = 600000; 
OneWire ourWire(Pin); //Se establece el pin declarado como bus para la comunicación OneWire

DallasTemperature sensors(&ourWire); //Se instancia la librería DallasTemperature

byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFF, 0xEE}; // Direccion MAC
byte ip[] = { 10,0,0,100 }; // Direccion IP del Arduino
byte server[] = { 92,222,26,217 }; // Direccion IP del servidor
EthernetClient client;
float temperatura;
int analog_pin = 0;


void setup(void) {
  Serial.begin(9600);
  sensors.begin(); //Se inician los sensores
  Ethernet.begin(mac, ip); // Inicializamos el Ethernet Shield
  delay(1000); // Esperamos 1 segundo de cortesia
  millis_anteriores = millis();
}

void loop(void) {

	if 	(millis() - millis_anteriores > intervalo) {   	// almacena la ultima vez que parpadeo el LED
       	millis_anteriores =  millis();  				// se ejecuta cada vez que superamos intervalo
		sensors.requestTemperatures(); //Prepara el sensor para la lectura
	  	
	  	if (client.connect(server, 80)>0) {  // Conexion con el servidor
	    	client.print("GET /arduino/datos.php?valor="); // Enviamos los datos por GET
	    	client.print(sensors.getTempCByIndex(0));
		    client.println(" HTTP/1.0");
		    client.println("User-Agent: Arduino 1.0");
		    client.println();
		    Serial.println("Conectado");
	    } 
	    else {
	    	Serial.println("Fallo en la conexion");
	    }

		if (!client.connected()) {
		  	Serial.println("Disconnected!");
		}

		client.stop();
		client.flush();
	}
}

Hola compañeros, despues de un accidente, vuelvo al ataque a continuar, no desaparecí por gusto... estoy probando lo del compañero surbyte y me da el siguiente error: temp.ino:10:31: error: expected initializer before numeric constant.

No se que puede estar pasando ya que si copio el codigo que puse aqui originalmente no da ningun problema.
Sigo investigando.