Salve a tutti,
ho visitato molti post cercando un consiglio per risolvere un piccolo problema ma sembra che nessuno lo abbia trattato.
Volevo usare la libreria irremote per creare una tastiera numerica+funzioni in modo di sostituire la classica tastiera tipo telefono.
Con le info trovate si riesce facilmente ad abbinare un valore numerico ad un tasto premuto.
Se devo invece editare una variabile composta da un numero di 2 o più cifre (es impostare temperatura termostato) non riesco a trovare il modo corretto di fare.
Ho cercato vari modi senza successo, vero è che non ho grandi conoscenze di programmazione....
Avete qualche suggerimento o qualche link dove la cosa è già stata trattata?
Posta il codice che hai provato, magari non è del tutto sbagliato e possiamo aiutarti!
Comunque teoricamente si tratta di fare un ciclo for (ad esempio per 5 numeri) che cicla ogni volta che hai premuto un tasto. Il numero scelto lo concateni ad una stringa!
Poi se vuoi perfezionare ci dovresti mettere pure un timeout in modo da non attendere più di un tot per l'input..
Magari mi sbaglio ma non è che il codice della.funzione leggiComando esegue a dritto e t non fa in tempo a leggerti i comandi? Non ho esperienza con la libreria IR, pero un possibile problema potrebbe essere questo.
E' anche la mia sensazione, o meglio, il programma secondo me si dovrebbe comportare in questo modo:
una volta che entra in LeggiComando, Arduino rimane in attesa che venga premuto un primo tasto, lo memorizza , poi aspetta per il secondo input e quindi crea il valore complessivo della variabile.
Purtroppo non so come fare per creare questa attesa di input e credo che il problema più grosso sia proprio lì.
Grazie ancora ragazzi, capisco che per degli esperti sarà una cosa ovvia, ma per me è avvilente non riuscirci.
//dichiarazione variabili
unsigned long interval_a = 10000; //timeout di 10 sec
unsigned long previousMillis_a = 0; //azzeri con questo il timer quando viene rilevata la pressione di un tasto valido
//qui parte il conteggio da quando è stato premuto un tasto
unsigned long currentMillis_a = millis();
if(currentMillis_a - previousMillis_a > interval_a)
{
//qui scade il timeout
//azzeri la sequenza digitata e incompleta
}
Potresti provare con un while a vuoto finchè non ricevi, ti faccio un esempio
Code:
while( irRX == false ){}
// codice che gestisce le letture
Dove irRX è il pin del ricevitore ir.
Ho provato, ma qualcosa non funziona. Se metto un ciclo while come mi hai indicato, la lettura dell' IR non si ferma. L'ho verificato semplificando tutto a questo code "minimal"
"sono in loop" lo stampa sempre...quando premo il tasto mi dice "tasto 11 premuto", ma tra le due cose non si mette mai in pausa e non mi dice "in attesa del tasto"