Sono riuscito a impostare i menu principali, ma non riesco a creare i sottomenu. Ecco il codice:
//Includi librerie
#include <WProgram.h>
#include <Wire.h>
#include <DS1307.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
#include "AnalogButtons.h"
#define ANALOG_PIN 1
//Dichiara le vaie cose
int button_pin = 1;
int button_enter_state = 0;
int button_exit_state = 0;
int button_right_state = 0;
int button_left_state = 0;
int button_value;
float temp;
int temp_pin = 0;
unsigned int cont_pag = 0;
long previousMillis = 0;
long interval = 0;
int led_pin = 13;
byte array_left[8] = {
B00001,
B00011,
B00111,
B01111,
B00111,
B00011,
B00001,
B00000,
};
byte array_right[8] = {
B10000,
B11000,
B11100,
B11110,
B11100,
B11000,
B10000,
B00000,
};
void setup() {
//Impostazioni di SETUP
lcd.createChar(0, array_left);
lcd.createChar(1, array_right);
pinMode(button_pin, INPUT);
pinMode(led_pin, OUTPUT);
lcd.begin(16, 2);
}
void loop() {
button_enter_state = LOW;
button_exit_state = LOW;
button_right_state = LOW;
button_left_state =LOW;
button_value = analogRead(button_pin);
if(button_value > 944 && button_value < 947){
button_left_state = HIGH;
}
else if(button_value > 965 && button_value < 971){
button_right_state = HIGH;
}
else if(button_value > 988 && button_value < 993){
button_enter_state = HIGH;
}
else if(button_value > 999 && button_value < 1003){
button_exit_state = HIGH;
}
if(button_exit_state == HIGH && button_right_state == LOW && button_left_state == LOW && button_enter_state == LOW && millis() - previousMillis > interval + 250 ){
cont_pag = 0; //Se premo tasto EXIT torna al menu base
}
if(button_right_state == HIGH && button_left_state == LOW && button_exit_state == LOW && button_enter_state == LOW && millis() - previousMillis > interval + 250 ){
previousMillis = millis();
cont_pag++; //Se premo PIU incrementa numero pagina
if(cont_pag == 4){
cont_pag = 1; //Se incremento a più di 3(4) portami al primo menu (non il menu base)
}
}
else if(button_left_state == HIGH && button_right_state == LOW && button_exit_state == LOW && button_enter_state == LOW && millis() - previousMillis > interval + 250 ){
previousMillis = millis();
cont_pag--; //Se premo MENO diminuisci numero pagina
if(cont_pag == 0){
cont_pag = 3; //Se incremento a menodi 1(0) portami al terzo menu
}
}
switch (cont_pag) {
case 0: //Se il numero della pagina è su menu base
temp = analogRead(temp_pin);
temp = (5.0 * temp * 100.0)/1024.0;
if(cont_pag == 0 && millis() - previousMillis > interval + 1000){
previousMillis = millis();
lcd.setCursor(0, 0);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(1, 0);
lcd.print(RTC.get(DS1307_HR,true));
lcd.setCursor(3, 0);
lcd.print(":");
lcd.setCursor(4, 0);
lcd.print(RTC.get(DS1307_MIN,false));
lcd.setCursor(10, 0);
lcd.print(RTC.get(DS1307_DATE,false));
lcd.setCursor(12, 0);
lcd.print("/");
lcd.setCursor(13, 0);
lcd.print(RTC.get(DS1307_MTH,false));
lcd.setCursor(2, 1);
lcd.print("Temp:");
lcd.setCursor(7, 1);
lcd.print(temp);
lcd.setCursor(13, 1);
lcd.print("C");
}
break;
case 1: //Se il numero della pagina è sul primo menu
lcd.setCursor(0, 0);
lcd.print(" LUCE SUMP ");
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.write(0);
lcd.setCursor(15, 1);
lcd.write(1);
break;
case 2: //Se il numero della pagina è sul secondo menu
lcd.setCursor(0, 0);
lcd.print(" RABBOCCO POMPA ");
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.write(0);
lcd.setCursor(15, 1);
lcd.write(1);
break;
case 3: //Se il numero della pagina è sul terzo menu
lcd.setCursor(0, 0);
lcd.print(" POMPA SUMP ");
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.write(0);
lcd.setCursor(15, 1);
lcd.write(1);
}
}
Lo schema logico di funzionamento è già stato postato nel secondo messaggio(
http://img85.imageshack.us/img85/6141/menuef.jpg)
Qualcuno protrebbe provare un sottomenu che funzioni implementato nel codice, poi ci penserò io ad applicarlo a tutti i sottomenu. Ciao a tutti.
Andrea