' {$STAMP BS2} ' {$PBASIC 2.5} ' {$PORT COM1} ringDuration CON 350 randomMin CON 5 randomMax CON 20 printedClear VAR Bit latching1 VAR Bit latching2 VAR Bit iCount VAR Word jCount VAR Word randomOn VAR Bit seed VAR Word randomCount VAR Word rfButton1 PIN 7 rfButton2 PIN 6 rfButton3 PIN 5 rfButton4 PIN 4 rfButton5 PIN 3 relay1 PIN 8 relay2 PIN 9 INPUT rfButton1 INPUT rfButton2 INPUT rfButton3 INPUT rfButton4 INPUT rfButton5 OUTPUT relay1 OUTPUT relay2 DEBUG "begin",CR printedClear = 0 latching1 = 0 latching2 = 0 DO RANDOM seed IF rfButton1 = 1 OR rfButton3 = 1 THEN DEBUG "Button 1 is high, setting Relay 1 high",CR randomOn = 0 latching1 = 0 LOW relay1 IF latching2 = 0 THEN LOW relay2 ENDIF HIGH relay1 ENDIF IF rfButton2 = 1 OR rfbutton4 = 1THEN DEBUG "Button 2 is high, setting Relay 2 high",CR randomOn = 0 latching2 = 0 LOW relay2 IF latching1 = 0 THEN LOW relay1 ENDIF HIGH relay2 ENDIF ' IF rfButton3 = 1 THEN ' randomOn = 0 ' IF latching1 = 1 THEN ' DEBUG "Button 3 is high, latching Relay 1 low",CR ' LOW relay1 ' latching1 = 0 ' ELSE ' DEBUG "Button 3 is high, latching Relay 1 high",CR ' HIGH relay1 ' latching1 = 1 ' ENDIF ' IF latching2 = 0 THEN ' LOW relay2 ' ENDIF ' DO WHILE (rfButton3 = 1) ' LOOP ' ENDIF ' IF rfButton4 = 1 THEN ' randomOn = 0 ' IF latching2 = 1 THEN ' DEBUG "Button 4 is high, latching Relay 2 low",CR ' LOW relay2 ' latching2 = 0 ' ELSE ' DEBUG "Button 4 is high, latching Relay 2 high",CR ' HIGH relay2 ' latching2 = 1 ' ENDIF ' IF latching1 = 0 THEN ' LOW relay1 ' ENDIF ' DO WHILE (rfButton4 = 1) ' LOOP ' ENDIF IF rfButton5 = 1 THEN DEBUG "Button 5 is high",CR IF randomOn = 1 THEN DEBUG "Turning off Random", CR randomOn = 0 ELSE DEBUG "Turning on Random", CR randomOn = 1 randomCount = seed // (randomMax - randomMin) + randomMin DEBUG "randomCount = ", DEC randomCount, CR iCount = 0 jCount = 0 HIGH relay1 PAUSE ringDuration LOW relay1 PAUSE ringDuration PAUSE ringDuration HIGH relay2 PAUSE ringDuration LOW relay2 latching1 = 0 latching2 = 0 ENDIF ENDIF IF rfButton1 = 0 AND rfButton2 = 0 AND rfbutton3 = 0 AND rfbutton4 = 0 AND rfbutton5 = 0 THEN IF printedClear = 1 THEN DEBUG "All buttons are low",CR printedClear = 0 ENDIF IF latching1 = 0 THEN LOW relay1 ENDIF IF latching2 = 0 THEN LOW relay2 ENDIF ENDIF iCount = iCount + 1 ' jCount increments roughly once per minute IF icount >= 600 THEN jCount = jCOunt + 1 iCount = 0 DEBUG "jCount = ", DEC jCount, CR ENDIF IF randomOn = 1 AND jCount >= randomCount THEN IF RANDOMCount // 2 = 1 THEN HIGH relay1 PAUSE ringDuration LOW relay1 ELSE HIGH relay2 PAUSE ringDuration LOW relay2 ENDIF iCount = 0 jCount = 0 randomCount = seed // (randomMax - randomMin) + randomMin DEBUG "randomCount = ", DEC randomCount, CR ENDIF PAUSE 100 LOOP