3.9. Sklopke i pull otpornici

GPIO izlaz upravlja vanjskim hardverom. GPIO ulaz je suprotno: kamera čita napon na pinu i prijavljuje ga kao 0 ili 1. Najjednostavniji ulazni uređaj je sklopka – a da bi je se moglo pouzdano čitati potreban je jedan dio elektronike uz samu sklopku.

3.9.1. Sklopke i lebdeći ulazi

Sklopka je mehanički kontakt: dva komada metala koja se dodiruju kada je sklopka zatvorena i razdvajaju kada je otvorena. Električki, to je cijeli uređaj. Unutra nema izvora napona; sama sklopka pruža samo „spojeno” ili „nespojeno”.

Spajanje sklopke izravno između GPIO pina i mase znači da je pin:

  • Na 0 V kada je sklopka zatvorena (sada spojena na masu).

  • Lebdeći kada je sklopka otvorena (spojena na ništa).

Lebdeći pin nema definiran napon. Ulaz čita što god se nađe u njegovoj blizini – preslušavanje od obližnjih signala, šum iz napajanja, čak i statiku na prstu blizu žice. value() vraća nepredvidive mješavine 0 i 1 mnogo puta u sekundi.

3.9.2. Pull-up i pull-down otpornici

Rješenje je pull otpornik: otpornik visoke vrijednosti (uobičajeno 10 kΩ do 100 kΩ) koji veže ulaz na poznatu sabirnicu kada je sklopka otvorena.

Dvije sheme sklopa jedna pored druge. Lijevo: pull-up sklop s otpornikom od ulaznog pina prema napajanju i sklopkom od ulaznog pina prema GND. Desno: pull-down sklop s otpornikom od ulaznog pina prema GND i sklopkom od ulaznog pina prema napajanju.

Pull-up (lijevo) i pull-down (desno) konfiguracije za ulaz sklopke.

  • Pull-up. Otpornik veže ulaz na sabirnicu napajanja. Kada je sklopka otvorena, kroz otpornik teče samo mala struja i pin čita visoko. Kada je sklopka zatvorena, ona kratko spaja pin na masu; pin čita nisko. Otpornik ograničava struju koja bi inače tekla od napajanja prema masi kroz zatvorenu sklopku.

  • Pull-down. Zrcalna slika: otpornik veže ulaz na masu, a sklopka se spaja na napajanje. Otvoreno čita nisko, zatvoreno čita visoko.

Pull-up je uobičajenija konvencija – „aktivno nisko” gumbi. Sam MCU pruža ugrađene pull-up i pull-down otpornike koji se mogu omogućiti s Pin.PULL_UP ili Pin.PULL_DOWN, čime se vanjski otpornik u potpunosti uklanja.