DS18B20 con indicadores LED

Hola
Trasteando un poco, he preparado un termómetro con un DS18B20 y tres led (rojo, verde y azul). Uso un Arduino Mega 2560. Os dejo el código:

////////////////////////////////////////////
//// Termómetro con indicador LED de Tª ////
////////////////////////////////////////////

/*
Uso un Arduino Mega con un sensor DS18B20 e indico la Tª mediante tres leds,
uno rojo para valor superior a 25º, uno azul para valor menor a 20º y otro verde
para valor entre 21º y 24º.
*/

#include <OneWire.h>	// Libreria temperatura
#include <DallasTemperature.h>	// Libreria temperatura

// Conectamos el sensor al pin 7 de Arduino
//#define PIN_P_TEMPER 7
#define ONE_WIRE_BUS 7

// Setup de onewire para que se comunique con dispositivos OneWire
//OneWire oneWire(PIN_P_TEMPER);
OneWire oneWire(ONE_WIRE_BUS);

// Pasamos le referencia de OneWire a Dallas Temperature
DallasTemperature sensors(&oneWire);

   int ledAPin = 8;	// Pin al que esta conectado el led Azul 
   int ledVPin = 9;	// Pin al que esta conectado el led Verde  
   int ledRPin = 10;	// Pin al que esta conectado el led Rojo
   int contador = 0;	// 

void setup(void)
{
  // Iniciar los leds
  pinMode(ledAPin, OUTPUT);
  pinMode(ledVPin, OUTPUT);
  pinMode(ledRPin, OUTPUT);
  pinMode(ONE_WIRE_BUS, INPUT);
  
  //Iniciar el puerto de comunicacion
  Serial.begin(9600);
  Serial.println("Control de Temperatura");
  sensors.begin();  // Inicio el controlador de DS18B20
} 
  float val = 0; // Importate usar el float para obtener la temperatura en formato ºC y NN,NN
 
 
void loop(void)
{
  Serial.println(" Cº Temperatura - ");
  sensors.requestTemperatures(); // Send the command to get temperatures
  Serial.print(sensors.getTempCByIndex(0));
  Serial.print("   ");
     
  float val =  sensors.getTempCByIndex(0) ; // Almacenar la temperatura
      
  if (val < 20)
   {
     digitalWrite(ledAPin, HIGH);
     digitalWrite(ledVPin, LOW);
     digitalWrite(ledRPin, LOW);
   }
      
  if (val < 24 && val > 26) 
   {
     digitalWrite(ledAPin, LOW);
     digitalWrite(ledVPin, HIGH);
     digitalWrite(ledRPin, LOW);
   }
        
  if (val > 24)
   {
     digitalWrite(ledAPin, LOW);
     digitalWrite(ledVPin, LOW);
     digitalWrite(ledRPin, HIGH);
   }
 
  delay(4000);  // Actualizar cada 4 segundos
 
}

El problema es que no indica Tº alguna, el Serial Monitor siempre indica 0,00º. Y se enciende el led azul, al menos eso lo hace bien ...

Hola, yo he hecho lo mismo pero con 3 sensores conectados, y dos leds en lugar de tres, pero es muy parecido al tuyo, por no decir que básicamente igual. Para que se te vea la temperatura creo que en lugar de mostrar

Serial.print(sensors.getTempCByIndex(0));

deberías primero hacer lo siguiente:

float val = sensors.getTempCByIndex(i); // Almacenamos la temperatura en la variable val
Serial.println(val); //Mostramos por puerto serie el valor de la temperatura leída

A mi así me muestra perfectamente la temperatura de los 3 sensores, en lugar de poner i dentro de sensors.getTempCBIndex pones 0 en tú caso, yo tengo la i porque trabajo con 3 sensores y varia entre 0 y 2. Espero que se te solucione el problema, en breve subiré a tallerarduino.wordpress.com dicho programa y un video de funcionamiento. Un saludo

Gracias Regata, pero sigo igual .... creo que el fallo esta en la conexion del Pin, lo conecto al pin 7 PWM ... Esque ni los ejemplos de la libreria me registran Tª alguna, siempre 0,00

Pues yo tengo todo el código muy parecido al tuyo, lo único es que lo tengo conectado a un arduino uno y al pin 10, y en el void setup no tengo puesto el pinMode(ONE_WIRE_BUS,Input);, el resto es pràcticamente igual.

¿Como tienes conectado el sensor? Yo lo conecto VCC a 5v del arduino, GND a masa de arduino y una resistencia de 4k99 a 5V y a DQ (no tenia de 4k7). Si no es por nada de esto quizás este estropeado el sensor, yo tengo tres puestos probando y me marcan perfectamente la temperatura.

Lo tengo conectado como en esta pag
http://openenergymonitor.org/emon/buildingblocks/DS18B20-temperature-sensing

Solo pongo uno, para este caso solo necesito uno.

En esa misma página hacen referencia al software de ejemplo de la librería. ¿Has probado antes con ese ejemplo?

http://milesburton.com/Dallas_Temperature_Control_Library#The_Library

La principal diferencia con el tuyo es que utiliza otro pin y no lo define como entrada (no hace pinMode - como ya te ha comentado Regata).

Si el ejemplo no te funciona, comprueba que has conectado el sensor en modo parásito (Vcc conectado a tierra).

Si, he probado con ese y con alguno más, y nada 0,0.

He comentado la linea que comentas //pinMode.... y nada

Y sí, esta conectado en modo parásito, con un puente que une Vcc a GND, y nada ...

Voy a ver si en la tienda de electrónica tienen sensores y pillo algunos más para probar. Pero ya seria mala leche que los dos que tengo esten mal

Yo no lo tengo conectado de esa forma, tengo conectado VDD a los 5V del Arduino, GND al GND de Arduino y el DQ como lo tenéis conectado, con su resistencia de 4k7 a 5V y al pin del arduino.

Edito: He probado ahora a conectarlos del modo parásito y me funciona perfectamente, con los pines VDD y GND puenteados a GND del Arduino. A veces me marcaba 0,00º y otras -127º o 85º y era debido al mal contacto que hacian los DS18B20 con la protoboard, inclinandolos un poco ya hace perfecto el contacto y funciona de maravilla.