import machine
import time
# MUX kontrol pinleri
mux_s0 = machine.Pin(13, machine.Pin.OUT) # S0 → GP13
mux_s1 = machine.Pin(12, machine.Pin.OUT) # S1 → GP12
mux_s2 = machine.Pin(11, machine.Pin.OUT) # S2 → GP11
mux_s3 = machine.Pin(10, machine.Pin.OUT) # S3 → GP10
# MUX çıkış sinyali - GP28'e güncellenmiş
# GP28 pini giriş olarak ve dahili pull-up direnci etkinleştirilmiş olarak ayarlanır.
# Bu, MUX COM çıkışı herhangi bir yere aktif olarak sürülmediğinde (HIGH veya LOW) pinin HIGH okunacağı anlamına gelir.
mux_sig = machine.Pin(28, machine.Pin.IN, machine.Pin.PULL_UP) # COM → GP28
# MUX enable pini
mux_en = machine.Pin(9, machine.Pin.OUT) # EN → GP9
mux_en.value(0) # MUX'ı etkinleştir (aktif düşük: 0 ile etkinleşir)
def select_mux_channel(channel):
"""
Belirtilen kanalı seçmek için MUX kontrol pinlerini (S0-S3) ayarlar.
Kanal numarası (0-15) 4 bitlik bir değer olarak kontrol pinlerine uygulanır.
"""
mux_s0.value(channel & 0x01) # En düşük bit S0'a
mux_s1.value((channel >> 1) & 0x01) # Sonraki bit S1'e
mux_s2.value((channel >> 2) & 0x01) # Sonraki bit S2'ye
mux_s3.value((channel >> 3) & 0x01) # En yüksek bit S3'e
def read_button(channel):
"""
Belirtilen MUX kanalındaki buton durumunu okur.
Önce kanalı seçer, kısa bir stabilizasyon süresi bekler,
ardından MUX çıkış pinindeki (mux_sig) değeri okur.
Buton basıldığında MUX girişi GND'ye çekileceği için mux_sig LOW (0) olur.
Buton basılı değilse, mux_sig (GP28'deki PULL_UP sayesinde) HIGH (1) olur.
"""
select_mux_channel(channel)
time.sleep_ms(10) # Sinyalin stabil hale gelmesi için kısa bir bekleme
raw_value = mux_sig.value()
# Hata ayıklama için okunan ham değeri yazdır
print(f"Kanal {channel} ham değer: {raw_value}")
return raw_value == 0 # Buton basıldığında (LOW = 0) True döner
# Program başladığında bilgilendirme mesajları
print("MUX Buton Testi - GP28 ile")
print("Butonlara basıp test edin:")
print("- btn1: Kanal 0 (I0)")
print("- btn2: Kanal 1 (I1)")
# Beklenen davranış: Buton basılı değilken COM hattı (GP28) pull-up ile HIGH (1) olmalı,
# buton basıldığında ise seçilen MUX girişi GND'ye çekileceği için COM hattı LOW (0) olmalı.
print("Beklenen: Buton basılmadığında 1, basıldığında 0")
# Ana döngü: Sürekli olarak buton durumlarını kontrol eder ve yazdırır
while True:
btn1_pressed = read_button(0) # Kanal 0'daki btn1'i oku
btn2_pressed = read_button(1) # Kanal 1'deki btn2'yi oku
# Buton basılma durumlarına göre mesaj yazdır
if btn1_pressed:
print(">>> BTN1 BASILDI! <<<")
if btn2_pressed:
print(">>> BTN2 BASILDI! <<<")
# Mevcut buton durumlarını formatlı bir şekilde yazdır
status = f"BTN1: {'BASILI' if btn1_pressed else 'SERBEST'} | BTN2: {'BASILI' if btn2_pressed else 'SERBEST'}"
print(status)
print("---") # Ayırıcı
time.sleep_ms(500) # Döngüler arasında yarım saniye bekleLoading
nokia-5110
nokia-5110
Loading
cd74hc4067
cd74hc4067