class Signal – ohjaa ja aisti ulkoisia I/O-laitteita¶
Signal-luokka on yksinkertainen laajennus Pin -luokasta. Toisin kuin Pin, joka voi olla vain ”absoluuttisissa” 0- ja 1-tiloissa, Signal voi olla ”asetetussa” (päällä) tai ”poistetussa” (pois) tilassa, samalla ollen käännetty (active-low) tai ei. Toisin sanoen se lisää loogisen kääntämisen tuen Pin-toiminnallisuuteen. Vaikka tämä saattaa vaikuttaa yksinkertaiselta lisäykseltä, se on juuri se, mitä tarvitaan tukemaan laajaa valikoimaa yksinkertaisia digitaalisia laitteita eri korttien välillä siirrettävällä tavalla, mikä on yksi MicroPythonin päätavoitteista. Riippumatta siitä, onko eri käyttäjillä active-high- vai active-low-LED, normaalisti auki vai normaalisti kiinni oleva rele - voit kehittää yhden, hyvännäköisen sovelluksen, joka toimii kunkin niistä kanssa, ja kaapata laitteistokokoonpanon erot muutamalla rivillä sovelluksesi konfiguraatiotiedostossa.
Esimerkki:
from machine import Pin, Signal
# Suppose you have an active-high LED on pin 0
led1_pin = Pin(0, Pin.OUT)
# ... and active-low LED on pin 1
led2_pin = Pin(1, Pin.OUT)
# Now to light up both of them using Pin class, you'll need to set
# them to different values
led1_pin.value(1)
led2_pin.value(0)
# Signal class allows to abstract away active-high/active-low
# difference
led1 = Signal(led1_pin, invert=False)
led2 = Signal(led2_pin, invert=True)
# Now lighting up them looks the same
led1.value(1)
led2.value(1)
# Even better:
led1.on()
led2.on()
Seuraavassa on ohje siitä, milloin Signalia ja milloin Pinia tulisi käyttää:
Käytä Signalia: Jos haluat ohjata yksinkertaisia päälle/pois (mukaan lukien ohjelmistollinen PWM!) -laitteita, kuten LEDejä, monisegmenttisiä ilmaisimia, releitä, summereita, tai lukea yksinkertaisia binäärisensoreita, kuten normaalisti auki tai normaalisti kiinni olevia painikkeita, ylös tai alas vedettyjä, Reed-kytkimiä, kosteus-/liekkitunnistimia jne. Yhteenvetona, jos sinulla on todellinen fyysinen laite/sensori, joka vaatii GPIO-pääsyn, sinun tulisi todennäköisesti käyttää Signalia.
Käytä Pinia: Jos toteutat korkeamman tason protokollan tai väylän kommunikoidaksesi monimutkaisempien laitteiden kanssa.
Jako Pinin ja Signalin välillä juontuu yllä olevista käyttötapauksista ja MicroPythonin arkkitehtuurista: Pin tarjoaa pienimmän yleisrasituksen, mikä voi olla tärkeää bit-banging-protokollissa. Mutta Signal lisää lisäjoustavuutta Pinin päälle pienen yleisrasituksen kustannuksella (paljon pienemmän kuin jos toteuttaisit active-high- vs active-low-laite-erot Pythonissa käsin!). Lisäksi Pin on matalan tason olio, joka on toteutettava jokaiselle tuetulle kortille, kun taas Signal on korkean tason olio, joka tulee ilmaiseksi, kun Pin on toteutettu.
Jos olet epävarma, kokeile Signalia! Vielä kerran, se on tarjottu säästämään kehittäjiä tarpeelta käsitellä epäkiinnostavia eroja kuten active-low vs active-high -signaalit, ja antamaan muiden käyttäjien jakaa ja nauttia sovelluksestasi sen sijaan, että he turhautuisivat siihen, ettei se toimi heillä yksinkertaisesti siksi, että heidän LEDinsä tai releensä on johdotettu hieman eri tavalla.
Rakentajat¶
- class machine.Signal(pin_obj: Pin, *, invert: bool = False)¶
- class machine.Signal(*pin_args: Any, invert: bool = False, **pin_kwargs: Any)
Luo Signal-olion. Sen rakentamiseen on kaksi tapaa:
Kääri olemassa oleva Pin-olio – yleiskäyttöinen, toimii millä tahansa kortilla.
Anna Pin-rakentajan argumentit suoraan – samat positionaaliset ja avainsana-argumentit, jotka
Pinhyväksyy, välitetään sisäisesti luodulle Pinille. Käytettävissä monilla, mutta ei kaikilla korteilla.
Argumentit:
pin_obj– olemassa olevaPin-instanssi, joka kääritään.pin_args/pin_kwargs–Pin-rakentajalle välitettävät argumentit, kun taustalla oleva nasta rakennetaan rivillä.invert– josTrue, signaali on käännetty (active low).
Metodit¶
- value(x: Any = None, /) int | None¶
Tämä metodi mahdollistaa signaalin arvon asettamisen ja hakemisen sen mukaan, annetaanko argumentti
xvai ei.Jos argumentti jätetään pois, tämä metodi hakee signaalitason, jossa 1 tarkoittaa, että signaali on asetettu (aktiivinen) ja 0 - signaali on epäaktiivinen.
Jos argumentti annetaan, tämä metodi asettaa signaalitason. Argumentti
xvoi olla mitä tahansa, mikä muuntuu totuusarvoksi. Jos se muuntuu arvoksiTrue, signaali on aktiivinen, muuten se on epäaktiivinen.Vastaavuus signaalin aktiivisena olemisen ja taustalla olevan nastan todellisen loogisen tason välillä riippuu siitä, onko signaali käännetty (active-low) vai ei. Kääntämättömällä signaalilla aktiivinen tila vastaa loogista 1:tä, epäaktiivinen - loogista 0:aa. Käännetyllä/active-low-signaalilla aktiivinen tila vastaa loogista 0:aa, kun taas epäaktiivinen - loogista 1:tä.