A Raspberry Pi GPIO portja 16 szabadon programozható adatvonalat tartalmaz, amik a port tüskéire vannak kivezetve. Azt, hogy az adott tüske ki- vagy bemenetként viselkedjen, az ún. adatirány-regiszterbe írt 0 vagy 1 érték határozza meg. A Sratch 3.0-ban ezt az alábbi parancsokkal állíthatjuk be:

Kimenet

A paranccsal két paramétert állíthatunk be, a kimenetnek beállított tüske sorszámát ( a parancsban az un. GPIO számot kell megadnunk) illetve a kimenet logikai szintjét. Ez a példában magas (high), azaz a kimeneten 3,3V jelenik meg. Ez alkalmas pl. a tüskére kötött LED kigyújtására.

Természetesen mind a tüskeszám, mind a logikai szint beállítható:

Bemenet

A digitális bemeneti érték kiolvasására szolgáló paranccsal szintén két paraméter állítható be, az első ebben az esetben is a tüskesorszám. A második beállítási lehetőségnél három opció közül választhatunk:

Értelmezzük a fenti paramétereket! A nagy érzékenységű digitális bemenetek, amennyiben nincsenek alacsony vagy magas logikai szintre kapcsolva un. bizonytalan, vagy nem definiált állapotba kerülnek. Ez azt jelenti, hogy amennyiben a kiválasztott tüskére csak egy szabad végű jumper kábel csatlakozik, akkor a bemenet véletlenszerűen billeghet az alacsony illetve a magas logikai szint között.

Ezt a problémát nagyon egyszerűen megoldhatjuk egy, a bemenet és a pozitív tápfeszültég (3,3V) vagy a bemenet és a GND potenciál közé kapcsolt ellenállás segítségével. Az első estben felhúzó (pull up resistor) a második esetben lehúzó (pull down resistor) ellenállásról beszélünk.

Az ábrán az első megoldás látható, ahol a bemenetet egy 10kohm-os ellenállással fixen magas logikai szintre kapcsoljuk. (felhúzó ellenállás)

Ebben az esetben a GPIO_IN ponton folyamatosan magas logikai szintet mérhetünk, ami a kapcsoló bekapcsolásával alacsony szintre billen. A kapcsoló bontásakor a bemeneten újra magas szint jelenik meg.

A második ábrán az a megoldás látható, amikor a bemenet egy 10 kohm-os ellenállással a GND, azaz alacsony logikai szintre van lehúva.

Ebben az esetben a GPIO_IN ponton folyamatosan alacsony logikai szintet mérhetünk, ami a kapcsoló bekapcsolásával magas szintre billen. A kapcsoló bontásakor a bemenet újra alacsony szintre kerül.

A felhúzó illetve lehúzó ellenállások alkalmazására három opciót kínál a Scratch 3.0 programozási környezet:

pulledhigh

ebben az esetben a Raspberry Pi beépített, un. programozható felhúzó ellenállását használjuk, azaz külső ellenállás nélkül, a nyomógombot, illetve kapcsolót közvetlenül a GPIO tüske, illetve a +3,3V-ot szolgáltató pont közé kapcsoljuk. Ebben az esetben alaphelyzetben a kimenet magas logikai szintre van felhúzva, és a külső záró-kontaktus húzza le alacsony szintre.

pulledlow

ebben az esetben is a Raspberry Pi beépített, un. programozható lehúzó ellenállását használjuk, azaz külső ellenállás nélkül, a nyomógombot, illetve kapcsolót közvetlenül a GPIO tüske, illetve a GND pont közé kapcsoljuk Ebben az esetben alaphelyzetben a kimenet alacsony logikai szintre van lehúzva, és a külső záró-kontaktus húzza fel magas logikai szintre.

notpulled

a harmadik opciót akkor választjuk, ha le- vagy felhúzó ellenállást külső alkatrészekkel valósítjuk meg, ilyenkor a paraméter lekapcsolja a beépített ellenállásokat.

Mintakapcsolás

A gombok programozásához az előző fejezetben megismert kapcsolást fogjuk használni:

Mintakapcsolás gombok kezeléséhez

A gombok elrendezésénél jól látszik, hogy a bal oldali esetben a bemenet az ellenálláson keresztül 3,3V-ra, míg a jobb oldalon a GND potenciálra kapcsolódik.

A gombok bekötése a valóságban:

A kapcsolás összeállítása után következzen az első mintaprogram a két nyomógomb kiolvasására.

Gombok állapotának kiolvasása

Az első programban a 17-es, illetve a 27-es GPIO portra( ez sorszám szerint a 11, 13-as tüske) kötünk egy-egy nyomógombot, mindkettőt külső ellenállásokkal. Erre utal a parancsban a „notpulled” beállítás.

A gombokhoz egy-egy változót rendel a program (gom1, gomb2), amik alapértéke leolvasható a kijelzőn:

Alaphelyzetben az 1-es gomb logikai magas, a 2-es pedig logikai 0 szinten van.

A két bemenet értékét egy „mindig” hurokban kérdezzük le, és az aktuális szintnek megfelelően állítjuk be a változó tartalmát (0/1).

Gombok és ledek

A következő programban összekapcsoljuk a bemeneteket és a kimeneteket, a gombokat a 17-es illetve a 27-es, a ledeket pedig a 22-es, illetve a 23-as GPIO portokra kötjük (sorszámozás szerint 11, 13, illetve 15, 16-os tüske).

Mintaprogram

A mintaprogram az előzőhöz képest nem csak a változók, hanem azzal párhuzamosan a definiált kimenetek értékét is átbillenti, így a ledeken láthatjuk, hogy melyik gomb lett lenyomva.

Váltókapcsoló

A gyakorlati életben sokszor van arra igény, hogy egy készüléket, lámpát, motort, stb… egy darab nyomógombbal (tehát ami „temporary” műkdésű) be, majd ki tudjunk kapcsolni. Ezt a megoldást váltó (toggle) kapcsolónak nevezzük. A program működésének lényege, hogy indításkor beállítjuk a változó, és a kimenet alaphelyzetét (logikai alacsony szint), valamint definiáljuk a bemenet sorszámát, és üzemmódját. Ezt az eljárást inicializálásnak hívjuk.

Inicializálás

Az inicializálás után indul a program, aminek lényege, hogy minden egyes gomblenyomás átbillenti a gomb1 változó értékét. Így a gombnyomás pillanatában le tudjuk kérdezni, hogy mi volt a gomb előző állapota (ki- vagy bekapcsolás) és ehhez képest kapcsoljuk a kimenet logikai szintjét, azaz a led-et.

Az téma előző fejezete itt található