LED’ler elektronik sistemlerde sıklıkla kullanılan bileşenlerdir. Her butonun yanında ufak LED’ler bulunabilir. Tek bir LED’in farklı renklerde yanmasını sağlayarak birden fazla LED’in yapacağı işi tek bir LED ile yapmak mümkündür. Bu tipteki LED’lere RGB LED denir. Adını içerisinde bulunan ve kırmızı, yeşil ve mavi renkte yanan üç LED’den alır. En büyük avantajı ise bu 3 renk haricinde birçok rengin yanmasını sağlamasıdır.
Bu projemizde, her programlama dilinde bulunan rastgeleliği anlayacaksınız. PicoBricks modülünde bulunan RGB LED, OLED ekran ve buton ile eğlenceli bir oyun hazırlayacağız.
Detaylar ve Algoritma
Proje, kullanıcının renkleri doğru veya yanlış bilmesi üzerine kurgulanacak. PicoBricks üzerindeki RGB LED üzerinde kırmızı, yeşil, mavi veya beyaz renklerden bazıları rastgele yanacak ve bu dört renkten birinin adı rastgele şekilde ekranda yazacaktır. Kullanıcının cevap vermesi için 1.5 saniye içerisinde butona basması gerekecek. Oyun bu şekilde 10 kere tekrar edecek. LED rengi ve ekranda yazan renk eşleştiğinde butona basarsa veya eşleşmediğinde basmazsa kullanıcı 10 puan kazanacak. Aksi takdirde 10 puan kaybedecek. Oyun sonunda kullanıcının topladığı puan ekranda görüntülenecek.
Bileşenler
1x PicoBricks
Devre Şeması
MicroBlocks Kodları
MicroPython Kodları
Pico'daki donanıma erişmek için makine içe aktarma Pininden,I2C,ADC,PWM #
picobricks'ten importSSD1306_I2C #OLED Ekran Kitaplığı
kullanım süresini içe aktar
picobricks importWS2812 #ws8212 kütüphanesinden
#OLED Ekran Ayarları
GENİŞLİK=128YÜKSEK=64
sda=machine.Pin(4)
scl=machine.Pin(5)
#dijital pin 4 ve 5'iOLED İletişimi için ÇIKIŞ olarak başlat
i2c=machine.I2C(0,sda=sda, scl=scl, freq=1000000)
neo =WS2812(pin_num=6, num_leds=1, parlaklık=0,3)#dijital pin 6'yı NeoPixel için bir ÇIKIŞ olarak başlat
oled =SSD1306_I2C(128,64, i2c)
ldr =ADC(Pin(27))#dijital pin 6'yı NeoPixel için bir ÇIKIŞ olarak başlat
düğme =Pin(10,Pin.IN,Pin.PULL_DOWN)#dijital pin 10'u düğme için bir INPUT olarak başlat
sesli uyarı =PWM(Pin(20, Pin.OUT))#dijital pin 20'yi sesli uyarı için bir ÇIKIŞ olarak başlat
buzzer.freq(1000)SİYAH=(0,0,0)BEYAZ=(255,255,255)
#RGB siyah beyaz renk kodu
oled.fill(0)
oled.show()
neo.pixels_fill(SİYAH)
neo.pixels_show()if ldr.read_u16()<4000:
uyanma = Doğru
başka:
uyanma = Yanlış
while Doğru:while up==Yanlış:
oled.fill(0)
oled.show()
oled.text("İyi geceler",25,32)
oled.show()
#OLED'de göster ve "İyi geceler" yaz
utime.sleep(1)if ldr.read_u16()40000:
uyanma= Yanlış
utime.sleep(1)
#bir saniye bekle
Arduino C Kodları
makineden içe aktarma Pininden,I2Cpicobricks'ten importSSD1306_I2Cimport utime
urandom'u içe aktar
_thread'i içe aktar
picobricks'ten importWS2812WIDTH=128HEIGHT=64
sda=machine.Pin(4)
scl=machine.Pin(5)
i2c=machine.I2C(0,sda=sda, scl=scl, freq=1000000)
ws =WS2812(pin_num=6, num_leds=1, parlaklık=0,3)
oled =SSD1306_I2C(GENİŞLİK, YÜKSEKLİK, i2c)
düğme =Pin(10,Pin.IN,Pin.PULL_DOWN)KIRMIZI=(255,0,0)YEŞİL=(0,255,0)MAVİ=(0,0,255)BEYAZ=(255,255,255)SİYAH=(0,0,0 )
oled.fill(0)
oled.show()
ws.pixels_fill(SİYAH)
ws.pixels_show()
küresel Button_pressed
puan=0
Button_pressed = Yanlış
def random_rgb():
küresel ledrenk
ledcolor=int(urandom.uniform(1,4))if ledcolor ==1:
ws.pixels_fill(KIRMIZI)
ws.pixels_show()
elif led rengi ==2:
ws.pixels_fill(YEŞİL)
ws.pixels_show()
elif led rengi ==3:
ws.pixels_fill(MAVİ)
ws.pixels_show()
elif led rengi ==4:
ws.pixels_fill(BEYAZ)
ws.pixels_show()
def rastgele_metin():
küresel oledtext
oledtext=int(urandom.uniform(1,4))if oledtext ==1:
oled.fill(0)
oled.show()
oled.text("KIRMIZI",45,32)
oled.show()
elif oledmetin ==2:
oled.fill(0)
oled.show()
oled.text("YEŞİL",45,32)
oled.show()
elif oledmetin ==3:
oled.fill(0)
oled.show()
oled.text("MAVİ",45,32)
oled.show()
elif oledmetin ==4:
oled.fill(0)
oled.show()
oled.text("BEYAZ",45,32)
oled.show()
def Button_reader_thread():while True:
küresel Button_pressed
if butonu_basıldı == Yanlış:if butonu.değer()==1:
Button_pressed = Doğru
küresel puan
küresel oledtext
küresel ledrenk
if ledrenk == oledmetin:
puan +=10diğer:
puan -=10
utime.sleep(0,01)
_thread.start_new_thread(button_reader_thread,())
oled.text("Oyun Başlıyor",0,10)
oled.show()
utime.sleep(2)for i inrange(10):for j inrange(10):random_text()random_rgb()
Button_pressed=Yanlış
utime.sleep(1.5)
oled.fill(0)
oled.show()
ws.pixels_fill(SİYAH)
ws.pixels_show()
utime.sleep(1.5)
oled.fill(0)
oled.show()
oled.text("Toplam puanınız:",0,20)
oled.text(str(puan),30,40)
oled.show()