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 ...