II. alkalom
Digitális bemenet, le/fel húzó ellenállás
A keddi okításon foglalkoztunk a digitális és analóg bemenetekkel és azok stabil vagy "lebegő" változatával.
Ha egy mikrovezérlő egyik lábát bemenetre állítom, például a pinMode(A0,INPUT) paranccsal, akkor onnantól gondoskodnom kell arról, hogy ez a bemenet csak föld (GND) vagy táp (5V) feszültség értéken legyen. Ha nem kötök rá semmit, vagy előállhat olyan helyzet, amikor semelyik fix potenciálra nem csatlakozik, akkor az a bemenet lebeg, és az onnan jövő információ értékelhetetlen, hisz minden zavart összeszed a környezetből.
A kódunk így néz ki:
Tehát bemenetnek az A0-ás lábat használom (ami képes analóg és digitális jelek fogadására is), kimenetnek pedig a jól megszokott 13-as lábunkat, amire egy 220 Ohm ellenálláson keresztül egy ledet kötök.
Ha az A0-ás lábra nem kötök semmit, vagy csak egy sima vezetéket ami sehova nem csatlakozik (tulajdonképpen antenna lesz), akkor mivel az minden zavart összeszed, hol magas, hol alacsony értékre kerül a bemenet, tehát a ledet is vagy bekapcsolja vagy sem - de ez kontrollálhatatlan, hisz teljesen a környezeti zavaroktól függ!
Kísérlet gyanánt, az A0-ás lábat ha fixen 5V-re kötöm (rádugom a próbapanel piros sorába), az már magas szinten stabilizálja a bemenetet, tehát a led folyamatosan világítani fog - és már nem lesz érzékeny a zavarokra, ahogyan fordítva is: ha fixen a GND-re kötöm a vezetéket a led elalszik, és úgy is marad, hisz a bemenet stabil GND állapotba kerül.
Ha tudjuk végezzük el újra ezt a kísérletet, hogy biztosan értsük, hogy mi történik, és lássuk, hogy miért kell elkerülni a lebegő állapotot
(viszont gyerekekkel látványos "elektroszmog jelzőt" lehet így készíteni, mert a fénycsövek, hívásban lévő telefonok és egyéb nagyfrekvenciás zavaró jelek remekül "megbolondítják" a ledet)
Ezután bővítsük ki a kapcsolást egy nyomógombbal és egy 10Kohm-os ellenállással a rajz szerint:
(ne felejtsük el, hogy a készletben kapott nyomógomb keresztben kapcsol, tehát az egymással átlósan szemben lévő lábait használjuk - mint a rajzon!)
A rajz szerint most az A0 bemenet egy 10K ellenálláson keresztül folyamatosan "földre van húzva", tehát ha a nyomógomb nincs benyomva, akkor stabil alacsony állapotban van, ha pedig a nyomógombot benyomjuk, akkor az 5V tápfeszültség kerül rá. Jelen esetben ez egy pozitív kapcsolt, földre húzott stabil bemenet!
(mivel az ellenállás elég nagy, ezért a nyomógomb benyomásakor nem keletkezik rövidzár, hisz az ellenálláson folyó áram nagyon kevés, így ezzel nem kell foglalkoznunk)
Ennek a fordítottja lenne, ha a 10K ellenállás nem a GND-re, hanem az 5V-ra lenne kötve, és a nyomógombom pedig nem az 5V-ot, hanem a GND-t kapcsolná. Akkor egy föld kapcsolt, tápra húzott bemenetet kapok, ami alap állapotban HIGH, tehát magas szinten van, a nyomógomb benyomásával pedig LOW, alacsony szintre kerül (amíg nyomom)
Mindkét eset helyes, mert mindkettő folyamatos stabil állapotot eredményez. A különbség csak annyi, hogy amikor a programban a bemenetet vizsgálom, akkor azt kell figyelnem, hogy HIGH vagy LOW állapotban van-e a nyomógomb benyomva.
Tehát, földre húzott, táp kapcsolt esetben (első variáció):
if (digitalRead(A0,HIGH)) { digitalWrite(13,HIGH) } // - ha benyomom a gombot a led világít
else { digtalWrite(13,LOW); } // - különben nem világít
Ugyan ez tápra húzott, földkapcsolt estben:
if (digitalRead(A0,LOW)) { digitalWrite(13,HIGH) } // - ha benyomom a gombot a led világít
else { digtalWrite(13,LOW); } // - különben nem világít