'Traffic Lights 'PJW 12/2011 'Picaxe 18M2 symbol NRLED = 2 'North/South Red LED symbol NALED = 1 'North/south Amber LED symbol NGLED = 0 'North/South Green LED symbol ERLED = 5 'East/West Red LED symbol EALED = 4 'East/West Amber LED symbol EGLED = 3 'East/West Green LED symbol PCRLED =7 'Pedestrian Crossing Red LED symbol PCGLED =6 'Pedestrian Crossing Green LED symbol AmberDelay = 3 'Delay for Amber sequence - seconds Symbol AllRedDelay = 2 'Delay for all Red - seconds Symbol GreenDelay = 10 'Delay for Green Sequence - seconds Symbol Emergflashdelay = 500 'Amber Flash reate - milliseconds symbol BtnStart = pin0 'Start Push button symbol BtnPedCall = pin1 'Pedestrian Call Push Button symbol Btnemerg = pin2 'Emergency Flash Button symbol PCFlag = b0 'Flag set when Pedestrain Crossing Called symbol EmergFlag = b1 'Flag set when Emergency Called symbol DelaySecs = b2 'Variable used in timing setint or %00000110 , %00000110 'Interrupt on Btnemerg high or BtnPedCall high main: 'All Red High NRLED High ERLED High PCRLED Startloop: if Btnstart =1 then Start 'Start when start pressed - Delete goto Startloop Start: 'North Green - East Red low NRLED high NGLED High PCRLED 'Pedestrian Call Check if emergflag = 0 then 'Only if not emergency if PCFlag = 1 then PCFlag = 0 ' reset Ped Call Flag Low PCRLED 'PC Red off Green on High PCGLED end if end if 'North Green Delay DelaySecs = GreenDelay gosub delaysub 'North Amber & Amber Delay low NGLED high NALED Delaysecs = AmberDelay gosub delaysub 'Pedestrain Red low PCGLED Low NALED high PCRLED 'All Red High NRLED Delaysecs = AllRedDelay gosub delaysub 'East Green Low ERLED High EGLED 'East Green Delay Delaysecs = GreenDelay gosub delaysub 'East Amber & Delay low EGLED high EALED Delaysecs = AmberDelay gosub delaysub 'All Red low EALED high ERLED Delaysecs = AllRedDelay gosub delaysub goto Start goto main '****************** interrupt: gosub checkflags 'subroutine to establish which button is pressed. setint or %00000110, %00000110 'Re-enable interrupt return '*********************** checkflags: if Btnemerg= 1 then if emergflag = 1 then 'Toggle emergency Flag emergflag = 0 else emergflag = 1 end if pause 500 goto checkflags' loop until button release end if if Btnpedcall = 1 then ' set the Pedestrian Call Flag return and wait until North Green pCflag = 1 pause 500 goto checkflags 'loop until button released end if return '******************* Delaysub: 'Handles all of the delays time = 0 'Resets the seconds timer to 0 do if emergflag = 1 then eloop loop until time >= delaysecs return '******************* Eloop: IF EMERGFLAG = 1 THEN 'Sets/resets LEDS and Flashes Amber High PCRLED low PCGLED low NGLED low NRLED Low EGLED Low ERLED high NALED low EALED pause EmergFlashDelay high EALED Low NALED pause emergflashDelay goto ELoop else low NGLED high NRLED low NALED Low EGLED high ERLED low EALED end if goto start