Collegamento pulsanti

Salve a tutti, dovrei inserire in un progetto una serie di pulsanti, 10 per esattezza. Qual'è la soluzione ottimale per collegarli su un arduino 2009 in modo da risparmiare preziosi ingressi? Subito ho pensato di disporre i pulsanti in una matrice in modo da ridurre i pin a 7:

Una volta creata la matrice di pulsanti, è possibile collegarla all'arduino tramite uno shift register per ridurre ulteriormente i pin? Non so se le soluzioni sopra esposte sono fattibili e quali componenti utilizzare; ho già utilizzato su altri progetti tastiere a matrice 4x3 ma per quanto riguarda gli shift register non ne ho mai utilizzati fin'ora. Ho visto l'esempio nel playground riguardante la funzione shiftout dove si utilizza un 74HC595 per comandare dei led; in quell'esempio lo shift register viene usato come uscita, è possible configurarlo invece come ingresso? Ogni consiglio è ben accetto, grazie per il tempo dedicato alla lettura del mio post.

ciao

un'altra opzione è usare un 74LS147, dati 10 input genera un numero binario a 4 bit.

alla fine con uno shift register ci vogliono almeno 3 pin... ed è piu complicato

Immagino tu voglia metterci un PISO, il 74HC595 è un SIPO almeno a quanto è scritto qui http://www.nxp.com/documents/data_sheet/74HC_HCT595.pdf :D il sipo, serial input parallel output, non ti serve a meno che tu non voglia mandare dei dati alla tastiera ma mi pare alquanto inutile :D

Solo che non capisco come da questo

tu possa capire quale bottone è stato premuto. Premettendo che puoi premere un bottone in qualsiasi istante.

Forse, dico forse, puoi usare un mux (multiplexer) e mettendo tutti i bottoni in riga risparmieresti parecchi ingressi però ti servono 4 bit per pilotarlo :D quindi per un totale di 5 pin potresti far funzionare un tastierino con 10 bottoni :D http://it.wikipedia.org/wiki/Multiplexer http://www.datasheet4u.com/download.php?id=472447

Potresti anche utilizzare un PCF8574 e comandare un tastierino 4x4 tramite bus I2c. Però dovrai scrivere qualche riga di codice. :)

Grazie per i molti consigli proposti, per rendere tutto molto più semplice ho pensato di ricorrere ad una soluzione poco ortodossa per collegare i pulsanti utilizzando un solo pin di arduino. Non sono molto pratico in elettronica, quel poco che so lo devo a voi e ad arduino quindi quello che sto per esporre potrebbe rivelarsi una vera castroneria: collegare i pulsanti in parallelo sull’uscita di un LM7805 in modo da far scorrere nei pulsanti 5V esatti; ogni pulsante avrà collegato una resistenza diversa (ad esempio con una resistenza di 10M ottengo circa 2,5V e con una da 1M ottengo 4.5V). Il tutto verrà collegato su un ingresso analogico di arduino che leggerà il segnale inviato e, in base al valore del pulsante premuto, eseguirà una funzione. In linea puramente teorica dovrebbe funzionare (almeno credo) dovrò stare attento a come calcolare le resistenze e soprattutto a come distribuirle ai pulsanti; so che potrebbe succedere un casino nel caso in cui più di un pulsante venga premuto contemporaneamente ma fortunatamente nel progettino che sto portando avanti dovrò premerne soltanto uno alla volta. Che ne dite, potrebbe andare o mi consigliate di cambiare spacciatore? :smiley:

Le soluzioni postate da Massimo Banzi e da Linus81 sono molto buone. Soprattutto non ti creano grossi problemi.

Sono entrambi encoder per quello che vedo nei datasheet, quello suggerito da Massimo secondo me non ti complica molto le cose mentre magari il PCF8574 ti rende la vita difficile a livello di software.

Leggiti questo http://www.nxp.com/documents/data_sheet/PCF8574.pdf e questo http://www.datasheetcatalog.org/datasheet/motorola/SN74LS148D.pdf poi fai la tua scelta...

Per quanto riguarda la tua soluzione ,la vedo alquanto macchinosa e con dubbie probabilità di riuscita oltre che complicata al livello di software :D

ciao in realtà molti telecomandi funzionano così (tipo il mini telecomando dell’ipod 2g era fatto cosi)

il 7805 non ti serve … l’arduino ti da già un 5v piuttosto stabile
devi trovare una combinazione di resistenze che generino un segnale abbastanza diverso per ogni tasto.
considerando che l’analogRead legge 1024 valori ogni tasto ha circa 102 valori in cui spaziare…
magari prendi resistenze all’1%. tieni conto che i valori delle resistenze variano con la temperatura perciò non danno mai lo stesso identico numero. il tuo codice dovra vedere in che “forchetta” di valori casca il valore letto e decidere che tasto è stato premuto.

m

ciao in realtà molti telecomandi funzionano così (tipo il mini telecomando dell'ipod 2g era fatto cosi)

Ganzo, ho imparato un'altra cosa nuova :D allora Pelletta se la tua soluzione funziona posta immagini, valori e codice che sono interessato. (uno dei progetti che ho in mente è un controller midi per ableton live e mi servono diversi bottoni per controllare i loop :D)

Guarda! :o Ho trovato per te la soluzione già pronta e con i giusti valori del partitore. L'esempio è composta da 5 pulsanti collegati ad un solo ingresso analogico. E' presente anche lo sketch. Meglio di così!

http://www.nuelectronics.com/estore/?p=6

Grazie infinite per la segnalazione, corro subito a vedere lo sketch!