Per i LED , il modo più ovvio per farlo è quello di avere un output per ogni riga e ogni colonna della scacchiera: un totale di 8 + 8 = 16 pin. Gli anodi sarebbero collegati ai fili di fila e i catodi al filo di colonna. Per il LED che si desidera accendere, si renderebbe positivo il filo dell'anodo (logica 1) e negativo il filo catodico (logica 0), mantenendo gli altri nello stato inverso (quindi i LED rimanenti hanno polarizzazione neutra o inversa).
Sto assumendo qui che il microcontoller fornisce tensioni sufficientemente alte / basse per consentirti di collegare un LED dall'uno all'altro. In caso contrario, sarà necessario un transistor o un buffer per ciascuna linea. Con alimentazione a 5 V è stretto, considerando che il LED scende di circa 2 V e si desidera una ragionevole caduta di tensione sul resistore di limitazione corrente (si noti che è necessario installarli solo nelle linee di riga o nelle linee di colonna, non in entrambe).
Se le tue uscite sono tri-state (ovvero, oltre alla logica 0 e alla logica 1, possono essere impostate su uno stato ad alta impedenza, magari configurandole temporaneamente come ingressi), puoi diventare intelligente e utilizzare una griglia 4x8, con LED collegato in coppie antiparallele. In questa configurazione è importante impostare le uscite non utilizzate su un'impedenza elevata, altrimenti si accenderanno i LED indesiderati.
In entrambi i casi, dovrai pensare al sorteggio attuale e se è accettabile rischiare la possibilità di un errore del software che illumini tutti i LED di fila contemporaneamente (che, se non considerato, potrebbe sovracorrente quella riga del microcontrollore .)
Il caso dei sensori è più complicato. Presumo che tu usi sensori resistivi, sebbene i fototransistor non siano necessariamente condotti in una sola direzione.
Puoi usare le stesse uscite a 8 righe che usi per illuminare i tuoi LED, ma avrai bisogno di 8 ingressi a colonna dedicati al rilevamento. Senza dubbio avrai visto circuiti per tastiere come questa. Tieni presente che questi sono progettati solo per avere un tasto premuto alla volta . Se l'utente preme insieme 1,3,7 e 9, la tastiera non è in grado di rilevare se l'utente rilascia uno di questi quattro tasti perché esiste ancora un percorso corrente attraverso gli altri tre interruttori.
Una soluzione utilizzata sulle tastiere musicali (che sono progettate per avere più di un elemento della matrice che conduce alla volta) è quella di avere un diodo in serie con ogni singolo interruttore.
Un'altra soluzione sarebbe quella di acquistare quattro CI di decodifica da 4 a 16 con uscite open collector (o drain aperto se si utilizzano IC MOSFET) come questo: http://www.unicornelectronics.com/ftp/Data%20Sheets/74159.pdf Open collector significa che le uscite dell'IC affondano solo la corrente, non la fonte. In questo modo è possibile collegare 16 sensori a 16 uscite del chip e condividere le altre estremità con una resistenza di pullup (collegare anche qui l'ADC). Portate un'uscita bassa (conduttiva) e le altre 15 rimangono alte (non conduttrici). Ciò è in contrasto con l'uscita logica standard, dove le altre 15 uscite riverserebbero corrente nel punto comune.
L'ingresso a questi circuiti integrati è binario a 4 bit per selezionare una delle 16 uscite, ma hanno anche un ingresso aggiuntivo per abilitare / disabilitare il chip. Quindi potresti potenzialmente avere un array di 64 lavandini open collector, collegati a 64 sensori, con le altre estremità dei sensori tutte comuni a un singolo resistore pullup e convertitore analogico-digitale. Per questo occorrerebbero un totale di 8 uscite sul microcontrollore: quattro per prendere i segnali di selezione da 4 a 16 (comuni a tutti e quattro i chip) e quattro per prendere i segnali di abilitazione (uno per ogni chip).
EDIT: da 3 a 8 decodificatori (chiamati anche 1 di 8 = 1 riga su 8) sembrano essere più disponibili di 4 a 16, ma 8 IC sono molto più disordinati di 4. Un altro tipo di IC che potrebbe essere utile è il contatore ottale (e suo cugino più comune il contatore dei decadi , che può essere configurato come contatore ottale collegando la nona uscita alla linea di ripristino). Questi richiedono un impulso seriale per avanzare da un'uscita all'altra, quindi occorrerebbe meno Pin I / O sul microcontrollore rispetto ai circuiti integrati del decodificatore. In genere hanno ingressi aggiuntivi per il ripristino e l'abilitazione. Esistono anche IC chiamati registri a scorrimento , che sono disponibili in due tipi: uno per convertire serie in parallelo, l'altro per convertire parallelo in serie. Finalmente ci sonobuffer, che puoi mettere tra il tuo Rasberry Pi e la tua scacchiera in modo che il Pi non venga distrutto in caso di sovracorrente. Tutti questi possono essere utili nei circuiti multiplexing.