Skip to content

Instantly share code, notes, and snippets.

@mapkyca
Created May 27, 2013 15:00
Show Gist options
  • Save mapkyca/5657521 to your computer and use it in GitHub Desktop.
Save mapkyca/5657521 to your computer and use it in GitHub Desktop.
Piface/Raspberry Pi Pelican crossing light control.
import piface.pfio
import time
import sys
class crossinglight:
""" A (UK) Crossing traffic light """
def __init__(self, red_pin, amber_pin, green_pin, red_man_pin, green_man_pin, beeper, button):
self.red_pin = red_pin
self.amber_pin = amber_pin
self.green_pin = green_pin
self.red_man_pin = red_man_pin
self.green_man_pin = green_man_pin
self.beeper = beeper
self.button = button
self.status = 'green'
piface.pfio.digital_write(self.green_pin, 1)
piface.pfio.digital_write(self.red_man_pin, 1)
def beep(self):
for cnt in range(1, 10):
piface.pfio.digital_write(self.beeper, 1)
time.sleep(1)
piface.pfio.digital_write(self.beeper, 0)
time.sleep(1)
def wait_for_button(self):
pressed = False;
while pressed == False:
if piface.pfio.digital_read(self.button) == 1:
pressed = True;
def toggle(self):
cnt = 0;
if self.status == 'red':
piface.pfio.digital_write(self.red_pin, 0)
# Transitioning from red to green, blink amber light and green man
for cnt in range(1, 5):
piface.pfio.digital_write(self.amber_pin, 1)
piface.pfio.digital_write(self.green_man_pin, 1)
time.sleep(1)
piface.pfio.digital_write(self.amber_pin, 0)
piface.pfio.digital_write(self.green_man_pin, 0)
time.sleep(1)
piface.pfio.digital_write(self.amber_pin, 0)
piface.pfio.digital_write(self.red_pin, 0)
piface.pfio.digital_write(self.green_pin, 1)
piface.pfio.digital_write(self.green_man_pin, 0)
piface.pfio.digital_write(self.red_man_pin, 1)
self.status = 'green'
else:
piface.pfio.digital_write(self.green_pin, 0)
piface.pfio.digital_write(self.amber_pin, 1)
time.sleep(2)
piface.pfio.digital_write(self.amber_pin, 0)
piface.pfio.digital_write(self.red_pin, 1)
piface.pfio.digital_write(self.green_man_pin, 1)
piface.pfio.digital_write(self.red_man_pin, 0)
self.status = 'red'
def main(argv):
piface.pfio.init()
# initialise our light
light = crossinglight(0,1,2, 3,4, 5, 0)
# Loop, waiting for button press (probably could be done better with interrupts)
while True:
light.wait_for_button();
light.toggle()
light.beep()
light.toggle()
if __name__ == "__main__":
sys.exit(main(sys.argv))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment