Änderungen

KY-040 Kodierter Drehschalter (Rotary Encoder)

1.638 Byte hinzugefügt, 15:01, 8. Apr. 2016
'''Für die serielle Ausgabe: Baudrate= 115200'''
<pre class="brush:cpp"> // Initialisierung benötigter Variablen
int Counter = 0;
boolean Richtung;
==Codebeispiel Raspberry Pi==
Programmierbeispiel Das Programm überprüft, falls eine Änderung der Pin-Zustände sich ereignet hat, welcher der beiden Pins sich zuerst geändert hatte, was auf die Drehrichtung schließen lässt.Diese Information erhält man, in dem man einen der Programmiersprache Pythonbeiden Pin-Werte aus einem vorherigen Durchlauf mit dem Wert des aktuellen Durchlaufs vergleicht.
Nachdem die Richtung festgestellt wurde, werden die Schritte von der Startposition an gezählt und ausgegeben.Ein Drücken auf den Knopf des Drehgebers resettet die aktuelle Position. <pre class="brush:py"># coding=utf-8# Benoetigte Module werden importiert und eingerichtet
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
# Hier wird der werden die Eingangs-Pin Pins deklariert, an dem der Sensor angeschlossen ist. Zusaetzlich wird auch der PullUP Widerstand am Eingang aktiviertGPIO_PIN PIN_CLK = 2416PIN_DT = 15BUTTON_PIN = 14 GPIO.setup(GPIO_PINPIN_CLK, GPIO.IN, pull_up_down = GPIO.PUD_UP) GPIO.setup(PIN_DT, GPIO.IN, pull_up_down = GPIO.PUD_UP)print "Sensor-Test [druecken Sie STRG+CGPIO.setup(BUTTON_PIN, um den Test zu beenden]"GPIO.IN, pull_up_down = GPIO.PUD_UP) # Benötigte Variablen werden initialisiertCounter = 0Richtung = TruePIN_CLK_LETZTER = 0PIN_CLK_AKTUELL = 0delayTime = 0.01 # Initiales Auslesen des Pin_CLKPIN_CLK_LETZTER = GPIO.input(PIN_CLK)
# Diese AusgabeFunktion wird bei Signaldetektion ausgefuehrt
def ausgabeFunktion(null):
global Counter  PIN_CLK_AKTUELL = GPIO.input(PIN_CLK)  if PIN_CLK_AKTUELL != PIN_CLK_LETZTER:  printif GPIO.input(PIN_DT) != PIN_CLK_AKTUELL: Counter += 1 Richtung = True; else: Richtung = False Counter = Counter - 1  print "Signal Drehung erkannt: if Richtung: print "Drehrichtung: Im Uhrzeigersinn" else: print "Drehrichtung: Gegen den Uhrzeigersinn"  print "Aktuelle Position: ", Counter print "------------------------------" def CounterReset(null): global Counter  print "Position resettet!" print "------------------------------" Counter = 0 # Beim Detektieren eines Signals Um einen Debounce direkt zu integrieren, werden die Funktionen zur Ausgabe mittels# CallBack-Option vom GPIO Python Modul initialisiertGPIO.add_event_detect(fallende SignalflankePIN_CLK, GPIO.BOTH, callback=ausgabeFunktion, bouncetime=50) wird die Ausgabefunktion ausgeloestGPIO.add_event_detect(GPIO_PINBUTTON_PIN, GPIO.FALLING, callback=ausgabeFunktionCounterReset, bouncetime=10050)  print "Sensor-Test [druecken Sie STRG+C, um den Test zu beenden]" 
# Hauptprogrammschleife
try:
while True:
time.sleep(1delayTime)
# Aufraeumarbeiten nachdem das Programm beendet wurde
except KeyboardInterrupt:
GPIO.cleanup()
 
</pre>
{| style="height: 58px; padding-left: 30px;" width="228"
|-
||SignalCLK
||=
||GPIO24GPIO16||[Pin 1836]
|-
||DT||=||GPIO15||[Pin 10]|-||SW||=||GPIO14||[Pin 8]|-||+V
||=
||3,3V
'''Beispielprogramm Download'''
[[Medium:SensorTest_RPiKY-040_RPi_RotaryEncoder.zip|SensorTest_RPiKY-040_RPi_RotaryEncoder.zip]]
Zu starten mit dem Befehl:
<pre class="brush:bash">sudo python SensorTest_RPiKY-040_RPi_RotaryEncoder.py
</pre>
Bürokrat, Administrator
611
Bearbeitungen