[SOLUCIONADO] Pachube y sensor de temperatura

Ahora lo que creo es que de alguna manera el dato pasa correctamente al monitor serie de arduino, pero se manda erroneamente a pachube... es raro, por que el valor va en la misma variable tempValor, no??

Yo he modificado algo el codigo, porque en el original usan una entrada analogica para el sensor, y mi sensor, el ds1820, usa una digital, la 9... este es el mio:

/*=======================================================================================================
Enerzuul - http://www.enerzuul.es 
V.0.1 - Marzo, 2010 (Solamente lectura sensor temperatura)

Envio de datos de lectura de sensores hacia Pachube.
Modificación del código original de Pachube (www.pachube.com) ethernet_Pachube_input_output_1_1 para adaptarlo a la lectura
de la temperatura y el consumo de energía. El sketch original puedes encontrarlo en 
  http://community.pachube.com/files/ethernet_Pachube_input_output_1_1.zip
Este sketch esta disponible en : 
  http://www.enerzuul.es/?p=570
  
Lo hemos ha probado con la version 0017 de Arduino

Es necesario revisar los datos siguientes para personalizarlos según los datos de tu cuenta en Pachube y de tu red:
    SHARE_FEED_ID --> El identificador de tu feed en Pachube
    PACHUBE_API_KEY --> La clave API de tu cuenta en Pachube
    byte mac[] --> La direccion MAC para la placa Arduino , sólo si no funciona con esta.
    byte ip[] --> La dirección IP que daras a la placa Arduino
    byte gateway[] --> La dirección del router
    byte subnet[] --> La mascara de red 
    
Mas consejos sobre el blog de enerzuul : http://www.enerzuul.es
======================================================================================================== */

#include <Ethernet.h>
#include <string.h>
#include <SPI.h>

#include <OneWire.h>
 

OneWire ds(9);
 

#define SHARE_FEED_ID              54356     // Aqui debes indicar el identificador del feed donde quieres subir los datos 
#define REMOTE_FEED_ID             256      // NO USADO AQUI. Si quieres recuperar datos de otro feed deberias indicar aqui su identificador
#define REMOTE_FEED_DATASTREAMS    0        // NO USADO AQUI. Aqui indicamos el tamaño del Array si necesitamos leer valores remotamente
#define UPDATE_INTERVAL            10000    // Tiempo de espera entre envios en milisegundos (no debe ser inferior a 5 seg , es decir 5000)
#define RESET_INTERVAL             10000    // Tiempo de espera entre re-intentos de envio cuando ha ocurrido un error (no debe ser inferior a 5 seg , es decir 5000)

#define PACHUBE_API_KEY            "S81yMS-3wJ7ogIXHgtjdL1ZARi6SAKw1QmkvM0trQ0dTRT0g"// Indica aqui el código de tu API entre comillas

byte mac[] = { 0x00, 0xAA, 0x00, 0xAA, 0x00, 0xAA }; // Una direccion MAC . Cualquiera es valida si no existe ya dentro de tu red !
byte ip[] = { 192, 168, 1, 93 };                     // La direccion IP que quieres asignar a la placa Arduino Ethernet Shield
byte gateway[] = { 192, 168, 1, 1 };                 // La direccion de tu router en la red 
byte subnet[] = { 255, 255, 255, 0 };                // La mascara de red
byte remoteServer[] = { 173,203,98,29 };            // Esta es la direccion IP del servidor remote de Pachube. NO TOCAR

float remoteSensor[REMOTE_FEED_DATASTREAMS];        // we know that feed 256 has floats - this might need changing for feeds without floats

int pinTemperatura = 2;                             // Damos un nombre al pin de entrada analógica 2 (pin donde conectamos el sensor de temperatura)
float tempValor ;                                     // La variable donde guardaremos la temperatura para enviar o visualizar
int kwhValor ;                                      // La variable donde guardaremos el consumo de energia


extern volatile unsigned long timer0_overflow_count;
float fanalog0;
int analog0;
unsigned long tiempo;
byte serialByte;




void setup()
{
  Serial.begin(9600); 
  setupEthernet(); 
}


//Declararemos varias funciones para simplificar el codigo
 

void buscasensor (byte direccion[8])  //  Rutina de búsqueda de la dirección del sensor
 {
 
  if(!ds.search(direccion))  //  Si no encuentra ningun sensor
  {
   
     ds.reset_search();  //  Se reinicia la busqueda de los sensores
     delay(250);         //  Espera de 250ms
     
  }
   
 }
 

void convert (byte* direccion)  //  Rutina que inicia la conversion del Ds1820
 {
 
  ds.reset();            //  Se resetea el canal de comunicaciones
  ds.select(direccion);  //  Se selecciona de nuevo el sensor
  ds.write(0x44,1);      //  Se escribe un 1 en la direccion 0x44h para que comience la conversion, deja el bus a PullUP
  delay (1000);          //  Una espera de un 1000ms para que no haya conflictos
 

}
 

void leerScratchpad (byte* direccion, byte* datos)  //  Rutina que lee el Scratchpad
 {
 
  ds.reset();            //  Se resetea el canal de comunicaciones
  ds.select(direccion);  //  Se selecciona de nuevo el sensor
  ds.write(0xBE);        //  Se escribe un 1 en la direccion 0x44h para que comience la conversion
  for (byte i=0; i<9; i++)  //  Hasta 9 por que la Scratchpad tiene 9 bytes
    {
      datos[i]=ds.read();
    }
   
 }
 

float leeTemp(byte* direccion)  //  Rutina que devuelve la lectura de la temperatura en grados centigrados
 {
 
   int TempR;
   byte datos [9];
   
   convert (direccion);  //  Se hace la llamada a la funcion convert para iniciar la conversion
   
   leerScratchpad(direccion, datos);  // Se lee el Scratchpad
 
   TempR = datos [0];  // Se mueve a tr el valor de los 8 bits menos significativos
 

 if (datos[1] > 0x80)    //  Se comprueba para datos negativos, si los 8 bits mas significativos son mayores que 0x80 es decir alguno a 1
   {
     TempR=!TempR + 1;          // Se hace el complento a dos, como pone el datasheet
     TempR = TempR * (-1);      // Se le cambia el signo a tr para que salga negativo posteriormente
   }
 

int CPC = datos [7];  // Se define el COUNTER PER C esta en la direccion 10h
 int CR = datos [6];   // se define el COUNT REMAIN 0Ch
 

TempR = TempR >> 1;  //  Se desplaza el registro completo para "truncar" el bit0 de los datos de la temperatura
 

return TempR - (float)0.25 + (CPC - CR)/(float)CPC;  //  Formula obtenida del datasheet
 
 }





void loop()
{
  
  byte direccion [8];
   float temp;
   
   buscasensor (direccion);
   
   temp = leeTemp (direccion);  // Se hace la llamada a la funcion que lee la temperatura del sensor
   
   Serial.println(temp);
  
  
  // Lectura de la energia consumida. Por el momento enviamos un valor 0
     kwhValor = 0;
  
  
    tempValor = temp;

  // Ahora imprimimos el valor en el puerto serie donde podremos monitorizarlo para saber que todo va bien.
     Serial.print("Temperatura (Celsius) = ");Serial.println(tempValor);
  
  // Envio de los datos a Pachube usando la funcion pachube_in_out (ver solapa pachube_functions).
     pachube_in_out();
  
  // Esperamos 10 segundos antes de entrar de nuevo en el bucle y volver a leer los sensores
     delay (10000);
}