Buenas noches.
Hoy es un buen día para mi. He realizado mi primer proyecto y funciona, bueno a medias.
Estoy leyendo cuatro DS18B20 con una pantalla LCD 5v 2004A-V1 20x4 con puerto I2C y se encienden unos leds, también uso unos relés para comandar unos ventiladores con una determinada temperatura.
En la pantalla los primeros dígitos de las dos primeras líneas se apagan y encienden (no se quedan fijos) y la temperatura de dos de las líneas marca la temperatura de uno de los DS18B20. Sin embargo los cuatro DS18B20 funcionan perfectamente ya que los leds y relés funcionan correctamente y se apagan y encienden cuando les toca.
Os paso el código para ver si me podéis ayudar. Ya que yo soy incapaz de buscar el error.
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensor (&oneWire);
LiquidCrystal_I2C lcd(0X27, 20, 4);
int led = 5;
int ventilador = 6;
float temperatura;
bool ventilador_activado = false;
int temperatura_limite = 24;
int led1 = 7;
int ventilador1 = 8;
float temperatura1;
bool ventilador1_activado = false;
int temperatura1_limite = 24;
int led2 = 9;
int ventilador2 = 10;
float temperatura2;
bool ventilador2_activado = false;
int temperatura2_limite = 24;
int led3 = 11;
int ventilador3 = 12;
float temperatura3;
bool ventilador3_activado = false;
int temperatura3_limite = 24;
void setup() {
pinMode (ventilador, OUTPUT);
pinMode (ventilador1, OUTPUT);
pinMode (ventilador2, OUTPUT);
pinMode (ventilador3, OUTPUT);
pinMode (led, OUTPUT);
pinMode (led1, OUTPUT);
pinMode (led2, OUTPUT);
pinMode (led3, OUTPUT);
lcd.init();
lcd.backlight();
}
void loop() {
sensor.requestTemperatures();
temperatura = sensor.getTempCByIndex(0);
float temp = sensor.getTempCByIndex(0);
lcd.setCursor (1, 0 );
lcd.print("EPSOLAR: ");
lcd.print(temp);
lcd.print(" ");
temperatura1 = sensor.getTempCByIndex(1);
float temp1 = sensor.getTempCByIndex(1);
lcd.setCursor (1, 1 );
lcd.print("VICTRON: ");
lcd.print(temp1);
lcd.print(" ");
temperatura2 = sensor.getTempCByIndex(2);
float temp2 = sensor.getTempCByIndex(2);
lcd.setCursor (1, 2 );
lcd.print("TENSION: ");
lcd.print(temp2);
lcd.print(" ");
temperatura3 = sensor.getTempCByIndex(3);
float temp3 = sensor.getTempCByIndex(3);
lcd.setCursor (1, 3 );
lcd.print("TV : ");
lcd.print(temp2);
lcd.print(" ");
if (temperatura > temperatura_limite) {
digitalWrite(led, HIGH);
digitalWrite(ventilador, LOW);
ventilador_activado = true;
} else {
digitalWrite(led, LOW);
digitalWrite(ventilador, HIGH);
ventilador_activado = false;
}
if (temperatura1 > temperatura1_limite) {
digitalWrite(led1, HIGH);
digitalWrite(ventilador1, LOW);
ventilador1_activado = true;
} else {
digitalWrite(led1, LOW);
digitalWrite(ventilador1, HIGH);
ventilador1_activado = false;
}
if (temperatura2 > temperatura2_limite) {
digitalWrite(led2, HIGH);
digitalWrite(ventilador2, LOW);
ventilador2_activado = true;
} else {
digitalWrite(led2, LOW);
digitalWrite(ventilador2, HIGH);
ventilador2_activado = false;
}
if (temperatura3 > temperatura3_limite) {
digitalWrite(led3, HIGH);
digitalWrite(ventilador3, LOW);
ventilador3_activado = true;
} else {
digitalWrite(led3, LOW);
digitalWrite(ventilador3, HIGH);
ventilador3_activado = false;
}
}