3.9. Kapcsolók és felhúzó ellenállások¶
A GPIO kimenet külső hardvert vezérel. A GPIO bemenet ennek az ellentéte: a kamera beolvassa a lábon lévő feszültséget, és 0 vagy 1 értékként jelenti. A legegyszerűbb bemeneti eszköz egy kapcsoló – és ahhoz, hogy megbízhatóan olvasható legyen, magán a kapcsolón felül egy elektronikai elemre van szükség.
3.9.1. Kapcsolók és lebegő bemenetek¶
A kapcsoló egy mechanikus érintkező: két fémdarab, amelyek érintkeznek, amikor a kapcsoló zárt, és szétválnak, amikor nyitott. Elektromosan ennyi az egész eszköz. Nincs benne feszültségforrás; egy kapcsoló önmagában csak „összekötött” vagy „szétkapcsolt” állapotot ad.
Ha egy kapcsolót közvetlenül egy GPIO láb és a föld közé kötünk, a láb:
0 V-on van, amikor a kapcsoló zárt (most a földre van kötve).
Lebeg, amikor a kapcsoló nyitott (semmihez sincs kötve).
Egy lebegő lábnak nincs meghatározott feszültsége. A bemenet azt olvassa, ami éppen a közelében van – áthallás a közeli jelekből, zaj a tápellátásból, sőt akár statikus elektromosság egy ujjról, amely közel van a vezetékhez. A value() másodpercenként sokszor a 0 és 1 kiszámíthatatlan keverékét adja vissza.
3.9.2. Felhúzó és lehúzó ellenállások¶
A megoldás egy felhúzó vagy lehúzó ellenállás: egy nagy értékű ellenállás (jellemzően 10 kΩ-tól 100 kΩ-ig), amely egy ismert sínhez köti a bemenetet, amikor a kapcsoló nyitott.
Felhúzó (bal) és lehúzó (jobb) elrendezések egy kapcsoló bemenethez.¶
Felhúzó. Az ellenállás a táp sínhez köti a bemenetet. Amikor a kapcsoló nyitott, csak egy kis áram csordogál át az ellenálláson, és a láb magas szintet olvas. Amikor a kapcsoló zár, rövidre zárja a lábat a földre; a láb alacsony szintet olvas. Az ellenállás korlátozza azt az áramot, amely egyébként a tápellátásból a földre folyna a zárt kapcsolón keresztül.
Lehúzó. A tükörkép: az ellenállás a földhöz köti a bemenetet, a kapcsoló pedig a tápellátáshoz csatlakozik. Nyitott állapotban alacsonyat, zárt állapotban magasat olvas.
A felhúzó a gyakoribb megoldás – „aktív alacsony” gombok. Maga az MCU beépített felhúzó és lehúzó ellenállásokat biztosít, amelyek a Pin.PULL_UP vagy Pin.PULL_DOWN segítségével engedélyezhetők, teljesen kiküszöbölve a külső ellenállást.