Bemerkung
Hallo und willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Gemeinschaft auf Facebook! Tauchen Sie tiefer ein in die Welt von Raspberry Pi, Arduino und ESP32 mit anderen Enthusiasten.
Warum beitreten?
Expertenunterstützung: Lösen Sie Nachverkaufsprobleme und technische Herausforderungen mit Hilfe unserer Gemeinschaft und unseres Teams.
Lernen & Teilen: Tauschen Sie Tipps und Anleitungen aus, um Ihre Fähigkeiten zu verbessern.
Exklusive Vorschauen: Erhalten Sie frühzeitigen Zugang zu neuen Produktankündigungen und exklusiven Einblicken.
Spezialrabatte: Genießen Sie exklusive Rabatte auf unsere neuesten Produkte.
Festliche Aktionen und Gewinnspiele: Nehmen Sie an Gewinnspielen und Feiertagsaktionen teil.
👉 Sind Sie bereit, mit uns zu erkunden und zu erschaffen? Klicken Sie auf [hier] und treten Sie heute bei!
2.1.6 Drehgebermodul
Einführung
In diesem Projekt lernen Sie den Drehgeber kennen. Ein Drehgeber ist ein elektronischer Schalter mit einer Reihe regelmäßiger Impulse in einer streng zeitlichen Abfolge. In Kombination mit einem IC können damit Inkrement-, Dekrement-, Seitenwechsel- und andere Operationen wie Mausscrollen, Menüauswahl usw. durchgeführt werden.
Benötigte Komponenten
Für dieses Projekt benötigen wir die folgenden Komponenten.
Es ist definitiv praktisch, ein ganzes Kit zu kaufen, hier ist der Link:
Name |
ARTIKEL IN DIESEM KIT |
LINK |
|---|---|---|
Raphael Kit |
337 |
Sie können sie auch einzeln über die untenstehenden Links kaufen.
KOMPONENTENBESCHREIBUNG |
KAUF-LINK |
|---|---|
Schaltplan
Experimentelle Verfahren
Schritt 1: Schalten Sie den Stromkreis.
In diesem Beispiel können wir den Drehgeber-Pin direkt mit dem Raspberry Pi über ein Steckbrett und ein 40-poliges Kabel verbinden, verbinden Sie GND des Drehgebers mit GND, 「+」mit 5V, SW mit digitalem GPIO27, DT mit digitalem GPIO18 und CLK mit digitalem GPIO 17.
Schritt 2: Öffnen Sie die Code-Datei.
cd ~/raphael-kit/python/
Schritt 3: Ausführen.
sudo python3 2.1.6_RotaryEncoder.py
Sie werden die Zählung in der Konsole sehen. Wenn Sie den Drehgeber im Uhrzeigersinn drehen, wird die Zählung erhöht; drehen Sie ihn gegen den Uhrzeigersinn, wird die Zählung verringert. Wenn Sie den Schalter am Drehgeber drücken, wird der Zählwert auf null zurückgesetzt.
Code
Bemerkung
Sie können den untenstehenden Code Ändern/Zurücksetzen/Kopieren/Ausführen/Stoppen. Bevor Sie das tun, müssen Sie zum Quellcode-Pfad wie raphael-kit/python wechseln. Nach dem Ändern des Codes können Sie ihn direkt ausführen, um das Ergebnis zu sehen.
#!/usr/bin/env python3
import RPi.GPIO as GPIO
import time
clkPin = 17 # CLK Pin
dtPin = 18 # DT Pin
swPin = 27 # Button Pin
globalCounter = 0
flag = 0
Last_dt_Status = 0
Current_dt_Status = 0
def setup():
GPIO.setmode(GPIO.BCM) # Numbers GPIOs by physical location
GPIO.setup(clkPin, GPIO.IN) # input mode
GPIO.setup(dtPin, GPIO.IN)
GPIO.setup(swPin, GPIO.IN, pull_up_down=GPIO.PUD_UP)
def rotaryDeal():
global flag
global Last_dt_Status
global Current_dt_Status
global globalCounter
Last_dt_Status = GPIO.input(dtPin)
while(not GPIO.input(clkPin)):
Current_dt_Status = GPIO.input(dtPin)
flag = 1
if flag == 1:
flag = 0
if (Last_dt_Status == 0) and (Current_dt_Status == 1):
globalCounter = globalCounter - 1
if (Last_dt_Status == 1) and (Current_dt_Status == 0):
globalCounter = globalCounter + 1
def swISR(channel):
global globalCounter
globalCounter = 0
def loop():
global globalCounter
tmp = 0 # Rotary Temperary
GPIO.add_event_detect(swPin, GPIO.FALLING, callback=swISR)
while True:
rotaryDeal()
if tmp != globalCounter:
print ('globalCounter = %d' % globalCounter)
tmp = globalCounter
def destroy():
GPIO.cleanup() # Release resource
if __name__ == '__main__': # Program start from here
setup()
try:
loop()
except KeyboardInterrupt: # When 'Ctrl+C' is pressed, the child program destroy() will be executed.
destroy()
Code-Erklärung
Lese den dtPin-Wert, wenn clkPin niedrig ist.
Wenn clkPin hoch ist und dtPin von niedrig auf hoch wechselt, verringert sich der Zähler, ansonsten erhöht sich der Zähler.
swPin gibt einen niedrigen Wert aus, wenn die Welle gedrückt wird.
Daraus ergibt sich der unten dargestellte Programmablauf: