Inserire campi alfanumerici con 4 pulsanti su LCD

Mi trovo a connettere il mio Arduino con LCD 20x4 alla rete wifi.
Ho 4 pulsanti (sono analogoci ma non fateci caso, l'importante è il metodo) per cui alla richiesta SSID e alla richiesta Password dovrei trovare un modo non troppo complicato o lungo per inserire questi dati.
Ho il tasto (^), il tasto (v), il tasto (ESC) e il tasto (OK) (fate finta che siano 4 ingressi, poi ci penso io)

So già che si scatenerà la gara tra "i soliti noti" a chi lo farà più conciso anche se meno leggibile, e la cosa mi diverte.

Io pensavo di spostarmi con il cursore e di fare un ciclo for con il campo (char) in modo da spazzolarli tutti, ma magari c'è chi lo ha già fatto e me lo sconsiglia...

ciao

ho letto più volte... non è ben chiaro cosa tu voglia fare... oppure sono io che non riesco a capire :confused:

steve-cr:
Ho 4 pulsanti (sono analogoci ma non fateci caso, l'importante è il metodo) per cui alla richiesta SSID e alla richiesta Password dovrei trovare un modo non troppo complicato o lungo per inserire questi dati.

inserire i dati dove?
i pulsanti cosa devono fare?

MD

Ho un ESP32 a cui è collegato un LCD 20x4 in I2C e poi ho 4 pulsanti sul frontale, intorno al LCD.
Bene, voglio connettermi al WiFi e ho bisogno di inserire SSID e Password.
Ma non la voglio inserire nel programma e poi scaricargliela.
La voglio inserire da tastiera (solo 4 tasti) con cui far passare tutto l'alfabeto, carattere per carattere, e poi confermare con il tasto OK

Sto anche valutando di connettermi WPS... Chissà se si può fare agevolmente con ESP32

Può essere utile QUESTO link ?

Guglielmo

steve-cr:
La voglio inserire da tastiera (solo 4 tasti) con cui far passare tutto l'alfabeto, carattere per carattere, e poi confermare con il tasto OK

Prediligerei il WPS ma se non riesci devi comunque considerare che per la password non ti basta l'alfabeto ed i numeri ma evi contemplare anche i caratteri speciali "@^?ecc.) che potrebbero essere nella password, un delirio :slight_smile:

Mai giocato a un coin-op, flipper o ad un vecchio gioco anni '80/'90? Mai fatto un hi-score? Ecco, ricordate come si inseriva il nome?

A volte per inserire il mio nome ci voleva di più del tempo di gioco effettivo :grinning:

Sto già male per te, nella mia rete la chiave è di circa 30 caratteri...
Diventa fondamentale il pulsante ESC per abbandonare il tentativo per raggiunti limiti di età.

Farei sicuramente prima a scriverla in morse che a spostarmi avanti e indietro con solo due frecce :frowning:

SukkoPera:
Mai giocato a un coin-op, flipper o ad un vecchio gioco anni '80/'90? Mai fato un hi-score? Ecco, ricordate come si inseriva il nome?

Infatti a quello pensavo. :slight_smile:

gpb01:
Può essere utile QUESTO link ?

Guglielmo

Si, lo avevo visto, poi ho visto anche che la libreria WiFi è stata aggiornata con un esempio WPS e oggi lo voglio provare.

Hai modo di aggiungere al progetto un lettore sd card?

fabpolli:
Hai modo di aggiungere al progetto un lettore sd card?

No, non mi serve, per adesso, ma ho la porta I2C e ci posso attaccare di tutto.

La domanda mi è sorta pensando che se tu avessi una sd potevi infilarci un file con un determinato nome, se lo trovi lo leggi e dentro ci troveresti le due info che ti servono, alla fine lo cancelli in modo che nei successivi riavii non aggiorni id e pwd ma usi quelli in EEPROM. Era per evitare che l'utente stia davanti al monitor ad inserire la password fino all'età pensionabile :slight_smile:

Se questa strada non piace/non è percorribile allora resta la tua idea originale

steve-cr:
No, non mi serve, per adesso, ma ho la porta I2C e ci posso attaccare di tutto.

Se ci puoi attaccare di tutto, non solo sull'I2C immagino, perchè non ci attacchi un tastierino?
E poi lo usi come le tastiere dei vecchi telefonini non smart.
Con una piccola estensione per i caratteri non alfanumerici.

Oppure un mini joystick per selezionare agevolmente il carattere dallo schermo.

La voglio inserire da tastiera (solo 4 tasti) con cui far passare tutto l'alfabeto, carattere per carattere, e poi confermare con il tasto OK

E' come dire: voglio una macchina da scrivere con 4 tasti e che sia semplice da usare ::slight_smile:

"Normalmente" le configurazioni si inseriscono da terminale seriale e si salvano in EEPROM.

Un terminale seriale e' anche un telefono con capacita' USB host ed apposita app ....

Marco

beh, io l'ho interpretata in modo diverso: ho una macchina da scrivere con 4 tasti, come faccio a renderla il più semplice possibile da usare?

maubarzi:
beh, io l'ho interpretata in modo diverso: ho una macchina da scrivere con 4 tasti, come faccio a renderla il più semplice possibile da usare?

Esatto!!!
Dai non fate finta di niente, avete anche voi inserito un nominativo in una centralina allarme oppure in un PLC oppure in un cercapersone o in qualche altra diavoleria elettronica che non aveva una tastiera QWERTY, col tasto (+) e tasto (-) e vi siete spostati sul carattere successivo con la freccia (>) e avete terminato col tasto (OK).

Ho buttato giù queste righe, non ho provato un tubazzo, non so se funziona e come, so solo che sicuramente c'è modo di ottimizzarlo ma tant'è....

#define MIN_CHAR_CODE 34
#define MAX_CHAR_CODE 126
#define STR_MAX_LEN 4
byte attCharCode=MIN_CHAR_CODE;
byte attCharPos=0;
char outBuf[STR_MAX_LEN];
boolean inputInCorso = true;
memset(outBuf,0,STR_MAX_LEN);
while(inputInCorso)
{
  if(pulsante_su)
  {
    attCharCode--;
    if(attCharCode<MIN_CHAR_CODE)
    {
        attCharCode=MAX_CHAR_CODE;
    }
    outBuf[attCharPos]=attCharCode;
    lcd.clear();
    lcd.print(outBuf);
  }
  if(pulsante_giù)
  {
    attCharCode++;
    if(attCharCode>MAX_CHAR_CODE)
    {
      attCharCode=MIN_CHAR_CODE;
    }
    outBuf[attCharPos]=attCharCode;
    lcd.clear();
    lcd.print(outBuf);
  }
  if(pulsante_destra)
  {
     if(attCharPos<STR_MAX_LEN-2)
     {
         attCharPos++;
         attCharCode=outBuf[attCharPos];
         if(attCharCode==0)
         {
            attCharCode=MIN_CHAR_CODE;
         }
         outBuf[attCharPos]=attCharCode;
         lcd.clear();
         lcd.print(outBuf);
      }
      else
      {
          inputInCorso=false;
      }
  }
  if(pulsante_sinistra)
  {
     if(attCharPos>0)
     {
        attCharPos--;
        attCharCode=outBuf[attCharPos];
        lcd.clear();
        lcd.print(outBuf);
     }
  }
}

Mancano tutte le funzioni di posizionamento dell'lcd che non ricordo al volo quindi ho optato per clear, inoltre manca il blick del cursore ecc. ecc. insomma è un idea buttata li provala

Bello. lo provo subito e ti so dire.