Pages: [1] 2   Go Down
Author Topic: Inserire una cifra tramite Keypad 4*4  (Read 1454 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 11
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Salve a tutti, sto cercando di realizzare un conta pezzi dotato di un tastierino 4*4 e display LCD 16*2, mediante arduino uno.
Siccome il controllore non predispone sufficienti i/o per questa applicazione, ho collegato la tastiera tramite il can bus (I2C) grazie all'integrato PCF8574AP.
Ora la mia tastiera ed LCD funzionano perfettamente.
Momentaneamente il tastierino invia solamente un carattere o numero alla volta ad arduino.
La mia necessità è quella d' impostare una cifra tramite tastierino ed associarla ad una variabile.
Come posso fare  smiley-roll smiley-roll?
Grazie! smiley
« Last Edit: December 17, 2012, 06:32:16 pm by murdok » Logged

Marche
Offline Offline
Edison Member
*
Karma: 33
Posts: 2265
azioni semplici per risultati complessi
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Usi un array e lo popoli di volta in volta
Logged

Battipaglia (SA)
Offline Offline
Jr. Member
**
Karma: 0
Posts: 70
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao,

immagino che per "cifra" tu intenda in realtà un numero composto da più cifre, per esempio il numero 375 composto dalle cifre 3, 7 e 5. Se ho capito bene quindi vuoi premere il 3, il 7 ed il 5 sulla tastierina e trovarti nella variabile il valore intero 375.

Oltre al suggerimento di Pelletta, ti propongo un altro sistema, tanto per avere ulteriori spunti.

All'inizio imposti il valore della tua variabile, diciamo V, a zero. Alla pressione di ogni tasto, moltiplichi per dieci il valore attuale di V e sommi il valore del tasto appena premuto.

Quindi nell'esempio iniziale parti con V=0; alla pressione del 3 ottieni: 0 * 10 + 3 = 3; alla pressione del 7 ottieni: 3 * 10 + 7 = 37; alla pressione del 5 ottieni 37 * 10 + 5 = 375. Immagino tu debba quindi gestire una sorta di ENTER per confermare il valore letto.

Se volessi gestire anche un tasto DEL per consentire la correzione del valore finora impostato, ti basta dividere V per 10 e troncare eventuali cifre decimali. Nell'esempio di prima 375 / 10 = (int)37,5 = 37

Ciao.
Vittorio.

Logged

Offline Offline
Edison Member
*
Karma: 28
Posts: 2031
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

interessante metodo più da matematico che da informatico devo dire  smiley-mr-green
Logged

"Due cose sono infinite: l'universo e la stupidità umana, ma riguardo l'universo ho ancora dei dubbi..." Albert Einstein

Battipaglia (SA)
Offline Offline
Jr. Member
**
Karma: 0
Posts: 70
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ti ringrazio (per l'"interessante")... peccato che avendo usato solo le 4 operazioni sembri più un metodo da aritmetico che da matematico  smiley smiley smiley

ovviamente ho compreso il tuo post... la mia è solo una battuta...
Logged

Offline Offline
Edison Member
*
Karma: 28
Posts: 2031
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ti ringrazio (per l'"interessante")... peccato che avendo usato solo le 4 operazioni sembri più un metodo da aritmetico che da matematico  smiley smiley smiley

ovviamente ho compreso il tuo post... la mia è solo una battuta...
Utilizzare un array è la prima cosa che viene in mente ad un programmatore ad uno meno esperto magari viene in mente una stringa concatenata ad un matematico viene in mente il tuo metodo intendevo solo questo  smiley-mr-green a quanto pare l'hai capito volevo solo chiarire  smiley-mr-green
Logged

"Due cose sono infinite: l'universo e la stupidità umana, ma riguardo l'universo ho ancora dei dubbi..." Albert Einstein

Offline Offline
Sr. Member
****
Karma: 8
Posts: 293
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

scusate: parassito un attimo questo argomento perchè mi interessa un bel po: anch'io sto facendo un'applicazione con un tastierino numerico... il mio è solo 4 tasti ed ho pensato di attaccare delle resistenze e leggere il voltaggio con un'analogica... in qualche modo funziona ma non sono molto soddisfatto della precisione in quanto i valori variano di una 30ina di punti (da 1 a 1024... 5 step). Volevo capire se questo comportamento "anomalo" è normale perchè uso questo metodo "barbaro" o se era dovuto al tipo di tastiera (è una tastiera flessibile che quindi penso abbia una membrana dentro che penso abbia le sue impedenze... non esattamente un interruttore acceso spento.
Inolte così al volo se tutti voi usate l'integrato PCF8574AP per queste applicazioni o avete altre carte.

Logged

Marche
Offline Offline
Edison Member
*
Karma: 33
Posts: 2265
azioni semplici per risultati complessi
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

...
Inolte così al volo se tutti voi usate l'integrato PCF8574AP per queste applicazioni o avete altre carte.


L'ho collegata sempre diretta all'arduino però poi ho usato shift register per aumentare ingressi e uscite se ne avevo bisogno
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 11
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao qsecofr, anch'io utilizzo una tastiera flessibile, e dopo aver calcolato tutte le resistenze (sono impazzito smiley-eek-blue smiley-eek-blue) l'avevo collegata ad un unico pin analogico d'ingresso.
Questo metodo oltre ad essere difficile è impossibile da realizzare, perchè la resistenza dei tasti varia con la pressione esercitata.
Ti ritroveresti nello stesso tasto diversi valori di tensione, quindi per il controllore è come se premi tasti diversi!
Ti conviene installare sulla Ide di arduino la libreria aggiuntiva "KEYPAD" (comprende sia il collegamento parallelo, sia la seriale I2C).
La I2C serve solamente per aumentare il numero di ingressi o uscite del controllore.

Ciao!   smiley-wink
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 11
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Grazie per l'aiuto Pelletta e vittorio68   smiley-lol!
Inzialmente pensavo un metodo (ma era più complicato) simile a quello di vittorio68.
Proverò ad effettuare tutti e due i metodi, ma non ho alba di come si usi un array per memorizzare una stringa di numeri... Pelletta, mi puoi illuminare?
Comunque la mia intenzione era di inserire i numeri tramite tastiera (uno alla volta, cifra max 10000), una volta inserita, non è necessario dare alcun ordine per memorizzare la serie intera di numeri (man mano che digito la variabile immagazzina il dato, come la calcolatrice); un tasto "Canc" mi cancellerà il dato (una cifra alla volta mi può andare bene!):

Vi ringrazio per la collaborazione  smiley-wink!
Logged

Offline Offline
Sr. Member
****
Karma: 8
Posts: 293
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Grazie per l'aiuto Pelletta e vittorio68   smiley-lol!
Inzialmente pensavo un metodo (ma era più complicato) simile a quello di vittorio68.
Proverò ad effettuare tutti e due i metodi, ma non ho alba di come si usi un array per memorizzare una stringa di numeri... Pelletta, mi puoi illuminare?


Grazie per la dritta sui tasti... effettivamente mi stanno facendo penare... permettimi un suggerimento per il tuo algoritmo: il metodo della moltiplicazione "E' IL METODO". Array e stringhe (che poi sono di fatto degli array) sono da usare per tastiere alfanumeriche ma per i numeri quello è il metodo in assoluto più giusto e facile e ti permette anche un certo risparmio di memoria.

Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 11
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Grazie qsecofr! allora vorrà dire che da ora mi devo concentrare solo su questo metodo.
Inizialmente pensavo ci fossero delle librerie già pronte per fare ciò!
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao a tutti,
ho un problema con il mio sistema costituito da un tastierino 12 tasti e LCD shield: quando vado ad impostare numeri di 5 cifre (ad esempio 18500) invece di darmi su display il numero giusto la visualizzazione mi impazzisce (del tipo che mi scrive -21785 o robe del genere). Secondo voi che tipo di problema potrebbe esserci? Grazie a tutti
Filippo
Logged

Selvazzano Dentro - Padova
Offline Offline
Edison Member
*
Karma: 44
Posts: 1385
"Chi sa fa, chi non sa insegna"
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
ho pensato di attaccare delle resistenze e leggere il voltaggio con un'analogica... in qualche modo funziona ma non sono molto soddisfatto della precisione

Qualche tempo fa ho postato uno schema per keypad 4x3 e 4x4 con sole resistori ed un condensatore.
L'ho calcolato ed ottimizzato con Excel, ma non ho mai avuto modo di provarlo.
Comunque, nel caso peggiore (digit "3") mi forniva una finestra di lettura di circa 23 unità ADC (134mV @ 5V).
Se cerchi nei passati post dovresti trovarlo.
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 327
Posts: 22640
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Questa discussione è di 13 mesi fa...  smiley-wink
Logged


Pages: [1] 2   Go Up
Jump to: