3.9. Spínače a pull rezistory

Výstup GPIO řídí externí hardware. Vstup GPIO je opakem: kamera čte napětí na pinu a hlásí jej jako 0 nebo 1. Nejjednodušším vstupním zařízením je spínač – a aby byl spolehlivě čitelný, je kromě samotného spínače potřeba jeden kus elektroniky.

3.9.1. Spínače a plovoucí vstupy

Spínač je mechanický kontakt: dva kusy kovu, které se při sepnutí dotýkají a při rozepnutí oddělí. Elektricky je to celé zařízení. Uvnitř není žádný zdroj napětí; samotný spínač poskytuje pouze „spojeno“ nebo „rozpojeno“.

Zapojení spínače přímo mezi pin GPIO a zem znamená, že pin je:

  • Na 0 V, když je spínač sepnutý (nyní zapojený k zemi).

  • Plovoucí, když je spínač rozepnutý (nezapojený nikam).

Plovoucí pin nemá definované napětí. Vstup čte cokoli, co se kolem něj náhodou vyskytuje – přeslechy z blízkých signálů, šum z napájení, dokonce i statickou elektřinu z prstu blízko vodiče. value() vrací nepředvídatelné směsi 0 a 1 mnohokrát za sekundu.

3.9.2. Pull-up a pull-down rezistory

Řešením je pull rezistor: rezistor s vysokou hodnotou (typicky 10 kΩ až 100 kΩ), který připojí vstup ke známé sběrnici, když je spínač rozepnutý.

Dvě schémata obvodů vedle sebe. Vlevo: pull-up obvod s rezistorem od vstupního pinu nahoru k napájení a spínačem od vstupního pinu dolů k GND. Vpravo: pull-down obvod s rezistorem od vstupního pinu dolů k GND a spínačem od vstupního pinu nahoru k napájení.

Konfigurace pull-up (vlevo) a pull-down (vpravo) pro vstup spínače.

  • Pull-up. Rezistor připojuje vstup k napájecí sběrnici. Když je spínač rozepnutý, rezistorem protéká jen malý proud a pin čte vysoko. Když je spínač sepnutý, zkratuje pin k zemi; pin čte nízko. Rezistor omezuje proud, který by jinak tekl z napájení k zemi přes sepnutý spínač.

  • Pull-down. Zrcadlový obraz: rezistor připojuje vstup k zemi a spínač se připojuje k napájení. Rozepnuto čte nízko, sepnuto vysoko.

Pull-up je častější konvence – tlačítka „aktivní v nule“. Samotný MCU poskytuje vestavěné pull-up a pull-down rezistory, které lze povolit pomocí Pin.PULL_UP nebo Pin.PULL_DOWN, čímž externí rezistor zcela odpadá.