class Signal – harici I/O aygıtlarını denetleme ve algılama¶
Signal sınıfı, Pin sınıfının basit bir genişlemesidir. Yalnızca “mutlak” 0 ve 1 durumlarında olabilen Pin’in aksine, bir Signal, ters çevrilirken (aktif düşük) ya da çevrilmezken “öne sürülmüş” (açık) veya “geri çekilmiş” (kapalı) durumlarda olabilir. Başka bir deyişle, Pin işlevselliğine mantıksal tersine çevirme desteği ekler. Bu basit bir ekleme gibi görünse de, MicroPython’un başlıca hedeflerinden biri olan, farklı kartlar arasında taşınabilir bir şekilde geniş bir basit dijital aygıt yelpazesini desteklemek için tam olarak gereken şeydir. Farklı kullanıcıların aktif yüksek veya aktif düşük bir LED’i, normalde açık veya normalde kapalı bir röleyi olup olmadığından bağımsız olarak – her biriyle çalışan, tek ve hoş görünen bir uygulama geliştirebilir ve donanım yapılandırma farklılıklarını uygulamanızın yapılandırma dosyasındaki birkaç satırda yakalayabilirsiniz.
Örnek:
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()
Signal’in mi yoksa Pin’in mi kullanılması gerektiğine ilişkin kılavuz aşağıdadır:
Signal kullanın: LED’ler, çok segmentli göstergeler, röleler, buzzer’lar gibi basit aç/kapa (yazılım PWM dahil!) aygıtlarını denetlemek ya da normalde açık veya normalde kapalı düğmeler, yukarı veya aşağı çekilmiş, Reed anahtarları, nem/alev dedektörleri vb. gibi basit ikili sensörleri okumak istiyorsanız. Özetle, GPIO erişimi gerektiren gerçek bir fiziksel aygıtınız/sensörünüz varsa, muhtemelen bir Signal kullanmalısınız.
Pin kullanın: Daha karmaşık aygıtlarla iletişim kurmak için daha üst düzey bir protokol veya veri yolu uyguluyorsanız.
Pin ile Signal arasındaki ayrım, yukarıdaki kullanım durumlarından ve MicroPython’un mimarisinden gelir: Pin en düşük ek yükü sunar; bu, protokolleri bit-banging yaparken önemli olabilir. Ancak Signal, küçük bir ek yük pahasına Pin’in üzerine ek esneklik ekler (aktif yüksek ile aktif düşük aygıt farklarını Python’da elle uygulamış olsaydınız olacağından çok daha küçük!). Ayrıca Pin, desteklenen her kart için uygulanması gereken düşük düzeyli bir nesnedir, oysa Signal, Pin uygulandığında bedavaya gelen üst düzey bir nesnedir.
Şüpheniz varsa Signal’i bir deneyin! Bir kez daha, geliştiricileri aktif düşük ile aktif yüksek sinyaller gibi heyecan verici olmayan farkları ele alma gereğinden kurtarmak ve diğer kullanıcıların, LED’leri veya röleleri biraz farklı bir şekilde kablolandığı için uygulamanın kendileri için çalışmaması gerçeğinden bunalmak yerine uygulamanızı paylaşıp keyfini çıkarabilmesi için sunulmuştur.
Yapıcılar¶
- class machine.Signal(pin_obj: Pin, *, invert: bool = False)¶
- class machine.Signal(*pin_args: Any, invert: bool = False, **pin_kwargs: Any)
Bir Signal nesnesi oluşturur. Onu oluşturmanın iki yolu vardır:
Mevcut bir Pin nesnesini sarmalayın – evrensel, her kartta çalışır.
Pin yapıcı argümanlarını doğrudan geçirin –
Pintarafından kabul edilen aynı konumsal ve anahtar sözcük argümanları, dahili olarak oluşturulan bir Pin’e iletilir. Hepsinde olmasa da birçok kartta kullanılabilir.
Argümanlar:
pin_obj– sarmalanacak mevcut birPinörneği.pin_args/pin_kwargs– altta yatan pini satır içi oluştururkenPinyapıcısına iletilecek argümanlar.invert–Trueise sinyal ters çevrilir (aktif düşük).
Yöntemler¶
- value(x: Any = None, /) int | None¶
Bu yöntem,
xargümanının sağlanıp sağlanmadığına bağlı olarak sinyalin değerini ayarlamaya ve almaya olanak tanır.Argüman atlanırsa bu yöntem sinyal seviyesini alır; 1 sinyalin öne sürüldüğü (aktif), 0 ise sinyalin etkin olmadığı anlamına gelir.
Argüman sağlanırsa bu yöntem sinyal seviyesini ayarlar.
xargümanı bir boole değerine dönüşen herhangi bir şey olabilir.Truedeğerine dönüşürse sinyal etkindir, aksi takdirde etkin değildir.Sinyalin etkin olması ile altta yatan pindeki gerçek mantık seviyesi arasındaki karşılık, sinyalin ters çevrilip çevrilmediğine (aktif düşük) bağlıdır. Ters çevrilmemiş sinyal için etkin durum mantıksal 1’e, etkin olmayan durum ise mantıksal 0’a karşılık gelir. Ters çevrilmiş/aktif düşük sinyal için etkin durum mantıksal 0’a, etkin olmayan durum ise mantıksal 1’e karşılık gelir.