Kampi
12.04.2013, 17:23
Heyho,
da ich schon öfters nach Interrupts für das Raspberry Pi gefragt wurde, wollte ich hier mal eine Lösung präsentieren.
Dieses kleine Pythonprogramm aktiviert den Interrupt an GPIO 24 und ruft bei jeder steigenden Flanke die ISR auf.
Ein Software Debounce ist ebenfalls eingebaut.
import RPi.GPIO as GPIO
import time
# Variable Counter definieren
Counter = 0
# Variable zum debouncen
Debounce = 0
# SoC als Pinreferenz waehlen
GPIO.setmode(GPIO.BCM)
# Pin 24 vom SoC als Input deklarieren und Pull-Down Widerstand aktivieren
GPIO.setup(24, GPIO.IN, pull_up_down = GPIO.PUD_DOWN)
# ISR
def Interrupt(channel):
# Zugriff auf globale Variablen
global Counter
# Counter um eins erhoehen und ausgeben
Counter = Counter + 1
print "Counter " + str(Counter)
# Interrupt Event hinzufuegen. Pin 24, auf steigende Flanke reagieren und ISR "Interrupt" deklarieren
GPIO.add_event_detect(24, GPIO.RISING, callback = Interrupt, bouncetime = 200)
# Endlosschleife
while True:
time.sleep(1)
Ach eine Sache noch....dieses Programm funktioniert erst ab einer RPi.GPIO Version von 0.5.2a.
da ich schon öfters nach Interrupts für das Raspberry Pi gefragt wurde, wollte ich hier mal eine Lösung präsentieren.
Dieses kleine Pythonprogramm aktiviert den Interrupt an GPIO 24 und ruft bei jeder steigenden Flanke die ISR auf.
Ein Software Debounce ist ebenfalls eingebaut.
import RPi.GPIO as GPIO
import time
# Variable Counter definieren
Counter = 0
# Variable zum debouncen
Debounce = 0
# SoC als Pinreferenz waehlen
GPIO.setmode(GPIO.BCM)
# Pin 24 vom SoC als Input deklarieren und Pull-Down Widerstand aktivieren
GPIO.setup(24, GPIO.IN, pull_up_down = GPIO.PUD_DOWN)
# ISR
def Interrupt(channel):
# Zugriff auf globale Variablen
global Counter
# Counter um eins erhoehen und ausgeben
Counter = Counter + 1
print "Counter " + str(Counter)
# Interrupt Event hinzufuegen. Pin 24, auf steigende Flanke reagieren und ISR "Interrupt" deklarieren
GPIO.add_event_detect(24, GPIO.RISING, callback = Interrupt, bouncetime = 200)
# Endlosschleife
while True:
time.sleep(1)
Ach eine Sache noch....dieses Programm funktioniert erst ab einer RPi.GPIO Version von 0.5.2a.