buona sera a tutti.
sto facendo uno switch caseper un lcd 4x20.
per andare al case 1 e 2 valuto due variabili.
quandole variabili sono vere, come riesco a poter accedere al case 3 e 4 usando un pulsante che scorre le 2 variabili e poi torna a quella vera tra 1 e 2
boolean minni = digitalRead(8) ;
if (minni == LOW && old_minni == HIGH) {
lcd_page = 3;
lcd_page = 4;
if (pippo) {
lcd_page = 1;
}
if (pluto) {
lcd_page = 2;
}
Non ho ben capito il tuo problema.
Parli di voler accedere a due case di uno switch che nel codice non è presente. Di cosa hai realmente bisogno?
mi serviva sapere come chiamare
lcd_page = 3 e lcd_page = 4 con un pulsante
anche se
le 2 if che valutano lcd_page = 4 o lcd_page = 3 una di esse sia vera
Dipende se il pulsante ti serve "a stati" o meno ma comunque: se ho capito bene dalla lettura di un pulsante vuoi chiamare lcd_page = 3 e lcd_page = 4 indipendentemente da pippo e pluto.
if (minni == HIGH) {
lcd_page = 3;
lcd_page = 4;
}
Ho capito bene?
si, hai capito bene , il pulsante mi serve a stati quindi cosi
1 pressione lcd_page = 3;
2 pressione lcd_page = 4;
3 pressione o lcd_page1 0 lcd_page 2
Per fare ciò da te richiesto devi usare 3 differenti pulsanti e 3 differenti ingressi digitali oppure 3 differenti pulsanti ed un solo ingresso analogico (nel caso avessi una disponibilità di pin ridotta).
ok, vedo di limitarlo solo a 1 cosi forse mi salvo
il codice e' cosi corretto? 1 pagina in piu' e solo 1 pulsante
if (minni == HIGH) {
lcd_page = 3;
Non mi è ben chiaro cos'è lcd_page = 3, ma comunque se alla pressione del tasto devi chiamare questo lcd_page = 3, allora si è corretto
lcd_page = 3 e ' la 3 pagina dello switch case , la chiamo e deve ignorare gli if pippo e pluto
Copia tutto il codice per intero perché in questo modo non riesco a capire a che switch case fai riferimento e non son certo se ti ho risposto correttamente per quello di cui hai bisogno
if (P_LCD == LOW && old_lcd == HIGH) {
lcd_page = 4;
}
old_lcd =P_LCD;
if (millis() - dopo < 3000 ) {//se dopo e' superiore a 3000
//disp = true; //scrivo altro
if (data.conf_acc) {
lcd_page = 1;
}
if (!data.conf_acc) {
lcd_page = 2;
}
}
if (millis() - dopo > 3000) {//se dopo e' superiore a 3000
old_tot = 0;
lcd_page = 3;
}
switch (lcd_page) {
case 1: {
}
break;
} case 2: { //Design of page 2
}
break;
case 3: { //Design of page 3
}
break;
case 4: { //Design of page 3
}
break;
}
}//switch end
Non hai ancora incluso tutto il codice.
Non si capisce, ad esempio, a cosa sono inizializzate P_LCD, old_lcd, disp.
Inoltre cosa intendi con quei commenti //design of page 2/3.
Infine che librerie stai usando?
alla fine ho risolto cosi
e solo il pezzo per scegliere il numero di lcd_page
sono tutte bool tranne dopo, che tiene il tempo, e p che e' un int
boolean P_LCD = digitalRead(LCD) ; //cosi evita i
if (!P_LCD && stato == 0) {
p = p + 1;
stato = 1;
}
else if (P_LCD) {
stato = 0;
}
if (millis() - dopo < 3000 ) {//se dopo e' superiore a 3000
//disp = true; //scrivo altro
if (data.conf_acc && p == 0) {
lcd_page = 1;
}
if (!data.conf_acc && p == 0) {
lcd_page = 2;
}
}
if (millis() - dopo > 3000 && p == 0) {//se dopo e' superiore a 3000
old_tot = 0;
lcd_page = 3;
}
if (p == 1) { //rimbalzi del
lcd_page = 4;
}
if (p== 5) {
p = 0;
}
ho modificato il codice e mi funziona correttamente, e sono riuscito ad mettere piu' pagine, mi ci sono picchiato ma ci sono riuscito!!!
c'e' quanche miglioria da fare
??