Newsgroup: it.hobby.elettronica.digitale
Titolo: Arduino e menu

 
Ciao a tutti
Sono andato avanti con Arduino e il GPS MT33339. Il produttore di
 Taiwan mi ha fornito l'ultimo firmware e con aggiornamento a 5 Hz
 e va molto bene.
 
Avrei bisogno di un aiutino: nel menu devo fare delle selezioni a
 pressione breve e altre a pressione lunga. Ho risolto in un modo
 che non mi piace.
 
 Inizialmente pensavo di usare un while loop, che ho molto usato
 per il pulsante. In questo caso, però, durante il ciclo while
 (pulsante premuto) deve controllare se è trascorso un secondo: in
 tal caso, contrariamente a quanto fa per una pressione breve,
 deve uscire dal while loop pur essendo ancora premuto il
 pulsante:
 
While(digitalRead (10)=LOW)
{
if(millis()-t1>1000) {???}
}
 
Ho provato con return, break, credo anche goto, ma essendo vero il
 while non esce... Posso fare in un modo simile o devo per forza
 fare in modi più "sporchi"?
 
Grazie!!!
Gianluca
-- 
 
 
 
 
 
----Android NewsGroup Reader----
http://usenet.sinaapp.com/
 

 Ho risolto in un modo che non mi piace.
 
Io ho avuto un problema simile e misi in piedi un sistema
che gestisce i classici up/down/ok/canc con
temporizzazioni sensibili alla durata.
 
Avendo avuto una serie infinita di problemi con Arduino
sul fronte hardware non ho più lavorato sul mio progettino
quindi non so più cosa io stesso abbia fatto.
 
Ho messo su dropbox l'intero sorgente, la gestione dei
pulsanti è nel file:
 
s92_t2_main.cpp
 
E il tutto sta qui:
 
https://www.dropbox.com/s/syt4j7718lvoskv/homeaut_v04.zip?dl=0
 
 
E' un po' come ammazzare una formica con una ruspa nel
senso che il frammento di codice che ti potrebbe essere
utile sta in una sola routine e andrebbe adattato. Ma se
non dovessero arrivare risposte e non sai come procedere,
potrebbe avere una sua utilità.
 
Non sono esperto di programmazione quindi sicuramente si
poteva fare meglio.
 
Ricordo che risolsi con due if consecutivi senza else, il
primo che intercetta il tempo breve e il secondo quello
lungo, ma non sono sicuro nemmeno di questo :D
 
 
 
ci
 
-- 
- Senti, ho voglia di divertirmi, ubriacarmi,
   e fare sesso tutta la notte. Tu sei impegnato?
- Oh, no di certo!
- Allora mi tieni il cane?
 


Se vai sul mio sito e prendi il progetto "remote CIV antenna switch" nei 
sorgenti troverai quello che cerchi.
E' nel file denominato IO se non ricordo male.
Ciao
 
-- 
Luca IK5PWC
http://www.ik5pwc.it
 
 
When all else fails, turn the power on

    Grazie a entrambi.
 
    Ho lasciato per un attimo lo sketch principale e ne ho scritto uno 
brevissimo solo per provare la parte che mi interessava. Così ha funzionato 
subito:
 
t1=millis();
while(digitalRead(10)==LOW)
  {
  if(millis()-t1>1000) {lcd.clear(); if(B>0) Bip(); return;}
  }
 
if(Y!=10 && Y!=EEPROM.read(0)) {EEPROM.update(0,Y); lcd.setCursor(12,1); 
lcd.print("SET "); delay(800);} // Se è cambiato, memorizza l'indice del 
valore iniziale in EEPROM(0) e scrive "SET".
 
 
- Scrive il tempo in t1.
- Finché il pulsante è premuto (LOW) controlla continuamente quanto è 
trascorso:
    - se è passato 1 sec.: cancella il display; se il Bip è attivato (B>0) 
fa Bip; esce dalla funzione menu().
- Se viene lasciato il pulsante senza che sia trascorso 1 sec., va avanti e, 
se Y è stato cambiato rispetto a quello scritto nella EEPROM, lo memorizza e 
scrive sul display "SET".
 
    Ottimo! Chissà dove avevo sbagliato inizialmente...
 
    Grazie
-- 
Gianluca 
 

  fare in modi più "sporchi"?
 
https://www.arduino.cc/en/Reference/Break
 
 
 
--