' ========================================================================= ' ' File....... GRILL.BS2 ' Purpose.... ' Author..... ' E-mail..... ' Started.... ' Updated.... ' ' {$STAMP BS2} ' {$PBASIC 2.5} ' ' ========================================================================= ' -----[ Program Description ]--------------------------------------------- ' -----[ Revision History ]------------------------------------------------ ' -----[ I/O Definitions ]------------------------------------------------- Thermo VAR INL ' thermocouple bus Solenoid PIN 9 Fan PIN 10 Buzzer PIN 11 Igniter PIN 12 Receiver PIN 15 ' -----[ Constants ]------------------------------------------------------- IsOn CON 1 IsOff CON 0 NoSignal CON 1 HasSignal CON 0 LowTemp CON %00000001 ' low temperature thresh TempOK CON %10000000 ' -----[ Variables ]------------------------------------------------------- temp VAR Byte ' temperature tries VAR Nib secs VAR Byte ' timer control idx VAR Byte ' -----[ EEPROM Data ]----------------------------------------------------- ' -----[ Initialization ]-------------------------------------------------- Reset: LOW Solenoid ' initialize port; off LOW Fan ' off LOW Buzzer ' off LOW Igniter ' off tries = 2 ' -----[ Program Code ]---------------------------------------------------- Main: DO : LOOP WHILE (Receiver = NoSignal) ' wait for signal Start: Fan = IsOn ' activate fan secs = 240 ' 2 mins, 30 secs GOSUB Delay_Secs Fan = IsOff IF (Receiver = NoSignal) THEN Main Solenoid = IsOn Igniter = IsOn secs = 3 GOSUB Delay_Secs IF (Receiver = NoSignal) THEN Main FOR tries = 1 TO 2 secs = 30 GOSUB Delay_Secs ' delay for thermocouple temp = Thermo ' get reading IF (temp <= LowTemp) THEN Main ' did unit fire? NEXT IF (temp >= TempOK) THEN ' temp okay GOSUB Preheat ' yes, preheat ELSE GOSUB Alarm ' nope, too low ENDIF DO : LOOP WHILE (Receiver = HasSignal) GOTO Main END ' -----[ Subroutines ]----------------------------------------------------- Alarm: Solenoid = IsOff Buzzer = IsOn secs = 10 GOSUB Delay_Secs Buzzer = IsOff RETURN Preheat: Solenoid = IsOn FOR idx = 1 TO 3 Buzzer = IsOn secs = 2 GOSUB Delay_Secs Buzzer = IsOff secs = 2 GOSUB Delay_Secs NEXT RETURN Delay_Secs: DO WHILE (secs > 0) PAUSE 1000 secs = secs - 1 LOOP RETURN