// Librerias necesarias
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
//Definiciones que no ocupan espacio de memoria
#define potenciometro 0 // Define el pin al que está conectado el potenciometro
#define pinSensor 3 // Define el pin al que está conectado el sensor
#define Pulsador 5 // Define el pin al que está conectado el pulsador
#define Pwm 9 // Define el pin al que está conectado el LED (debe ser un pin PWM)
#define Rele1 13
#define Rele2 7
// Tipos de variables ocupan determinados bytes en la memoria
int programa = 0;
int estado = 0;
int cuenta = 0;
float temperaturaC = 0;
String nombre[4] = {"Temperatura", "Control", "Temporizador", "Pwm"}; // arreglo
LiquidCrystal_I2C lcd(0x27,16,2); // Crear el objeto lcd dirección 0x27 y 16 columnas x 2 filas
OneWire oneWire(pinSensor); // Crea un objeto para el bus OneWire
DallasTemperature sensors(&oneWire); // Crea un objeto para la librería DallasTemperature
void setup() {
pinMode(Pulsador, INPUT); // Establece el pin digital como entrada
pinMode(Rele1, OUTPUT); // Establece el pin digital como salida
pinMode(Rele2, OUTPUT); // Establece el pin digital como salida
analogWrite(Pwm, 0); // Establece el nivel de brillo usando PWM
lcd.init(); // Inicializar el LCD
lcd.backlight(); // Encender la luz de fondo.
lcd.setCursor(2,0);
lcd.print("Temperatura:");
sensors.begin(); // Inicializa el sensor
}
void Temperatura(){
sensors.requestTemperatures(); // Solicita la lectura de la temperatura
temperaturaC = sensors.getTempCByIndex(0); // Lee la temperatura en grados Celsius y la almacena en la variable
lcd.setCursor(4, 1);
lcd.print(temperaturaC);
lcd.println(" C");
delay(800);
}
void modulacion() {
cuenta = analogRead(potenciometro) / 4;
estado = analogRead(potenciometro) / 10.2;
lcd.setCursor(2, 0);
lcd.print(" PWM: ");
lcd.setCursor(9, 0);
lcd.print(estado);
lcd.println(" %");
analogWrite(Pwm, cuenta);
delay(150);
}
void Control(){
lcd.clear();
delay(150);
while (digitalRead(Pulsador) == LOW){
cuenta = analogRead(potenciometro) / 34;
lcd.setCursor(2, 0);
lcd.print("Control: ");
lcd.print(" ");
lcd.setCursor(13, 0);
lcd.print(cuenta);
}
programa = 5;
delay(200);
}
void Temporizador(){
lcd.clear();
delay(150);
while (digitalRead(Pulsador) == LOW){
cuenta = analogRead(potenciometro) / 17;
lcd.setCursor(0, 0);
lcd.print("Temporizador: ");
lcd.print(" ");
lcd.setCursor(14, 0);
lcd.print(cuenta);
}
programa = 4;
delay(200);
}
void conteo(){
digitalWrite(Rele1, HIGH);
for(cuenta; cuenta >= 1; cuenta--){
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(7, 1);
lcd.print(cuenta);
delay(1000);
}
programa = 2;
digitalWrite(Rele1, LOW);
}
void comparar(){
Temperatura();
if (temperaturaC = cuenta){
digitalWrite(Rele1, LOW);
digitalWrite(Rele2, LOW);
}
if (temperaturaC > cuenta){
digitalWrite(Rele1, HIGH);
digitalWrite(Rele2, LOW);
}
if (temperaturaC < cuenta){
digitalWrite(Rele1, LOW);
digitalWrite(Rele2, HIGH);
}
}
void loop() {
if (digitalRead(Pulsador) == HIGH){
lcd.clear(); // Borra la pantalla
analogWrite(Pwm, 0);
digitalWrite(Rele1, LOW);
while (digitalRead(Pulsador) == HIGH){ // rutina antirebote
delay(100); }
while (digitalRead(Pulsador) == LOW){
lcd.clear();
programa = analogRead(potenciometro) / 341;
lcd.setCursor(2,0);
lcd.println(nombre[programa]);
delay(50);
}
}
switch (programa) {
case 0: Temperatura();
break;
case 1: Control();
break;
case 2: Temporizador();
break;
case 3: modulacion();
break;
case 4: conteo();
break;
case 5: comparar();
break;
}
}Loading
ds18b20
ds18b20