07.08.2015, 18:38
Was nehmt ihr für Rotary Encoder? Oder gar keine?
Ich habe diese hier (http://www.exp-tech.de/rotary-encoder-illuminated-rgb) bestellt, kriege sie aber irgendwie nicht zum Laufen. Angehängter Code (aus dem C-Code von https://www.raspberrypi.org/forums/viewt...09#p662694 übersetzt) ist zum Testen, aber wenn ich mir mit "print" mal Werte ausgeben lasse, sind die nur sehr sporadisch. Zum Einstellen der Lautstärke ist das äußerst ungeeignet.
Ich hatte mir dann auch noch die KY-040 (um genau zu sein diese hier: http://www.ebay.de/itm/221729153075) bestellt, die funktionieren zumindest mit dem Skript von Andrei. Aber dafür habe ich noch keine Aufsätze gefunden.
Habt ihr einen Tipp für mich?
Ich habe diese hier (http://www.exp-tech.de/rotary-encoder-illuminated-rgb) bestellt, kriege sie aber irgendwie nicht zum Laufen. Angehängter Code (aus dem C-Code von https://www.raspberrypi.org/forums/viewt...09#p662694 übersetzt) ist zum Testen, aber wenn ich mir mit "print" mal Werte ausgeben lasse, sind die nur sehr sporadisch. Zum Einstellen der Lautstärke ist das äußerst ungeeignet.
Ich hatte mir dann auch noch die KY-040 (um genau zu sein diese hier: http://www.ebay.de/itm/221729153075) bestellt, die funktionieren zumindest mit dem Skript von Andrei. Aber dafür habe ich noch keine Aufsätze gefunden.
Habt ihr einen Tipp für mich?
Code:
import RPi.GPIO as GPIO
import time
ENCODER_A = 24
ENCODER_B = 23
BUTTON = 25
RED = 22
BLUE = 17
GREEN = 27
encoderPos = 0
colorRed = 0
colorGreen = 0
colorBlue = 0
adjustMode = 0
def encoderPulse(pin):
global encoderPos
inc = 0
other = 0
if pin == ENCODER_A:
other = GPIO.input(ENCODER_B)
inc = GPIO.input(ENCODER_A)
elif pin == ENCODER_B:
other = GPIO.input(ENCODER_A)
inc = -GPIO.input(ENCODER_B)
if other > 0:
encoderPos += inc
if other > 0:
encoderPos += inc
else:
encoderPos -= inc
if encoderPos < 0:
encoderPos = 0
if encoderPos > 255:
encoderPos = 255
def buttonPress(pin):
global adjustMode, colorRed, colorGreen, colorBlue, encoderPos
adjustMode += 1
if adjustMode == 0:
encoderPos = colorRed
elif adjustMode == 1:
encoderPos = colorGreen
elif adjustMode == 2:
encoderPos = colorBlue
else:
adjustMode = 0
def main():
global adjustMode, colorRed, colorGreen, colorBlue, encoderPos
pos = 0
colorRed = 80
colorGreen = 180
colorBlue = 190
adjustMode = 0
pos = colorRed
encoderPos = pos
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(ENCODER_A, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(ENCODER_B, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(BUTTON, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(RED, GPIO.OUT)
GPIO.setup(BLUE, GPIO.OUT)
GPIO.setup(GREEN, GPIO.OUT)
GPIO.PWM(RED, 255 - colorRed)
GPIO.PWM(BLUE, 255 - colorBlue)
GPIO.PWM(GREEN, 255 - colorGreen)
GPIO.add_event_detect(ENCODER_A, GPIO.BOTH, callback=encoderPulse)
GPIO.add_event_detect(ENCODER_B, GPIO.BOTH, callback=encoderPulse)
GPIO.add_event_detect(BUTTON, GPIO.BOTH, callback=buttonPress)
while 1:
if pos != encoderPos:
pos = encoderPos
if adjustMode == 0:
colorRed = pos
elif adjustMode == 1:
colorGreen = pos
elif adjustMode == 2:
colorBlue = pos
else:
adjustMode = 0
GPIO.PWM(RED, 255 - colorRed)
GPIO.PWM(GREEN, 255 - colorGreen)
GPIO.PWM(BLUE, 255 - colorBlue)
time.sleep(0.02)
GPIO.cleanup()
main()