Alapvetoen en is vagy a shift regiszterek vagy a Charlie/multiplexing iranyba indulnek el.
SN74**166 (LS, HC, HCT es tarsai) gombokert vannak, es konnyen kezelhetoek az Arduino SPI portjaval (vagy a shiftIn/shiftOut rutinokkal). Ha nem kell csak input, es mas SPI eszkoz nincs, a kimenet es a chip select kihagyhato (ertelemszeruen a 166-ok labat fixen aktivba kotve), 2 labbal megoldhatsz mindent.
Ha output is kell, SN74**595 megint segit. Vegyesen 166 es 595 hasznalhato, ez is filleres tetel, es ha ezeken kivul nincs mas, megint nem kell chip select, 3 labbal meghajthatod mindet (kicsit villogni fognak a ledek, amikor atshifteled rajtuk az egyeb adatot, ha nincs kulon load, de +1 labbal az is megoldhato - ha LEDen kivul masra is hasznalod az outputot, ez mindenkeppen ajanlott).
Ezekkel egymastol fuggetlen input es outputokat kaphatsz tetszoleges mennyisegben.
Vannak portbovitok, ezek flexibilisebbek, de a fenti filleres alkatreszekhez kepest horror aron vannak. Attol fuggoen, hogy mit valasztanal, meg az is lehet, hogy egy par Atmega8 is olcsobban kijon pluszban. De persze nem kell veluk szorakozni, foleg, ha talalsz ra libet.
Multiplexingnel tipikusan matrixban vannak a dolgok, ez is mukodik, hasznaltam mar. N sor es K oszlop eseten N+K labat hasznalsz fel, es N*K gombot kezelhetsz kenyelmesen.
Charlieplexing szinten jo, kicsit macerasabb a vezetekezes, de konnyen lehet gombokat es LEDeket vegyiteni. Hatranya, hogy kicsit nehezebb, mint a multiplexeles, es minden gombhoz kell plusz dioda. (sok gomb egyideju nyomasakor a multiplexinghez is) N labbal N*(N-1)/2 gombot/LEDet tudsz lekezelni.
Multiplexing meg Charlieplexingnel meg arra kell figyelned, hogy a LEDek fenyereje tipikusan csokkenni fog (ha sokat hasznalsz), mert nem tudod oket akarmilyen kombinacioban hajtani az ido 100%-ban. De ez ritkan problema.
Alapvetoen mondjuk 32-48 input+outputig gond nelkul shift regisztereznek. Ha csak par LED van, es kb. 80-120 gomb (mint egy PC-s billentyuzetnel), akkor meg multiplexinggel oldanam meg.
Ha nagyon sok feladat van ezen kivul, a gomb+LED kezelesre betehetsz egy masik, butabb mikrokontrollert, ami csak az eredmenyt adja at (es neki a kivant LEDallapotokat adod). (Atmega8 itt is a baratod, bar mostanaban felment az ara)