(İmaj kredisi: Tom’un Donanımı)
Devre son derece basit, sadece GPIO 12 ve GND’ye bir düğme bağlamamız gerekiyor. GPIO 12, yüksek çekmeye ayarlanacak ve düğmeye basıldığında pimi GND’ye bağlayacaktır. Bu, durumu düşük olarak değiştirmek için pimi tetikleyecektir ve bunu, çalkalayıcı kodu için bir geçiş olarak kullanıyoruz. Bu proje, önceki sürümdeki kodu temel alacaktır.
1. Board ve digitalio için iki ekstra ithalat ekleyin. Bu iki kitaplık GPIO’ya erişim sağlar ve GPIO pinlerinin durumunu ayarlamamızı sağlar.
import usb_hid
from adafruit_hid.mouse import Mouse
from time import sleep
import board
from digitalio import DigitalInOut, Direction, Pull
2. Bir nesne oluşturun, düğmeyi tıklayın ve bunu GPIO12 olarak ayarlayın.
m = Mouse(usb_hid.devices)
button = DigitalInOut(board.GP12)
3. GPIO 12’yi bir giriş olarak ayarlayın ve pimi yukarı çekin. Bazı GPIO pinleri, yüksek 3.3V’a veya düşük GND’ye çekebileceğimiz dahili bir dirence sahiptir.
button.direction = Direction.INPUT
button.pull = Pull.UP
4. active ve button_press olmak üzere iki değişken oluşturun ve her birine 0 kaydedin. Bu iki değişken, titreştiricinin etkin olup olmadığını ve düğmeye basılıp basılmadığını belirleyerek bir 0 veya 1 saklayacaktır. Kodun başlangıcında ikisi de 0 kullanılarak devre dışı olarak ayarlanır.
active = 0
button_press = 0
5. Kodu çalıştırmak için bir while True döngüsü ekleyin.
while True:
6. Düğmenin durumunu ve aktifte saklanan değeri kontrol eden bir koşullu ifade oluşturun. Düğmeye basıldığında, GPIO 12’nin durumu yüksekten (Doğru) düşüke (Yanlış) değiştirilir. Basıldığında, koşullu ifade aktif olarak saklanan değeri kontrol edecektir. Varsayılan değer 0’dır, yani çalkalayıcı etkin değildir.
if button.value == False and active == 0:
7. Değişkenleri 1 olarak güncelleyin ve ardından Python kabuğuna bir mesaj yazdırın.
active = 1
button_press = 1
print("Turning on")
8. Bu koşul için beş saniyelik bir duraklama ekleyin. Bu, düğmeye basmamız için ve kodun basımı kaydetmesi için bize zaman sağlar ve birden çok düğmeye basılmasını önleyen bol miktarda geri dönme süresi sunar.
sleep(5)
9. Düğmeye o anda basılmadığını ve active ile button_press içinde saklanan değerlerin 1 olduğunu kontrol etmek için bir else if koşulu kullanın. Bu, düğmeye bastığımız ve fare jiggler kodunun çalışmasını istediğimiz anlamına gelir.
elif button.value == True and active == 1 and button_press == 1:
10. Fareyi ekranda hareket ettirmek için fare sallama kodunu yeniden kullanın.
m.move(-100, 0, 0)
print("I am working")
sleep(0.5)
m.move(100, 0, 0)
print("I am so busy")
sleep(0.5)
m.move(0, -100, 0)
print("So much to do")
sleep(0.5)
m.move(0, 100, 0)
print("I need a vacation")
sleep(0.5)
11. Düğmeye basıldığını ve aktif ve button_press’in 1 değerini sakladığını kontrol etmek için başka bir koşullu ifade oluşturun. Bu, kullanıcının jiggler kodunu kapatmak istediği anlamına gelir.
elif button.value == False and active == 1 and button_press == 1:
12. Kullanıcıya bir mesaj yazdırın, ardından beş saniye duraklamadan önce değişkenlerde saklanan değerleri sıfırlayın.
print("Turning off")
active = 0
button_press = 0
sleep(5)
13. Projeyi code.py olarak Raspberry Pi Pico’ya kaydedin ve kart sıfırlanacak ve kodu çalıştıracaktır. Jiggler kodunu açıp kapatmak için düğmeye basın.
Eksiksiz Kod Listesi
import usb_hid
from adafruit_hid.mouse import Mouse
from time import sleep
import board
from digitalio import DigitalInOut, Direction, Pull
m = Mouse(usb_hid.devices)
button = DigitalInOut(board.BUTTON)
button.direction = Direction.INPUT
button.pull = Pull.UP
active = 0
button_press = 0
while True:
if button.value == False and active == 0:
active = 1
button_press = 1
print("Turning on")
sleep(5)
elif button.value == True and active == 1 and button_press == 1:
m.move(-100, 0, 0)
print("I am working")
sleep(0.5)
m.move(100, 0, 0)
print("I am so busy")
sleep(0.5)
m.move(0, -100, 0)
print("So much to do")
sleep(0.5)
m.move(0, 100, 0)
print("I need a vacation")
sleep(0.5)
elif button.value == False and active == 1 and button_press == 1:
print("Turning off")
active = 0
button_press = 0
sleep(5)
Özel Adafruit Biblo QT2040 Versiyonu
(İmaj kredisi: Tom’un Donanımı)
Adafruit’in Trinkey QT2040 Raspberry Pi’nin RP2040’ı tarafından desteklenen bir USB dongle şeklindeki karttır. Kendi başına geleneksel bir GPIO’ya sahip değildir, bunun yerine uyumlu ara panolarla kullanım için bir StemmaQT konektörü kullanır.
Düğme değiştirme kodunun bu özel sürümü, kodu açıp kapatmak için panolarda yerleşik kullanıcı düğmesini (BOOT) ve çalkalayıcının etkin olup olmadığını belirtmek için NeoPixel’i kullanır. Kod büyük ölçüde önceki düğme geçiş koduyla aynıdır, yalnızca düğme referansını (bir CircuitPython soyutlaması) kullanmak ve NeoPixels’i kurmak için değiştirilmiştir.
1. İndir kitaplık paketi Pico’da yüklü olan CircuitPython’un aynı sürümü için. CircuitPython 8’i kurduk, böylece sürüm 8.x için paketi indirdik.
2. Paketi masaüstünüze çıkarın ve sonra lib klasörünü açın içinde bulunur.
3. Aşağıdaki dosyaları / klasörleri bu lib klasöründen CIRCUITPY sürücüsündeki lib klasörüne kopyalayın.
adafruit_hid
adafruit_pixelbuf.mpy
neopixel.mpy
(İmaj kredisi: Tom’un Donanımı)
4. Thonny’de yeni bir dosya açın ve önceki örnekteki kodu kopyalayın.
5. İçe aktarmalarda, NeoPixel kitaplığını içe aktarmak için bir satır ekleyin.
import neopixel
(İmaj kredisi: Tom’un Donanımı)
6. Düğmeyi ayarladıktan sonra, Trinkey QT2040 üzerindeki tek NeoPixel’e bağlantı oluşturmak için yeni bir satır ekleyin.
pixel = neopixel.NeoPixel(board.NEOPIXEL, 1)
(İmaj kredisi: Tom’un Donanımı)
7. Titreştiriciyi açan else if koşuluna ilerleyin. Burada butona basıyoruz ve active ve button_press değişkenleri 1 olarak set ediliyor. Çeyrek parlaklıkta pikseli kırmızıya ayarlamak için bir çizgi ekleyin.
pixel.fill((32, 0, 0))
(İmaj kredisi: Tom’un Donanımı)
8. Jiggler kodunun kapatıldığı yere kadar aşağı kaydırın. Düğmeye basıldığı yer burasıdır ve active ve button_press değişkenleri 1 olarak ayarlanır. NeoPixel’in rengini çeyrek parlaklıkla yeşile çevirin.
pixel.fill((0, 32, 0))
(İmaj kredisi: Tom’un Donanımı)
9. Kodu code.py olarak Adafruit Trinkey QT2040’a kaydedin. Pano sıfırlanacak ve kod başlayacaktır. Kodu değiştirmek için düğmeye basın.
Eksiksiz Kod Listesi
import usb_hid
from adafruit_hid.mouse import Mouse
from time import sleep
import board
from digitalio import DigitalInOut, Direction, Pull
import neopixel
m = Mouse(usb_hid.devices)
button = DigitalInOut(board.BUTTON)
button.direction = Direction.INPUT
button.pull = Pull.UP
pixel = neopixel.NeoPixel(board.NEOPIXEL, 1)
active = 0
button_press = 0
while True:
if button.value == False and active == 0:
active = 1
button_press = 1
print("Turning on")
sleep(5)
elif button.value == True and active == 1 and button_press == 1:
pixel.fill((32, 0, 0))
m.move(-100, 0, 0)
print("I am working")
sleep(0.5)
m.move(100, 0, 0)
print("I am so busy")
sleep(0.5)
m.move(0, -100, 0)
print("So much to do")
sleep(0.5)
m.move(0, 100, 0)
print("I need a vacation")
sleep(0.5)
elif button.value == False and active == 1 and button_press == 1:
pixel.fill((0, 32, 0))
print("Turning off")
active = 0
button_press = 0
sleep(5)
Popular Articles
Latest Articles