Hi,
I'm having a problem with interrupts. I have a Pi 3 Mod B connected to a PiRack with 3 PiFaces installed; the PiFaces are set to addresses 0, 1 and 2. I installed Raspbian Jessie and all updates plus the pifacedigitalio packages on the Pi, then ran 'sudo apt-get update/upgrade' to update everything. I also ensured the SPI was enabled using raspi-config. The PiRack jumpers are set to external power for all slots, and both the PiRack and the Pi are powered from a common 5V/4A switched power supply. Nothing else is plugged into the Pi (e.g. USB, HDMI, etc.). The SPI jumpers on the PiRack are J1/3/5/7 set to 2-3 and J2/4/6/8 set to 1-2. I modified the blink.py program to test it all out:
from time import sleep
import pifacedigitalio
DELAY = 1.0 # seconds
def int_event0(event):
print('In interrupt event 0: pin - ' + str(event.pin_num) + ', dir - ' + str(event.direction))
def int_event1(event):
print('In interrupt event 1: pin - ' + str(event.pin_num) + ', dir - ' + str(event.direction))
def int_event2(event):
print('In interrupt event 2: pin - ' + str(event.pin_num) + ', dir - ' + str(event.direction))
def main():
pifacedigitalio.init()
pf0 = pifacedigitalio.PiFaceDigital(hardware_addr=0)
listener0 = pifacedigitalio.InputEventListener(chip=pf0)
listener0.register(0, pifacedigitalio.IODIR_FALLING_EDGE, int_event0, settle_time=0.1)
listener0.register(1, pifacedigitalio.IODIR_FALLING_EDGE, int_event0, settle_time=0.1)
listener0.register(2, pifacedigitalio.IODIR_FALLING_EDGE, int_event0, settle_time=0.1)
listener0.register(3, pifacedigitalio.IODIR_FALLING_EDGE, int_event0, settle_time=0.1)
listener0.activate()
pf1 = pifacedigitalio.PiFaceDigital(hardware_addr=1)
listener1 = pifacedigitalio.InputEventListener(chip=pf1)
listener1.register(0, pifacedigitalio.IODIR_FALLING_EDGE, int_event1, settle_time=0.1)
listener1.register(1, pifacedigitalio.IODIR_FALLING_EDGE, int_event1, settle_time=0.1)
listener1.register(2, pifacedigitalio.IODIR_FALLING_EDGE, int_event1, settle_time=0.1)
listener1.register(3, pifacedigitalio.IODIR_FALLING_EDGE, int_event1, settle_time=0.1)
listener1.activate()
pf2 = pifacedigitalio.PiFaceDigital(hardware_addr=2)
listener2 = pifacedigitalio.InputEventListener(chip=pf2)
listener2.register(0, pifacedigitalio.IODIR_FALLING_EDGE, int_event2, settle_time=0.1)
listener2.register(1, pifacedigitalio.IODIR_FALLING_EDGE, int_event2, settle_time=0.1)
listener2.register(2, pifacedigitalio.IODIR_FALLING_EDGE, int_event2, settle_time=0.1)
listener2.register(3, pifacedigitalio.IODIR_FALLING_EDGE, int_event2, settle_time=0.1)
listener2.activate()
while True:
pf0.leds[7].toggle()
pf1.leds[7].toggle()
pf2.leds[7].toggle()
sleep(DELAY)
if name == "main":
main()
When I run it as 'sudo python3 blink.py' the LEDs on all 3 PiFaces start blinking, but when I press any of the 4 buttons on the PiFaces (which should generate interrupts) nothing happens. Any suggestions?
Thanks