Hi my friend,
I want to automatize my terrarium and I have a problem with the code. I hope that you can help me
I post my code:
//Il circuito è costituito da un Arduino 2009 collegato ad:
//1 - display LCD 16x2 modello Hitachi
//2 - sensore di umidità e temperatura HDT11
//3 - 4 pulsanti con le funzioni di <UP>, <DOWN>, <NEXT>, <OK>
//4 - 2 relè che comanderano rispettivamento un riscaldatore e un umidificatore
#include <LiquidCrystal.h>
#include <Menu.h>
#include <MenuItem.h>
#include <SubMenu.h>
#include <SubMenuItem.h>
#include <dht.h>
// Inizializza display con i PIN ai quali è collegato
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
//Definizione PIN
#define NEXT 10
#define OK 9
#define UP 8
#define DOWN 7
//Variabili globali
int temp = 0;
int hum = 0;
int maxtemp = 0;
int mintemp = 0;
int maxhum = 0;
int minhum = 0;
//Inizializza menù
//Il menù sarà costituito da 4 pagine:
//1 - Home -> nella quale saranno mostrate umidità e temperatura misurate
//2 - Temperatura -> nella quale imposto la minima e la massima
//3 - Umidità -> nella quale imposto la minima e la massima
Menu menu = Menu(menuUsed,menuChanged);
//Inizializza parti del menù
MenuItem Home = MenuItem();
MenuItem Temperature = MenuItem();
SubMenu subMenuTemp = SubMenu(menuChanged);
SubMenuItem Maxt = SubMenuItem();
SubMenuItem Mint = SubMenuItem();
MenuItem Humidity = MenuItem();
SubMenu subMenuHum = SubMenu(menuChanged);
SubMenuItem Maxh = SubMenuItem();
SubMenuItem Minh = SubMenuItem();
void setup() {
Serial.begin(9600);
//Configura pin I/O
pinMode(NEXT, INPUT); //Imposto il pulsante come input
pinMode(OK, INPUT); //Imposto il pulsante come input
pinMode(UP, INPUT); //Imposto il pulsante come input
pinMode(DOWN, INPUT); //Imposto il pulsante come input
//Setta il numero di righe e colonne LCD
lcd.begin(16,2);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("LOADING...");
delay(1000);
lcd.clear();
lcd.setCursor(0,1);
lcd.print("Terrario");
delay(1000);
//Configura menù
menu.addMenuItem(Home);
menu.addMenuItem(Temperature);
Temperature.addSubMenu(subMenuTemp);
subMenuTemp.addSubMenuItem(Maxt);
subMenuTemp.addSubMenuItem(Mint);
menu.addMenuItem(Humidity);
Humidity.addSubMenu(subMenuHum);
subMenuHum.addSubMenuItem(Maxh);
subMenuHum.addSubMenuItem(Minh);
menu.select(0);
subMenuTemp.select(0);
subMenuHum.select(0);
}
void loop(){
//Gestione dei casi
switch (Serial.read()){
case 'a':
if (NEXT == HIGH) {
menu.up();
}
break;
case 'b':
if (DOWN == HIGH){
subMenuTemp.down(); //set index closer to maximum
}
break;
case '0':
menu.select(0);
break;
}
}
void menuChanged(ItemChangeEvent event){
Serial.println("menuChanged");
if( event == &Home ){
Serial.println("\tHome selected"); //user feedback
lcd.setCursor(0,0);
lcd.print("Temp: ");
lcd.print(temp);
lcd.print(" C");
lcd.setCursor(0,1);
lcd.print("Umid: ");
lcd.print(hum);
lcd.print(" %");
}else if( event == &Temperature ){
Serial.println("\tTemperature selected"); //user feedback
}else if( event == &Maxt ){
Serial.println("\tMax selected"); //user feedback
lcd.setCursor(0,0);
lcd.print("Max: ");
lcd.print(maxtemp);
lcd.print(" C");
}else if( event == &Mint ){
Serial.println("\tMin selected"); //user feedback
lcd.setCursor(0,1);
lcd.print("Min: ");
lcd.print(mintemp);
lcd.print(" C");
}else if( event == &Humidity ){
Serial.println("\tHumidity selected"); //user feedback
}else if( event == &Maxh ){
Serial.println("\tMax selected"); //user feedback
lcd.setCursor(0,0);
lcd.print("Max: ");
lcd.print(maxhum);
lcd.print(" %");
}else if( event == &Minh ){
Serial.println("\tMin selected"); //user feedback
lcd.setCursor(0,1);
lcd.print("Min: ");
lcd.print(minhum);
lcd.print(" %");
}
}
void menuUsed(ItemUseEvent event){
Serial.println("menuUsed");
if( event == &Home ){
Serial.println("\tHome used"); //user feedback
}else if( event == &Maxt ){
Serial.println("\tMax used"); //user feedback
}else if( event == &Mint ){
Serial.println("\tMin used"); //user feedback
}else if( event == &Maxh ){
Serial.println("\tMax used"); //user feedback
}else if( event == &Minh ){
Serial.println("\tMin used"); //user feedback
}
}
The library to create a menu is not explain very well. The function "void menuUsed(ItemUseEvent event)" what is it?
Can you check my code, please?
Thank you.