progetto esame maturità

Ciao a tutti, come progetto per la maturità sto portando un magazzino verticale comandato da un arduino mega. Premetto che studio elettrotecnica e tutto quello che so su arduino l'ho imparato da solo.

Devo inserire 2 valori da keypad (riga e colonna), e questo è il metodo a cui avevo pensato. Però una volta inserito questo primo valore, dovrei inserirne un'altro ( il secondo metodo di inserimento è uguale al primo) però il programma si blocca e non continua una volta arrivati al secondo inserimento. :frowning:

valoreX=customKeypad.getKey();

lcd.setCursor (1, 1);
  lcd.print("inserisci riga");



if(valoreX)  
  {
   switch(valoreX)

  {  
    case '1':       giriX= 100;
                          assey();
                         break;
                
                    
    case '2': 
              
              giriX = 200;
                 assey();
               
                   break; 
                   
    case '3': 
              
               giriX = 300;
                   assey();
                   break;

   case '4': 
              
              giriX = 400;
                   assey(); 
                   break;

  
    
   }
  
  }

Potreste dirmi dove sbaglio o come inserire un valore con due cifre da keypad ( es. 11, 12, 22) invece di farlo in due passaggi?

Grazie :slight_smile:

Ciao, premetto che NON sono un programmatore, quindi forse sto dicendo una cavolata … e che senza sapere cosa hai realizzato, posso dirti solo come farei io … pero’, almeno cosi ad occhio, e supponendo che righe e colonne NON siano in doppia cifra (meno di 10), mi viene da dire …

flag per sapere in che punto sei, chiamala “pippo” :stuck_out_tongue: … variabili per sapere quanto muovere i motori, chiamale “verticale” ed “orizzontale” …

se flag=0 oppure flag=1 leggi keypad
se flag=0 e valoredakeypad<>0, assegna il valore a “verticale”, aspetta finche’ valoredakeypad=0 e poni flag=1
se flag=1 e valoredakeypad<>0, assegna il valore ad “orizzontale”, aspetta finche’ valoredakeypad=0 e poni flag=2

se flag=2, muovi i motori, prendi l’oggetto (o riponilo, o fai quello che devi con i motori), riporta i motori a zero e poni di nuovo flag=0 (cosi ricomincia il ciclo)

Detta cosi sarebbe una macchina a stati elementare … pero’ potrei aver capito male cosa vuoi fare …

Etemenanki:
Ciao, premetto che NON sono un programmatore, quindi forse sto dicendo una cavolata … e che senza sapere cosa hai realizzato, posso dirti solo come farei io … pero’, almeno cosi ad occhio, e supponendo che righe e colonne NON siano in doppia cifra (meno di 10), mi viene da dire …

flag per sapere in che punto sei, chiamala “pippo” :stuck_out_tongue: … variabili per sapere quanto muovere i motori, chiamale “verticale” ed “orizzontale” …

se flag=0 oppure flag=1 leggi keypad
se flag=0 e valoredakeypad<>0, assegna il valore a “verticale”, aspetta finche’ valoredakeypad=0 e poni flag=1
se flag=1 e valoredakeypad<>0, assegna il valore ad “orizzontale”, aspetta finche’ valoredakeypad=0 e poni flag=2

se flag=2, muovi i motori, prendi l’oggetto (o riponilo, o fai quello che devi con i motori), riporta i motori a zero e poni di nuovo flag=0 (cosi ricomincia il ciclo)

Detta cosi sarebbe una macchina a stati elementare … pero’ potrei aver capito male cosa vuoi fare …

Grazie mille per la risposta :slight_smile: domani provo a scrivere il programma come mi hai detto te e vi faccio sapere!

Comunque per doppia cifra intendevo inserire un “numero” di un ripiano dello scaffale senza inserire prima la riga e poi la colonna (vedi foto), ma va benissimo anche cosi :slight_smile:

Dimenticavo … oppure, puoi usare un tasto di enter, cosi potresti inserire anche numeri in doppia cifra … sempre con la stessa struttura, piu o meno, pero’ l’aggiornamento del valore delle variabili e della flag li fai quando premi enter … in questo modo, potresti prima inserire il ripiano, premere enter, inserire la colonna, premere enter, eccetera … sempre una macchina a stati, l’unica differenza e’ che per passare di stato devi confermare con l’enter ogni volta …

Mi raccomando i debounce (condensatore e resistenza) sui pulsanti :wink:

Etemenanki:
Dimenticavo ... oppure, puoi usare un tasto di enter, cosi potresti inserire anche numeri in doppia cifra ... sempre con la stessa struttura, piu o meno, pero' l'aggiornamento del valore delle variabili e della flag li fai quando premi enter ... in questo modo, potresti prima inserire il ripiano, premere enter, inserire la colonna, premere enter, eccetera ... sempre una macchina a stati, l'unica differenza e' che per passare di stato devi confermare con l'enter ogni volta ...

Mi raccomando i debounce (condensatore e resistenza) sui pulsanti :wink:

Spero di aver capito, se puoi farei un piccolo esempio ti ringrazio ;D

Ehm... scusa ma io non ho inserito nessun condensatore e resistenza nei pulsanti, la tastiera che uso è questa : http://www.theorycircuit.com/wp-content/uploads/2015/12/4x4-keypad-matrix.jpg
Sono necessari i condensatori e resistenze?

Quella tastiera e’ una semplice matrice … e si, qualche debounce sarebbe meglio mettercelo anche sulle matrici … siccome per leggerla dovrai usare 4 uscite e 4 ingressi, ovviamente i debounce andranno solo sugli ingressi … e per sapere quale schema usare devi vedere come la tastiera viene letta, se verso VCC o verso massa … ma questo dipende dal tuo sketch …