Buenos días,
Estoy haciendo un proyecto para controlar mi terrario, hasta ahora he conseguido que funcione, pero necesitaría hacer un menú para modificar las temperaturas:
int tempcernoche = 22;
int tempcerdia = 25;
int tempvent=31;
y las horas de encendido y apagado de una lampara
int horaInicio = 8;
int minutoInicio = 30;
int horaFin = 20;
int minutoFin = 30;
He montado 4 pulsadores para poder hacerlo, alguien me puede guiar de como poder hacer el menú, realmente tengo muy poca idea (es el primer proyecto que hago).
Muchas gracias de antemano.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <RTClib.h>
#include <DHT.h>
#include <DallasTemperature.h>
#define DHTPIN 11 //Conectamos el Sensor al pin digital 11
#define DHTTYPE DHT22
#define Botonatras 4
#define Botonarriba 5
#define Botonabajo 6
#define Botonselec 7
const byte pinDatosDQ=8;
const int BOTON = 2;
const int encendidoceramica = 3;
const int encendidovent = 9;
const int encendidoHID= 12;
int tempcernoche = 22;
int tempcerdia = 25;
int tempvent=31;
int val = 0; //val se emplea para almacenar el estado del boton
int state = 0; // 0 LED apagado, mientras que 1 encendido
int old_val = 0; // almacena el antiguo valor de val
boolean (EncHID) ;
//Defino horas Inicio a las 08:30 y termina a las 20:30
int horaInicio = 8;
int minutoInicio = 30;
int horaFin = 20;
int minutoFin = 30;
int momentoInicio = (horaInicio * 60) + minutoInicio;
int momentoFin = (horaFin * 60) + minutoFin;
int botselec = 0;
int estadoselec = 0;
int estadoantselc = 0;
int const numeroElementosMenu=7;
DHT dht(DHTPIN, DHTTYPE);
/* Initialise the LiquidCrystal library. The default address is 0x27
and this is a 20 x 4 line display */
OneWire oneWireObjeto(pinDatosDQ);
DallasTemperature sensorDS18B20(&oneWireObjeto);
byte simbolo_temp[8] = {
0b00000100,
0b00001010,
0b00001010,
0b00001110,
0b00011111,
0b00011111,
0b00001110,
0b00000000,
};
LiquidCrystal_I2C lcd(0x3F,20,4);
RTC_DS3231 RTC;
void setup() {
/* Initialise the LCD */
Serial.begin(115200);
Wire.begin();
lcd.begin(20,4);
dht.begin();
sensorDS18B20.begin();
//RTC.begin();
//RTC.adjust(DateTime(__DATE__, __TIME__));
if (RTC.lostPower()) {
RTC.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
lcd.createChar(0,simbolo_temp);
pinMode(encendidoceramica,OUTPUT);//Enciende Ceramica
pinMode(encendidovent,OUTPUT);//Arranca ventilador
pinMode(encendidoHID,OUTPUT);//Control Lampara HID
pinMode(BOTON, INPUT);//boton encendido lcd
pinMode(Botonatras, INPUT);
pinMode(Botonarriba, INPUT);
pinMode(Botonabajo, INPUT);
pinMode(Botonselec, INPUT);
lcd.clear();
}
/* Main program loop */
void loop() {
int hum = dht.readHumidity(); // Lee la humedad
int temp= dht.readTemperature(); //lee Temp
sensorDS18B20.requestTemperatures();//lee Temp
DateTime now = RTC.now(); //obtiene datos del modulo RTC
int momentoAhora = (now.hour()* 60) + now.minute();
val= digitalRead(BOTON); // lee el estado del Boton
if ((val == HIGH) && (old_val == LOW)){
state=1-state;
delay(10);
}
old_val = val; // valor del antiguo estado
if (state==1){
lcd.backlight(); // enciende el LED
}
else{
lcd.noBacklight(); // apagar el LED
}
lcd.setCursor(0, 3);
if (now.hour()<=9)
{
lcd.print("0");
}
lcd.print(now.hour(), DEC); //imprime hora
lcd.print(':');
if (now.minute()<=9){
lcd.print("0");
}
lcd.print(now.minute(), DEC); //imprime minutos
lcd.setCursor(9, 2);
lcd.print("CER: ");
if ((temp<tempcernoche)||((temp<tempcerdia)&& ((momentoInicio <= momentoAhora) && (momentoAhora < momentoFin)))) { //Enciende ceramica
digitalWrite(encendidoceramica, HIGH);//Enciende ceramica
lcd.print("ON ");
} else {
digitalWrite(encendidoceramica, LOW);
lcd.print("OFF ");
}
lcd.setCursor(0, 3);
lcd.setCursor(0, 0);
lcd.print("T1:");
lcd.print((char)0);
lcd.print(temp);// temperatura DHT22
lcd.print((char)223);
lcd.print("C");
lcd.setCursor(9, 0);
lcd.print("T2:");
lcd.print((char)0);
lcd.print(sensorDS18B20.getTempCByIndex(0));
lcd.print((char)223);
lcd.print("C");
lcd.setCursor(0, 1);
lcd.print("H: ");
lcd.print(hum);//humedad DHT11
lcd.print("%");
lcd.setCursor(9, 1);
lcd.print("VENT: ");
if (temp>=tempvent){ //Arranca ventilador
digitalWrite(encendidovent, HIGH);
lcd.print("ON ");
}
else{
digitalWrite(encendidovent, LOW);
lcd.print("OFF");
}
lcd.setCursor(0, 2);
lcd.print("HID: ");
//Esto es que si hemos pasado o estamos en el momento de inicio , pero antes del momento del fin…
if ((momentoInicio <= momentoAhora) && (momentoAhora < momentoFin)) {
//devolver "Cierto" en esta función "esHora"
digitalWrite(encendidoHID, HIGH);
lcd.print("ON ");
}
else {
//devolver "Falso" en esta función "esHora"
digitalWrite(encendidoHID, LOW);
lcd.print("OFF ");
return false;
}
}