salve a tutti,
spero di non aver sbagliato qualche sosa sul caricare il mio primo codice qui...
Sto cercando di creare un progetto sketch, una lavatrice. Sto usando la programmazioni a stati, ho creato un menu' principale il tutto comandato da un encoder (codice che devo perfezionare).
il mio problema sono i sotto menu, non riesco a farlo funzionare, entro nel sottomenu creato anchesso con swtch case ma se provo a selezionare mi esce fuori nel menu principale.
vi posto il codice
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
// Caratteri LCD
byte freccia[8] = {B00000, B01110, B01110, B01110, B11111, B01110, B00100};
byte pallino[8] = {B00000, B00000, B00110, B01111, B01111, B00110, B00000};
//void LavaggioRapido();
const int upButton = 3;
const int downButton = 2;
const int selectButton = 8;
int stato = 1 ;
int stopstato = 4;
int start = 5;
int pin2=9; //Entrada 2 del L293D
int pin7=10; //Entrada 7 del L293D
int buzzer=12; //buzzer
void setup() {
Serial.begin(9600);
lcd.begin(20,4);
lcd.backlight();
lcd.createChar(0, pallino);
lcd.createChar(1, freccia);
pinMode(upButton, INPUT_PULLUP);
pinMode(downButton, INPUT_PULLUP);
pinMode(selectButton, INPUT_PULLUP);
pinMode(stopstato, INPUT);
pinMode(start, INPUT);
pinMode(53, OUTPUT);
lavaggiMenu();
}
}
void loop() {
if (!digitalRead(downButton)){
//delay(50);
stato++;
lavaggiMenu();
delay(100);
while (!digitalRead(downButton));
}
if (!digitalRead(upButton)){
delay(100);
stato--;
lavaggiMenu();
delay(100);
while(!digitalRead(upButton));
}
if (!digitalRead(selectButton)){// tasto encoder seleziona
lavaggiMenu();
scelta();
delay(100);
while (!digitalRead(selectButton));
}
}
//funzione menu programmi lavaggi
void lavaggiMenu() {
switch (stato) {
case 0:
stato = 1;
break;
case 1:
lcd.clear();
lcd.setCursor(0, 0);lcd.write(byte(0));
lcd.setCursor(2, 0);lcd.print("LAVAGGIO RAPIDO");
lcd.setCursor(2, 1);lcd.print("LAVAGGIO LENTO");
lcd.setCursor(2, 2);lcd.print("LAVAGGIO DELICATI");
lcd.setCursor(2, 3);lcd.print("LAVAGGIO ECO");
break;
case 2:
lcd.clear();
lcd.setCursor(0,1);lcd.write(byte(0));
lcd.setCursor(2, 0);lcd.print("LAVAGGIO RAPIDO");
lcd.setCursor(2, 1);lcd.print("LAVAGGIO LENTO");
lcd.setCursor(2, 2);lcd.print("LAVAGGIO DELICATI");
lcd.setCursor(2, 3);lcd.print("LAVAGGIO ECO");
break;
case 3:
lcd.clear();
lcd.setCursor(0, 2);lcd.write(byte(0));
lcd.setCursor(2, 0);lcd.print("LAVAGGIO RAPIDO");
lcd.setCursor(2, 1);lcd.print("LAVAGGIO LENTO");
lcd.setCursor(2, 2);lcd.print("LAVAGGIO DELICATI");
lcd.setCursor(2, 3);lcd.print("LAVAGGIO ECO");
break;
case 4:
lcd.clear();
lcd.setCursor(0, 3);lcd.write(byte(0));
lcd.setCursor(2, 0);lcd.print("LAVAGGIO RAPIDO");
lcd.setCursor(2, 1);lcd.print("LAVAGGIO LENTO");
lcd.setCursor(2, 2);lcd.print("LAVAGGIO DELICATI");
lcd.setCursor(2, 3);lcd.print("LAVAGGIO ECO");
break;
case 5:
lcd.clear();
lcd.setCursor(0, 0);lcd.write(byte(0));
lcd.setCursor(2, 0); lcd.print("risciacquo");
lcd.setCursor(2, 1); lcd.print("Centrifuga");
lcd.setCursor(2, 2); lcd.print("Scarico");
lcd.setCursor(2, 3); lcd.print("Esci");
break;
case 6:
lcd.clear();
lcd.setCursor(0, 1); lcd.write(byte(0));
lcd.setCursor(2, 0); lcd.print("risciacquo");
lcd.setCursor(2, 1); lcd.print("Centrifuga");
lcd.setCursor(2, 2); lcd.print("Scarico");
lcd.setCursor(2, 3); lcd.print("Esci");
break;
case 7:
lcd.clear();
lcd.setCursor(0, 2); lcd.write(byte(0));
lcd.setCursor(2, 0); lcd.print("risciacquo");
lcd.setCursor(2, 1); lcd.print("Centrifuga");
lcd.setCursor(2, 2); lcd.print("Scarico");
lcd.setCursor(2, 3); lcd.print("Esci");
break;
case 8:
lcd.clear();
lcd.setCursor(0, 3);lcd.write(byte(1));
lcd.setCursor(2, 0); lcd.print("risciacquo");
lcd.setCursor(2, 1); lcd.print("Centrifuga");
lcd.setCursor(2, 2); lcd.print("Scarico");
lcd.setCursor(2, 3); lcd.print("Esci");
break;
case 9:
stato = 8;
break;
}
}
// scelta menu
void scelta() {
//int stato = 1;
switch (stato) {
case 1:
LavaggioRapido();
break;
case 2:
LavaggioLento();
break;
case 3:
CapiDelicati();
break;
case 4:
Lavaggioeco();
break;
case 5:
risciacquo();
break;
case 6:
centrifuga();
break;
case 7:
scarico();
break;
case 8:
esci();
break;
}
}
int sez = 20;
void LavaggioRapido() {
if (!digitalRead(downButton)){
sez++;
LavaggioRapido();
delay(100);
while (!digitalRead(downButton));
}
if (!digitalRead(upButton)){
delay(100);
sez--;
LavaggioRapido();
delay(100);
while(!digitalRead(upButton));
}
switch (sez) {
case 20:
lcd.clear();
lcd.setCursor(0, 3); lcd.write(byte(0));
lcd.setCursor(2, 0); lcd.print("LAVAGGIO RAPIDO");
lcd.setCursor(2, 1); lcd.print("55 minuti");
lcd.setCursor(1, 3); lcd.print("Avvio");
lcd.setCursor(16, 3); lcd.print("Esci");
break;
case 21:
lcd.clear();
lcd.setCursor(15, 3); lcd.write(byte(0));
lcd.setCursor(2, 0); lcd.print("LAVAGGIO RAPIDO");
lcd.setCursor(2, 1); lcd.print("55 minuti");
lcd.setCursor(1, 3); lcd.print("Avvio");
lcd.setCursor(16, 3); lcd.print("Esci");
break;}
}
void LavaggioLento() {
lcd.clear();
lcd.print("Lavaggio Lento");
delay(1500);
lavaggiMenu();
}
void CapiDelicati() {
lcd.clear();
lcd.print("Capi Delicati");
delay(1500);
}
void Lavaggioeco() {
lcd.clear();
lcd.print("Centrifuga");
delay(1500);
}
void risciacquo() {
lcd.clear();
lcd.print("Centrifuga");
delay(1500);
}
void centrifuga() {
lcd.clear();
lcd.print("Centrifuga");
delay(1500);
}
void scarico() {
lcd.clear();
lcd.print("Centrifuga");
delay(1500);
}
void esci() {
lcd.clear();
delay(1500);
avvio();
}