Hallo,
erstmal danke für die Mühe die sich einige mit Hilfestellungen machen. Normalerweise bringt mich die Suche hier immer an das gewünschte Ziel. Ich habe allerdings gerade ein Problem aus dem ich nicht ganz schlau werde. Ich habe das Programm schon auf das notwendigste reduziert.
So funktionieren es und der Merker wird wenn ich den Taster drücke auf 1 gesetzt und wenn ich den Taster los lasse auf 0
#!/usr/bin/python
import RPi.GPIO as GPIO
import time
# GPIO-Ports
m_br = 0 #button rechts
# GPIO initialisieren
GPIO.setmode(GPIO.BCM)
GPIO.setup(26, GPIO.IN)
# Button rechts
def isr26(channel):
global m_br
if (GPIO.input(26)==GPIO.LOW): #Schalter gedrueckt
m_br = 1
else:
m_br = 0
print "merker br %d" % m_br
print channel
# Interrupts aktivieren
GPIO.add_event_detect(26, GPIO.BOTH, callback = isr26, bouncetime = 50)
# Endlosschleife
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
GPIO.cleanup()
print "\nBye"
Display More
Ausgabe
merker br 1
merker br 0
merker br 1
merker br 0
merker br 1
merker br 0
merker br 1
merker br 0
merker br 1
merker br 0
^C
Bye
Display More
Jetzt füge ich zwei Zeilen Code in den Interrupt ein.
Wie man sieht, ist die Ausgabe des Merkers jetzt immer 0. Sporadisch (ca. jedes 10-20 mal ist er 1)
#!/usr/bin/python
import RPi.GPIO as GPIO
import time
# GPIO-Ports
m_br = 0 #button rechts
# GPIO initialisieren
GPIO.setmode(GPIO.BCM)
GPIO.setup(26, GPIO.IN)
# Button rechts
def isr26(channel):
global m_br
print ("warum")
print channel
if (GPIO.input(26)==GPIO.LOW): #Schalter gedrueckt
m_br = 1
else:
m_br = 0
print "merker br %d" % m_br
# Interrupts aktivieren
GPIO.add_event_detect(26, GPIO.BOTH, callback = isr26, bouncetime = 50)
# Endlosschleife
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
GPIO.cleanup()
print "\nBye"
Display More
warum
26
merker br 0
warum
26
merker br 0
warum
26
merker br 0
warum
26
merker br 0
Display More
Woran kann das liegen? Ein ähnliches Verhalten bekomme ich auch ohne die Print-Befehle, wenn ich z.B. mehr Interrups hinzufüge.
Edit: Pullup-widerstände sind extern verbaut und die Eingänge sind negiert.