2022-07-04 18:07:36 -04:00
# include <Arduino.h>
# include <EEPROM.h>
# include <LiquidCrystal_I2C.h>
# include <string.h>
2022-07-04 19:28:48 -04:00
char * firmwareRev = " 1.1 " ; //VERSION
int EEPROMVersion = 1 ; //version control to rewrite eeprom after update
int EEPROMBuild = 1 ;
2022-07-04 18:07:36 -04:00
//RUNTIME VARIABLES
bool fullAlarm = false ; //bool to control if this is a full alarm that requres a panel reset to clear
bool silenced = false ;
bool keyInserted = false ; //if the control panel has a key inserted
bool horn = false ; //bool to control if the horns are active
bool strobe = false ; //bool to control if the strobes are active
bool trouble = false ; //bool to control if the panel is in trouble
bool troubleAck = false ; //bool to control if the trouble is acknowledged
bool configMenu = false ; //determine if the control panel is in the configuration menu
bool resetPressed = false ;
bool silencePressed = false ; //make sure that presses don't count more than once
bool drillPressed = false ;
bool resetStillPressed = false ;
bool silenceStillPressed = false ; //make sure that presses don't count more than once
bool drillStillPressed = false ;
bool updateScreen = false ; //updating the screen in the config menu
bool possibleAlarm = false ; //panel receieved 0 from pull station ciruit and is now investigating
bool definiteAlarm = false ; //panel has investigated and determined that it was not a fluke
bool walkTest = false ; //is the system in walk test
bool silentWalkTest = false ;
bool backlightOn = true ;
int characters [ ] = { 32 , 45 , 46 , 47 , 48 , 49 , 50 , 51 , 52 , 53 , 54 , 55 , 56 , 57 , 65 , 66 , 67 , 68 , 69 , 70 , 71 , 72 , 73 , 74 , 75 , 76 , 77 , 78 , 79 , 80 , 81 , 82 , 83 , 84 , 85 , 86 , 87 , 88 , 89 , 90 } ; //characters allowed on name
int panelNameList [ 16 ] ;
int clearTimer = 0 ; //timer for keeping track of button holding for clearing character in the name editor
int verification = 0 ; //number to keep track of ms for verification
int drill = 0 ; //number to keep track of ms for drill
int troubleTimer = 0 ; //ms for trouble
int codeWheelTimer = 0 ; //code wheel timing variable
int troubleLedTimer = 0 ; //number to keep track of ms for trouble light
int alarmLedTimer = 0 ; //alarm led timer
int troubleType = 0 ; //trouble type 0 - general, 1 - eol resistor
int lcdUpdateTimer = 0 ; //update delay
int lcdTimeoutTimer = 0 ; //timer to keep track of how long until lcd off
int walkTestSmokeDetectorTimer = 0 ;
int currentScreen = - 1 ; //update display if previous screen is not the same
int configPage = 0 ; //config page for the config menu
int cursorPosition = 0 ; //which menu item the cursor is over
int zerosCounted = 0 ; //verification variable
int walkTestCount = 0 ; //keep track of walk test activations
int zoneAlarm = 0 ; //which zone is in alarm 0 - none | 1 - zone 1 | 2 - zone 2 | 3 - zone 1 & 2
String configTop ; //configuration menu strings for lcd
String configBottom ;
String currentConfigTop ; //configuration menu strings for current lcd display
String currentConfigBottom ;
//CONFIG VARIABLES (Set these by default in case eeprom fails to load, and it cannot be reset. Allows the FACP to still run with a default configuration)
bool keyRequired = false ; //determine if key switch is required to operate buttons
bool isVerification = true ; //is verification turned on
bool eolResistor = true ; //is the EOL resistor enabled
bool preAlarm = false ; //use pre-alarm?
bool smokeDetectorPreAlarm = false ; //should smoke detectors activate first stage
bool audibleSilence = true ;
int smokeDetectorTimeout = 5 ; //how long should smoke detector pre-alarm wait before cancelling the pre-alarm
int firstStageTime = 1 ; //time in minutes that first stage should last
int codeWheel = 0 ; //which alarm pattern to use, code-3 default
int verificationTime = 2500 ;
int resistorLenience = 0 ;
int panelHomescreen = 0 ;
int lcdTimeout = 0 ;
String panelName = " " ;
LiquidCrystal_I2C lcd ( 0x27 , 16 , 2 ) ;
//PINS
int zone1Pin = 15 ;
int zone2Pin = 15 ; //TESTING is set to 15 but is normally 39
int hornPin = 13 ;
int buzzerPin = 4 ;
int strobePin = 18 ;
int smokeDetectorPin = 14 ;
int readyLedPin = 27 ;
2022-07-04 19:28:48 -04:00
int silenceLedPin = 26 ;
int alarmLedPin = 25 ;
int keySwitchPin = 33 ;
int resetSwitchPin = 32 ;
int silenceSwitchPin = 35 ;
int drillSwitchPin = 34 ;
int sclPin = 22 ;
int sdaPin = 21 ;
2022-07-04 18:07:36 -04:00
void resetEEPROM ( ) {
for ( int i = 0 ; i < = 1024 ; i + + ) { //write all 255's from 0-1024 address
EEPROM . write ( i , 255 ) ;
}
EEPROM . write ( 0 , 76 ) ; EEPROM . write ( 1 , 101 ) ; EEPROM . write ( 2 , 120 ) ; EEPROM . write ( 3 , 122 ) ; EEPROM . write ( 4 , 97 ) ; EEPROM . write ( 5 , 99 ) ; EEPROM . write ( 6 , 104 ) ; //write Lexzach to addresses 0-6
EEPROM . write ( 7 , 0 ) ; //code-3 default
EEPROM . write ( 8 , 0 ) ; //key not required by default
EEPROM . write ( 9 , 1 ) ; //verification is turned on by default
EEPROM . write ( 10 , 25 ) ; //default verification time of 2.5 seconds
//system name "ANTIGNEOUS"
EEPROM . write ( 11 , 65 ) ; EEPROM . write ( 12 , 78 ) ; EEPROM . write ( 13 , 84 ) ; EEPROM . write ( 14 , 73 ) ; EEPROM . write ( 15 , 71 ) ; EEPROM . write ( 16 , 78 ) ; EEPROM . write ( 17 , 69 ) ; EEPROM . write ( 18 , 79 ) ; EEPROM . write ( 19 , 85 ) ; EEPROM . write ( 20 , 83 ) ;
2022-07-04 19:28:48 -04:00
for ( int i = 21 ; i < = 26 ; i + + ) { //write all 0's from 23-71 address
2022-07-04 18:07:36 -04:00
EEPROM . write ( i , 0 ) ;
}
2022-07-04 19:28:48 -04:00
EEPROM . write ( 50 , EEPROMVersion ) ; //write current version and build
EEPROM . write ( 51 , EEPROMBuild ) ;
2022-07-04 18:07:36 -04:00
EEPROM . write ( 72 , 125 ) ; //EOL lenience 500 by default (take the value stored and multiply by 4 to get actual value)
EEPROM . write ( 73 , 1 ) ; //EOL resistor is enabled by default
EEPROM . write ( 74 , 0 ) ; //pre-alarm disabled by default
EEPROM . write ( 75 , 1 ) ; //pre-alarm first-stage is 1 minute by default
EEPROM . write ( 76 , 0 ) ; //smoke detector pre-alarm is disable by default
EEPROM . write ( 77 , 5 ) ; //smoke detector timeout is five minutes by default
EEPROM . write ( 78 , 0 ) ; //homescreen is panel name by default
EEPROM . write ( 79 , 1 ) ; //audible silence is enabled by default
EEPROM . write ( 80 , 0 ) ; //lcd timeout is disabled by default
EEPROM . commit ( ) ;
}
void setup ( ) {
Serial . begin ( 115200 ) ; //begin serial
Serial . println ( " Lexzach's Low-Cost FACP v1 " ) ;
Serial . println ( " Booting... " ) ;
pinMode ( hornPin , OUTPUT ) ; //horn
pinMode ( strobePin , OUTPUT ) ; //strobe
pinMode ( smokeDetectorPin , OUTPUT ) ; //smoke relay
2022-07-04 19:28:48 -04:00
pinMode ( readyLedPin , OUTPUT ) ; //ready LED
pinMode ( silenceLedPin , OUTPUT ) ; //silence LED
pinMode ( alarmLedPin , OUTPUT ) ; //alarm LED
pinMode ( keySwitchPin , INPUT ) ; //key switch
pinMode ( resetSwitchPin , INPUT ) ; //reset switch
pinMode ( silenceSwitchPin , INPUT ) ; //silence switch
pinMode ( resetSwitchPin , INPUT ) ; //drill switch
2022-07-04 18:07:36 -04:00
pinMode ( zone1Pin , INPUT ) ; //zone 1
pinMode ( zone2Pin , INPUT ) ; //zone 2
2022-07-04 19:28:48 -04:00
pinMode ( buzzerPin , OUTPUT ) ; //buzzer
2022-07-04 18:07:36 -04:00
digitalWrite ( hornPin , HIGH ) ; //horn
digitalWrite ( strobePin , HIGH ) ; //strobe
digitalWrite ( smokeDetectorPin , HIGH ) ; //smoke relay
2022-07-04 19:28:48 -04:00
pinMode ( sclPin , OUTPUT ) ; //scl
pinMode ( sdaPin , OUTPUT ) ; //sda
2022-07-04 18:07:36 -04:00
Serial . println ( " Initializing LCD... " ) ;
lcd . init ( ) ; //initialize LCD
lcd . backlight ( ) ;
lcd . clear ( ) ;
lcd . setCursor ( 4 , 0 ) ;
lcd . print ( " Booting... " ) ;
Serial . println ( " Configured all pins " ) ;
EEPROM . begin ( 1025 ) ; //allocate memory address 0-1024 for EEPROM
Serial . println ( " Configured EEPROM for addresses 0-1024 " ) ;
2022-07-04 19:28:48 -04:00
// EEPROM.write(0,255); //UNCOMMENT TO INVALIDATE EEPROM AND REFLASH IT AFTER EVERY RESTART
// EEPROM.commit();
2022-07-04 18:07:36 -04:00
Serial . println ( " Verifying EEPROM configuration integrity... " ) ;
2022-07-04 19:28:48 -04:00
if ( EEPROM . read ( 0 ) ! = 76 or EEPROM . read ( 6 ) ! = 104 or EEPROM . read ( 7 ) > 5 or EEPROM . read ( 8 ) > 1 or EEPROM . read ( 50 ) ! = EEPROMVersion or EEPROM . read ( 51 ) ! = EEPROMBuild ) { //EEPROM verification, check essential-to-run components, listing all conditions that cannot exist in a correct EEPROM
2022-07-04 18:07:36 -04:00
Serial . println ( " EEPROM verification failed. Re-writing EEPROM " ) ;
resetEEPROM ( ) ;
} else {
Serial . println ( " EEPROM verification finished " ) ;
}
Serial . println ( " Current EEPROM: " ) ;
for ( int i = 0 ; i < = 1024 ; i + + ) {
Serial . print ( EEPROM . read ( i ) ) ;
Serial . print ( " " ) ;
}
Serial . println ( ) ;
//CONFIG LOADING ROUTINE
Serial . println ( " Loading config from EEPROM... " ) ;
codeWheel = EEPROM . read ( 7 ) ; //codeWheel setting address
if ( EEPROM . read ( 8 ) = = 1 ) {
keyRequired = true ;
} else {
keyRequired = false ;
}
if ( EEPROM . read ( 9 ) = = 1 ) {
isVerification = true ;
} else {
isVerification = false ;
}
if ( EEPROM . read ( 73 ) = = 1 ) {
eolResistor = true ;
} else {
eolResistor = false ;
}
if ( EEPROM . read ( 74 ) = = 1 ) {
preAlarm = true ;
} else {
preAlarm = false ;
}
if ( EEPROM . read ( 76 ) = = 1 ) {
smokeDetectorPreAlarm = true ;
} else {
smokeDetectorPreAlarm = false ;
}
if ( EEPROM . read ( 79 ) = = 1 ) {
audibleSilence = true ;
} else {
audibleSilence = false ;
}
smokeDetectorTimeout = EEPROM . read ( 77 ) * 60000 ;
firstStageTime = EEPROM . read ( 75 ) * 60000 ;
verificationTime = EEPROM . read ( 10 ) * 100 ;
resistorLenience = EEPROM . read ( 72 ) * 4 ;
panelHomescreen = EEPROM . read ( 78 ) ;
lcdTimeout = EEPROM . read ( 80 ) * 15000 ;
int x = 0 ;
for ( int i = 11 ; i < = 71 ; i + + ) { //read panel name
if ( EEPROM . read ( i ) ! = 0 ) {
panelName = panelName + ( char ) EEPROM . read ( i ) ;
panelNameList [ x ] = EEPROM . read ( i ) ;
x + + ;
}
}
Serial . println ( " Config loaded " ) ;
digitalWrite ( readyLedPin , HIGH ) ; //power on ready LED on startup
2022-07-04 19:28:48 -04:00
digitalWrite ( silenceLedPin , LOW ) ;
digitalWrite ( alarmLedPin , LOW ) ;
2022-07-04 18:07:36 -04:00
digitalWrite ( smokeDetectorPin , LOW ) ; //turn on smoke relay
}
void tone ( ) {
ledcSetup ( 0 , 5000 , 8 ) ; // setup beeper
ledcAttachPin ( buzzerPin , 0 ) ; // attach beeper
ledcWriteTone ( 0 , 1500 ) ; // play tone
}
void noTone ( ) {
ledcSetup ( 0 , 5000 , 8 ) ; // setup beeper
ledcAttachPin ( buzzerPin , 0 ) ; // attach beeper
ledcWriteTone ( 0 , 0 ) ; // stop tone
}
void activateNAC ( ) {
horn = true ;
strobe = true ;
fullAlarm = true ;
silenced = false ;
configMenu = false ;
tone ( ) ;
2022-07-04 19:28:48 -04:00
digitalWrite ( alarmLedPin , HIGH ) ;
digitalWrite ( silenceLedPin , HIGH ) ;
2022-07-04 18:07:36 -04:00
}
void checkKey ( ) {
2022-07-04 19:28:48 -04:00
if ( digitalRead ( keySwitchPin ) = = HIGH ) {
2022-07-04 18:07:36 -04:00
keyInserted = true ;
} else {
keyInserted = false ;
}
}
void checkDevices ( ) {
if ( walkTest = = 0 ) {
if ( ( analogRead ( zone1Pin ) < = resistorLenience or analogRead ( zone2Pin ) < = resistorLenience ) and horn ! = true and silenced = = false ) {
possibleAlarm = true ;
}
if ( possibleAlarm = = true and horn ! = true and strobe ! = true and silenced = = false and isVerification = = true ) { //verification code
if ( analogRead ( zone1Pin ) = = 0 or analogRead ( zone2Pin ) = = 0 ) {
zerosCounted + + ;
}
if ( verification > = verificationTime ) {
if ( zerosCounted > 0.1 * verificationTime and analogRead ( zone1Pin ) = = 0 and analogRead ( zone2Pin ) = = 0 ) {
definiteAlarm = true ;
possibleAlarm = false ;
zerosCounted = 0 ;
verification = 0 ;
} else {
zerosCounted = 0 ;
possibleAlarm = false ;
verification = 0 ;
}
} else {
verification + + ;
}
}
} else if ( walkTest = = true ) {
if ( analogRead ( zone1Pin ) = = 0 ) { // or analogRead(zone2Pin) == 0){
walkTestCount + + ;
walkTestSmokeDetectorTimer = 0 ;
while ( analogRead ( zone1Pin ) < = resistorLenience ) { // or analogRead(zone2Pin) <= resistorLenience) {
digitalWrite ( strobePin , LOW ) ;
if ( silentWalkTest = = false ) {
digitalWrite ( hornPin , LOW ) ;
}
2022-07-04 19:28:48 -04:00
digitalWrite ( alarmLedPin , HIGH ) ;
2022-07-04 18:07:36 -04:00
walkTestSmokeDetectorTimer + + ;
if ( walkTestSmokeDetectorTimer > = 5000 ) {
2022-07-04 19:28:48 -04:00
digitalWrite ( smokeDetectorPin , HIGH ) ;
2022-07-04 18:07:36 -04:00
}
delay ( 1 ) ;
}
digitalWrite ( strobePin , HIGH ) ;
if ( silentWalkTest = = false ) {
digitalWrite ( hornPin , HIGH ) ;
}
2022-07-04 19:28:48 -04:00
digitalWrite ( alarmLedPin , HIGH ) ;
2022-07-04 18:07:36 -04:00
currentScreen = - 1 ;
delay ( 250 ) ;
digitalWrite ( smokeDetectorPin , LOW ) ;
}
}
if ( definiteAlarm = = true or ( isVerification = = false and analogRead ( zone1Pin ) < = resistorLenience and horn ! = true and silenced = = false ) ) { //activate the horns and strobes after verification
activateNAC ( ) ;
definiteAlarm = false ;
} else if ( analogRead ( zone1Pin ) = = 4095 and eolResistor = = true and troubleTimer = = 2000 ) {
trouble = true ;
troubleType = 1 ;
} else if ( analogRead ( zone1Pin ) = = 4095 and eolResistor = = true and troubleTimer < = 2000 ) {
troubleTimer + + ;
} else {
troubleTimer = 0 ;
}
}
void troubleCheck ( ) {
if ( trouble = = true ) {
if ( troubleLedTimer = = 0 ) {
digitalWrite ( readyLedPin , LOW ) ;
if ( troubleAck = = false and fullAlarm = = false ) {
noTone ( ) ;
}
} else if ( troubleLedTimer = = 750 ) {
digitalWrite ( readyLedPin , HIGH ) ;
if ( troubleAck = = false and fullAlarm = = false ) { //sound the buzzer if the trouble is not acked
tone ( ) ;
}
} else if ( troubleLedTimer = = 1500 ) {
troubleLedTimer = - 1 ;
}
troubleLedTimer + + ;
} else {
if ( walkTest = = false ) {
digitalWrite ( readyLedPin , HIGH ) ;
}
if ( troubleLedTimer ! = 0 ) {
noTone ( ) ;
}
troubleLedTimer = 0 ;
}
}
void checkButtons ( ) {
2022-07-04 19:28:48 -04:00
if ( digitalRead ( resetSwitchPin ) = = HIGH ) { //RESET BUTTON
2022-07-04 18:07:36 -04:00
lcd . clear ( ) ;
lcd . setCursor ( 2 , 0 ) ;
lcd . print ( " Resetting... " ) ;
tone ( ) ;
digitalWrite ( readyLedPin , HIGH ) ; //ready LED
2022-07-04 19:28:48 -04:00
digitalWrite ( silenceLedPin , HIGH ) ; //silence LED
digitalWrite ( alarmLedPin , HIGH ) ; //alarm LED
2022-07-04 18:07:36 -04:00
digitalWrite ( hornPin , HIGH ) ; //horn
digitalWrite ( strobePin , HIGH ) ; //strobe
2022-07-04 19:28:48 -04:00
digitalWrite ( smokeDetectorPin , HIGH ) ; //smoke relay
2022-07-04 18:07:36 -04:00
delay ( 2500 ) ;
noTone ( ) ;
digitalWrite ( readyLedPin , LOW ) ; //ready LED
2022-07-04 19:28:48 -04:00
digitalWrite ( silenceLedPin , HIGH ) ; //silence LED
digitalWrite ( alarmLedPin , HIGH ) ; //alarm LED
2022-07-04 18:07:36 -04:00
ESP . restart ( ) ;
}
2022-07-04 19:28:48 -04:00
if ( digitalRead ( silenceSwitchPin ) = = HIGH ) { //SILENCE BUTTON
2022-07-04 18:07:36 -04:00
if ( horn = = true ) { //if horns are not silenced, silence the horns
2022-07-04 19:28:48 -04:00
digitalWrite ( silenceLedPin , HIGH ) ;
digitalWrite ( alarmLedPin , HIGH ) ;
2022-07-04 18:07:36 -04:00
horn = false ;
if ( audibleSilence = = false ) {
strobe = false ;
}
silenced = true ;
noTone ( ) ;
} else if ( horn = = false and strobe = = false and trouble = = true and silencePressed = = false and troubleAck = = false ) {
troubleAck = true ;
noTone ( ) ;
} else if ( horn = = false and strobe = = false and fullAlarm = = false and silencePressed = = false and configMenu = = false ) {
configMenu = true ;
resetStillPressed = true ; //make sure the menu doesn't close out as soon as someone opens it
silenceStillPressed = true ;
drillStillPressed = true ;
char * main [ ] = { " Testing " , " Settings " } ; //menu 0
configTop = ( String ) main [ 0 ] ;
configBottom = ( String ) main [ 1 ] ;
configPage = 0 ;
cursorPosition = 0 ;
currentConfigBottom = " " ;
currentConfigTop = " " ;
}
silencePressed = true ;
} else {
silencePressed = false ;
}
2022-07-04 19:28:48 -04:00
if ( digitalRead ( drillSwitchPin ) = = HIGH and horn ! = true ) { //DRILL BUTTON
2022-07-04 18:07:36 -04:00
if ( drill = = 2000 ) {
activateNAC ( ) ;
} else {
drill + + ;
}
drillPressed = true ;
} else {
drill = 0 ;
drillPressed = false ;
}
}
void alarm ( ) {
if ( strobe = = true ) {
digitalWrite ( strobePin , LOW ) ;
} else {
digitalWrite ( strobePin , HIGH ) ;
}
if ( horn = = true ) {
if ( codeWheel = = 0 ) {
if ( codeWheelTimer = = 0 ) { //temporal code 3
digitalWrite ( hornPin , LOW ) ;
} else if ( codeWheelTimer = = 500 ) {
digitalWrite ( hornPin , HIGH ) ;
} else if ( codeWheelTimer = = 1000 ) {
digitalWrite ( hornPin , LOW ) ;
} else if ( codeWheelTimer = = 1500 ) {
digitalWrite ( hornPin , HIGH ) ;
} else if ( codeWheelTimer = = 2000 ) {
digitalWrite ( hornPin , LOW ) ;
} else if ( codeWheelTimer = = 2500 ) {
digitalWrite ( hornPin , HIGH ) ;
} else if ( codeWheelTimer = = 4000 ) {
codeWheelTimer = - 1 ;
}
} else if ( codeWheel = = 1 ) {
if ( codeWheelTimer = = 0 ) { //marchtime
digitalWrite ( hornPin , LOW ) ;
} else if ( codeWheelTimer = = 250 ) {
digitalWrite ( hornPin , HIGH ) ;
} else if ( codeWheelTimer = = 500 ) {
codeWheelTimer = - 1 ;
}
} else if ( codeWheel = = 2 ) { //4-4
if ( codeWheelTimer = = 0 ) {
digitalWrite ( hornPin , LOW ) ;
} else if ( codeWheelTimer = = 300 ) {
digitalWrite ( hornPin , HIGH ) ;
} else if ( codeWheelTimer = = 600 ) {
digitalWrite ( hornPin , LOW ) ;
} else if ( codeWheelTimer = = 900 ) {
digitalWrite ( hornPin , HIGH ) ;
} else if ( codeWheelTimer = = 1200 ) {
digitalWrite ( hornPin , LOW ) ;
} else if ( codeWheelTimer = = 1500 ) {
digitalWrite ( hornPin , HIGH ) ;
} else if ( codeWheelTimer = = 1800 ) {
digitalWrite ( hornPin , LOW ) ;
} else if ( codeWheelTimer = = 2100 ) {
digitalWrite ( hornPin , HIGH ) ;
} else if ( codeWheelTimer = = 2850 ) {
digitalWrite ( hornPin , LOW ) ;
} else if ( codeWheelTimer = = 3150 ) {
digitalWrite ( hornPin , HIGH ) ;
} else if ( codeWheelTimer = = 3450 ) {
digitalWrite ( hornPin , LOW ) ;
} else if ( codeWheelTimer = = 3750 ) {
digitalWrite ( hornPin , HIGH ) ;
} else if ( codeWheelTimer = = 4050 ) {
digitalWrite ( hornPin , LOW ) ;
} else if ( codeWheelTimer = = 4350 ) {
digitalWrite ( hornPin , HIGH ) ;
} else if ( codeWheelTimer = = 4650 ) {
digitalWrite ( hornPin , LOW ) ;
} else if ( codeWheelTimer = = 4950 ) {
digitalWrite ( hornPin , HIGH ) ;
} else if ( codeWheelTimer = = 14950 ) {
codeWheelTimer = - 1 ;
}
} else if ( codeWheel = = 3 ) { //continuous
digitalWrite ( hornPin , LOW ) ;
} else if ( codeWheel = = 5 ) {
if ( codeWheelTimer = = 0 ) { //marchtime slower
digitalWrite ( hornPin , LOW ) ;
} else if ( codeWheelTimer = = 500 ) {
digitalWrite ( hornPin , HIGH ) ;
} else if ( codeWheelTimer = = 1000 ) {
codeWheelTimer = - 1 ;
}
} else if ( codeWheel = = 4 ) {
if ( codeWheelTimer = = 0 ) { //california code
digitalWrite ( hornPin , LOW ) ;
} else if ( codeWheelTimer = = 10000 ) {
digitalWrite ( hornPin , HIGH ) ;
} else if ( codeWheelTimer = = 15000 ) {
codeWheelTimer = - 1 ;
}
}
codeWheelTimer + + ;
alarmLedTimer + + ;
if ( alarmLedTimer > = 750 ) {
if ( digitalRead ( 25 ) = = false ) {
2022-07-04 19:28:48 -04:00
digitalWrite ( alarmLedPin , HIGH ) ;
2022-07-04 18:07:36 -04:00
alarmLedTimer = 0 ;
} else {
2022-07-04 19:28:48 -04:00
digitalWrite ( alarmLedPin , HIGH ) ;
2022-07-04 18:07:36 -04:00
alarmLedTimer = 0 ;
}
}
} else {
digitalWrite ( hornPin , HIGH ) ;
codeWheelTimer = 0 ;
}
}
void lcdUpdate ( ) {
if ( trouble = = false and fullAlarm = = false and horn = = false and strobe = = false and walkTest = = false and currentScreen ! = 0 ) {
lcd . noAutoscroll ( ) ;
lcd . clear ( ) ;
lcd . setCursor ( 2 , 0 ) ;
lcd . print ( " System Normal " ) ;
lcd . setCursor ( 0 , 1 ) ;
if ( panelHomescreen = = 0 ) {
lcd . print ( panelName ) ;
} else if ( panelHomescreen = = 1 ) {
lcd . print ( analogRead ( zone1Pin ) ) ;
}
currentScreen = 0 ;
} else if ( trouble = = true ) {
if ( troubleType = = 0 and currentScreen ! = 1 ) {
lcd . clear ( ) ;
lcd . setCursor ( 1 , 0 ) ;
lcd . print ( " * Trouble * " ) ;
lcd . setCursor ( 2 , 1 ) ;
lcd . print ( " Unknown " ) ;
currentScreen = 1 ;
} else if ( troubleType = = 1 and currentScreen ! = 2 ) {
lcd . clear ( ) ;
lcd . setCursor ( 0 , 0 ) ;
lcd . print ( " * Trouble * " ) ;
lcd . setCursor ( 0 , 0 ) ;
lcd . print ( " Ground Fault " ) ;
lcd . autoscroll ( ) ;
currentScreen = 2 ;
}
} else if ( fullAlarm = = true and silenced = = false and currentScreen ! = 3 ) {
lcd . clear ( ) ;
lcd . setCursor ( 1 , 0 ) ;
lcd . print ( " * FIRE ALARM * " ) ;
// lcd.setCursor(2,1);
// lcd.print("Zone 1");
currentScreen = 3 ;
} else if ( silenced = = true and currentScreen ! = 4 ) {
lcd . clear ( ) ;
lcd . setCursor ( 1 , 0 ) ;
lcd . print ( " * FIRE ALARM * " ) ;
lcd . setCursor ( 1 , 1 ) ;
lcd . print ( " -- SILENCED -- " ) ;
// lcd.setCursor(2,1);
// lcd.print("Zone 1");
currentScreen = 4 ;
} else if ( walkTest = = true and currentScreen ! = 5 ) {
lcd . clear ( ) ;
lcd . setCursor ( 0 , 0 ) ;
lcd . print ( " * Supervisory * " ) ;
lcd . setCursor ( 0 , 1 ) ;
if ( silentWalkTest = = false ) {
lcd . print ( " Walk Test - " + ( String ) walkTestCount ) ;
} else {
lcd . print ( " S. Wlk Test - " + ( String ) walkTestCount ) ;
}
currentScreen = 5 ;
digitalWrite ( readyLedPin , LOW ) ; //ready led off for walk test
}
}
void config ( ) {
char * main [ ] = { " Testing " , " Settings " } ; //menu 0
char * mainTesting [ ] = { " Walk Test " , " Silent Wlk Test " , " Strobe Test " } ; //menu 1
char * mainSettings [ ] = { " Fire Alarm " , " Panel " } ; //menu 2
char * mainSettingsFireAlarmSettings [ ] = { " Coding " , " Verification " , " Pre-Alarm " , " Audible Sil.: " } ; //menu 3
char * mainSettingsVerificationSettings [ ] = { " Verification: " , " Verif. Time " } ; //menu 4
char * mainSettingsFireAlarmSettingsCoding [ ] = { " Temporal Three " , " Marchtime " , " 4-4 " , " Continuous " , " California " , " Slow Marchtime " } ; //menu 5
char * mainSettingsFireAlarmSettingsPreAlarmSettings [ ] = { " Pre-Alarm: " , " stage 1: " , " Detector PreAlrm " } ; //menu 6
char * mainSettingsFireAlarmSettingsPreAlarmSettingsSmokeDetectorPreAlarmSettings [ ] = { " Det. PreAlrm: " , " Det. 1st stge: " , " Det. Tmeout: " } ; //menu 7
2022-07-04 19:28:48 -04:00
char * mainPanelSettings [ ] = { " Panel Name " , " Panel Security " , " LCD Dim: " , " Factory Reset " , " About " } ; //menu 8
2022-07-04 18:07:36 -04:00
char * mainPanelSettingsPanelSecurity [ ] = { " None " , " Keyswitch " , " Passcode " } ; //menu 9
char * mainPanelSettingsPanelName [ ] = { " Enter Name: " } ; //menu 10
char * mainPanelSettingsFactoryReset [ ] = { " Are you sure? " } ; //menu 11
2022-07-04 19:28:48 -04:00
char * mainPanelSettingsAbout [ ] = { " ANTIGNEOUS OS " , " Firmware: " , firmwareRev , " by Lexzach " } ; //menu 12
2022-07-04 18:07:36 -04:00
// char *mainPanelSettingsHomescreen[] = {"Panel Name", "Stats for Nerds"}; //menu 10
// char *mainPanelSettingsHomescreenStatsForNerds[] = {"Zone Input Voltages"}; //menu 11
2022-07-04 19:28:48 -04:00
if ( digitalRead ( resetSwitchPin ) = = HIGH ) { //RESET BUTTON
2022-07-04 18:07:36 -04:00
resetPressed = true ;
} else {
resetPressed = false ;
resetStillPressed = false ;
}
2022-07-04 19:28:48 -04:00
if ( digitalRead ( silenceSwitchPin ) = = HIGH ) { //SILENCE BUTTON
2022-07-04 18:07:36 -04:00
silencePressed = true ;
} else {
silencePressed = false ;
silenceStillPressed = false ;
}
2022-07-04 19:28:48 -04:00
if ( digitalRead ( drillSwitchPin ) = = HIGH ) { //DRILL BUTTON
2022-07-04 18:07:36 -04:00
drillPressed = true ;
} else {
drillPressed = false ;
drillStillPressed = false ;
}
if ( configPage = = 0 ) {
if ( resetPressed = = true and resetStillPressed = = false ) {
if ( cursorPosition = = 0 ) { //main screen
cursorPosition = 1 ;
configTop = ( String ) main [ 1 ] ;
configBottom = ( String ) main [ 0 ] ;
} else if ( cursorPosition = = 1 ) {
cursorPosition = 0 ;
configTop = ( String ) main [ 0 ] ;
configBottom = ( String ) main [ 1 ] ;
}
} else if ( silencePressed = = true and silenceStillPressed = = false ) {
silencePressed = true ;
configMenu = false ;
currentScreen = - 1 ;
} else if ( drillPressed = = true and drillStillPressed = = false ) {
if ( cursorPosition = = 0 ) { //cursor over testing
configPage = 1 ; //change screen to testing
cursorPosition = 0 ;
configTop = ( String ) mainTesting [ 0 ] ;
configBottom = ( String ) mainTesting [ 1 ] ;
} else if ( cursorPosition = = 1 ) { //cursor over settings
configPage = 2 ; //change screen to settings
cursorPosition = 0 ;
configTop = ( String ) mainSettings [ 0 ] ;
configBottom = ( String ) mainSettings [ 1 ] ;
}
}
} else if ( configPage = = 1 ) {
if ( resetPressed = = true and resetStillPressed = = false ) {
if ( cursorPosition = = 0 ) {
cursorPosition = 1 ;
configTop = ( String ) mainTesting [ 1 ] ;
configBottom = ( String ) mainTesting [ 2 ] ;
} else if ( cursorPosition = = 1 ) {
cursorPosition = 2 ;
configTop = ( String ) mainTesting [ 2 ] ;
configBottom = ( String ) mainTesting [ 0 ] ;
} else if ( cursorPosition = = 2 ) {
cursorPosition = 0 ;
configTop = ( String ) mainTesting [ 0 ] ;
configBottom = ( String ) mainTesting [ 1 ] ;
}
} else if ( silencePressed = = true and silenceStillPressed = = false ) {
configPage = 0 ;
cursorPosition = 0 ;
configTop = ( String ) main [ 0 ] ;
configBottom = ( String ) main [ 1 ] ;
strobe = false ;
} else if ( drillPressed = = true and drillStillPressed = = false ) {
if ( cursorPosition = = 0 ) {
walkTest = true ;
silentWalkTest = false ;
silencePressed = true ;
configMenu = false ;
currentScreen = - 1 ;
walkTestCount = 0 ;
} else if ( cursorPosition = = 1 ) {
walkTest = true ;
silentWalkTest = true ;
silencePressed = true ;
configMenu = false ;
currentScreen = - 1 ;
walkTestCount = 0 ;
} else if ( cursorPosition = = 2 ) {
if ( strobe = = false ) {
strobe = true ;
configTop = ( String ) mainTesting [ 2 ] + " * " ;
} else {
strobe = false ;
configTop = ( String ) mainTesting [ 2 ] ;
}
}
}
} else if ( configPage = = 2 ) {
if ( resetPressed = = true and resetStillPressed = = false ) {
if ( cursorPosition = = 0 ) { //main screen
cursorPosition = 1 ;
configTop = ( String ) mainSettings [ 1 ] ;
configBottom = ( String ) mainSettings [ 0 ] ;
} else if ( cursorPosition = = 1 ) {
cursorPosition = 0 ;
configTop = ( String ) mainSettings [ 0 ] ;
configBottom = ( String ) mainSettings [ 1 ] ;
}
} else if ( silencePressed = = true and silenceStillPressed = = false ) {
configPage = 0 ;
cursorPosition = 0 ;
configTop = ( String ) main [ 0 ] ;
configBottom = ( String ) main [ 1 ] ;
} else if ( drillPressed = = true and drillStillPressed = = false ) {
if ( cursorPosition = = 0 ) {
configPage = 3 ; //change screen to facp settings
cursorPosition = 0 ;
configTop = ( String ) mainSettingsFireAlarmSettings [ 0 ] ;
configBottom = ( String ) mainSettingsFireAlarmSettings [ 1 ] ;
} else if ( cursorPosition = = 1 ) {
configPage = 8 ; //change screen to facp settings
cursorPosition = 0 ;
configTop = ( String ) mainPanelSettings [ 0 ] ;
configBottom = ( String ) mainPanelSettings [ 1 ] ;
}
}
} else if ( configPage = = 3 ) {
if ( resetPressed = = true and resetStillPressed = = false ) {
if ( cursorPosition = = 0 ) {
cursorPosition = 1 ;
configTop = ( String ) mainSettingsFireAlarmSettings [ 1 ] ;
configBottom = ( String ) mainSettingsFireAlarmSettings [ 2 ] ;
} else if ( cursorPosition = = 1 ) {
cursorPosition = 2 ;
configTop = ( String ) mainSettingsFireAlarmSettings [ 2 ] ;
configBottom = ( String ) mainSettingsFireAlarmSettings [ 3 ] + audibleSilence ;
} else if ( cursorPosition = = 2 ) {
cursorPosition = 3 ;
configTop = ( String ) mainSettingsFireAlarmSettings [ 3 ] + audibleSilence ;
configBottom = ( String ) mainSettingsFireAlarmSettings [ 0 ] ;
} else if ( cursorPosition = = 3 ) {
cursorPosition = 0 ;
configTop = ( String ) mainSettingsFireAlarmSettings [ 0 ] ;
configBottom = ( String ) mainSettingsFireAlarmSettings [ 1 ] ;
}
} else if ( silencePressed = = true and silenceStillPressed = = false ) {
configPage = 2 ;
cursorPosition = 0 ;
configTop = ( String ) mainSettings [ 0 ] ;
configBottom = ( String ) mainSettings [ 1 ] ;
} else if ( drillPressed = = true and drillStillPressed = = false ) {
if ( cursorPosition = = 0 ) {
configPage = 5 ;
cursorPosition = 0 ;
if ( codeWheel = = 0 ) {
configTop = ( String ) mainSettingsFireAlarmSettingsCoding [ 0 ] + " * " ;
} else {
configTop = ( String ) mainSettingsFireAlarmSettingsCoding [ 0 ] ;
}
if ( codeWheel = = 1 ) {
configBottom = ( String ) mainSettingsFireAlarmSettingsCoding [ 1 ] + " * " ;
} else {
configBottom = ( String ) mainSettingsFireAlarmSettingsCoding [ 1 ] ;
}
} else if ( cursorPosition = = 1 ) {
configPage = 4 ;
cursorPosition = 0 ;
configTop = ( String ) mainSettingsVerificationSettings [ 0 ] ;
configBottom = ( String ) mainSettingsVerificationSettings [ 1 ] ;
} else if ( cursorPosition = = 2 ) {
configPage = 6 ;
cursorPosition = 0 ;
configTop = ( String ) mainSettingsFireAlarmSettingsPreAlarmSettings [ 0 ] ;
configBottom = ( String ) mainSettingsFireAlarmSettingsPreAlarmSettings [ 1 ] ;
} else if ( cursorPosition = = 3 ) {
if ( audibleSilence = = true ) {
audibleSilence = false ;
EEPROM . write ( 79 , 0 ) ;
} else {
audibleSilence = true ;
EEPROM . write ( 79 , 1 ) ;
}
EEPROM . commit ( ) ;
configTop = ( String ) mainSettingsFireAlarmSettings [ 3 ] + audibleSilence ;
configBottom = ( String ) mainSettingsFireAlarmSettings [ 0 ] ;
}
}
} else if ( configPage = = 8 ) {
if ( resetPressed = = true and resetStillPressed = = false ) {
if ( cursorPosition = = 0 ) {
cursorPosition = 1 ;
configTop = ( String ) mainPanelSettings [ 1 ] ;
if ( lcdTimeout = = 0 ) {
configBottom = ( String ) mainPanelSettings [ 2 ] + " off " ;
} else if ( lcdTimeout < = 30000 ) {
configBottom = ( String ) mainPanelSettings [ 2 ] + lcdTimeout / 1000 + " s " ;
} else {
configBottom = ( String ) mainPanelSettings [ 2 ] + lcdTimeout / 60000 + " m " ;
}
} else if ( cursorPosition = = 1 ) {
cursorPosition = 2 ;
if ( lcdTimeout = = 0 ) {
configTop = ( String ) mainPanelSettings [ 2 ] + " off " ;
} else if ( lcdTimeout < = 30000 ) {
configTop = ( String ) mainPanelSettings [ 2 ] + lcdTimeout / 1000 + " s " ;
} else {
configTop = ( String ) mainPanelSettings [ 2 ] + lcdTimeout / 60000 + " m " ;
}
configBottom = ( String ) mainPanelSettings [ 3 ] ;
} else if ( cursorPosition = = 2 ) {
cursorPosition = 3 ;
configTop = ( String ) mainPanelSettings [ 3 ] ;
configBottom = ( String ) mainPanelSettings [ 4 ] ;
} else if ( cursorPosition = = 3 ) {
cursorPosition = 4 ;
configTop = ( String ) mainPanelSettings [ 4 ] ;
configBottom = ( String ) mainPanelSettings [ 0 ] ;
} else if ( cursorPosition = = 4 ) {
cursorPosition = 0 ;
configTop = ( String ) mainPanelSettings [ 0 ] ;
configBottom = ( String ) mainPanelSettings [ 1 ] ;
}
} else if ( silencePressed = = true and silenceStillPressed = = false ) {
configPage = 2 ;
cursorPosition = 0 ;
configTop = ( String ) mainSettings [ 0 ] ;
configBottom = ( String ) mainSettings [ 1 ] ;
} else if ( drillPressed = = true and drillStillPressed = = false ) {
if ( cursorPosition = = 0 ) {
configPage = 10 ;
cursorPosition = 0 ;
configTop = " Enter Name: " ;
configBottom = ( String ) panelName ;
lcd . blink_on ( ) ;
} else if ( cursorPosition = = 1 ) {
//panel security
} else if ( cursorPosition = = 2 ) {
if ( lcdTimeout = = 0 ) {
lcdTimeout = 15000 ;
EEPROM . write ( 80 , 1 ) ;
} else if ( lcdTimeout = = 15000 ) {
lcdTimeout = 30000 ;
EEPROM . write ( 80 , 2 ) ;
} else if ( lcdTimeout = = 30000 ) {
lcdTimeout = 60000 ;
EEPROM . write ( 80 , 4 ) ;
} else if ( lcdTimeout = = 60000 ) {
lcdTimeout = 300000 ;
EEPROM . write ( 80 , 20 ) ;
} else if ( lcdTimeout = = 300000 ) {
lcdTimeout = 600000 ;
EEPROM . write ( 80 , 40 ) ;
} else if ( lcdTimeout > = 600000 ) {
lcdTimeout = 0 ;
EEPROM . write ( 80 , 0 ) ;
}
EEPROM . commit ( ) ;
if ( lcdTimeout = = 0 ) {
configTop = ( String ) mainPanelSettings [ 2 ] + " off " ;
} else if ( lcdTimeout < = 30000 ) {
configTop = ( String ) mainPanelSettings [ 2 ] + lcdTimeout / 1000 + " s " ;
} else {
configTop = ( String ) mainPanelSettings [ 2 ] + lcdTimeout / 60000 + " m " ;
}
} else if ( cursorPosition = = 3 ) {
//factory reset
} else if ( cursorPosition = = 4 ) {
//firmware version
}
}
} else if ( configPage = = 10 ) { //panel rename routine
if ( resetPressed = = true and resetStillPressed = = false ) {
clearTimer = 0 ;
if ( panelNameList [ cursorPosition ] = = 90 ) {
panelNameList [ cursorPosition ] = 32 ;
} else if ( panelNameList [ cursorPosition ] = = 32 ) {
panelNameList [ cursorPosition ] = 39 ;
} else if ( panelNameList [ cursorPosition ] = = 39 ) {
panelNameList [ cursorPosition ] = 45 ;
} else if ( panelNameList [ cursorPosition ] = = 57 ) {
panelNameList [ cursorPosition ] = 65 ;
} else {
panelNameList [ cursorPosition ] = panelNameList [ cursorPosition ] + 1 ;
}
} else if ( resetPressed = = true and resetStillPressed = = true ) {
clearTimer + + ;
if ( clearTimer > = 1000 ) {
panelNameList [ cursorPosition ] = 32 ;
}
} else if ( silencePressed = = true and silenceStillPressed = = false ) {
int x = 0 ;
for ( int i = 11 ; i < = 26 ; i + + ) { //write new panel name
EEPROM . write ( i , panelNameList [ x ] ) ;
x + + ;
}
lcd . blink_off ( ) ;
EEPROM . commit ( ) ;
configPage = 8 ;
cursorPosition = 0 ;
configTop = ( String ) mainPanelSettings [ 0 ] ;
configBottom = ( String ) mainPanelSettings [ 1 ] ;
x = 0 ;
panelName = " " ;
for ( int i = 11 ; i < = 71 ; i + + ) { //read panel name
if ( EEPROM . read ( i ) ! = 0 ) {
panelName = panelName + ( char ) EEPROM . read ( i ) ;
panelNameList [ x ] = EEPROM . read ( i ) ;
x + + ;
}
}
} else if ( drillPressed = = true and drillStillPressed = = false ) {
2022-07-04 19:28:48 -04:00
currentConfigTop = " e " ; //make sure the screen re-renders
2022-07-04 18:07:36 -04:00
if ( cursorPosition ! = 15 ) {
cursorPosition + + ;
} else {
cursorPosition = 0 ;
}
}
if ( configPage = = 10 ) { //make sure the panel doesn't re-render the text on the previous page when exiting
configBottom = " " ;
for ( int i = 0 ; i < = 15 ; i + + ) { //generate name to print on lcd
configBottom = configBottom + ( char ) panelNameList [ i ] ;
}
}
} else if ( configPage = = 5 ) {
if ( resetPressed = = true and resetStillPressed = = false ) {
if ( cursorPosition = = 0 ) {
cursorPosition = 1 ;
if ( codeWheel = = 1 ) {
configTop = ( String ) mainSettingsFireAlarmSettingsCoding [ 1 ] + " * " ;
} else {
configTop = ( String ) mainSettingsFireAlarmSettingsCoding [ 1 ] ;
}
if ( codeWheel = = 2 ) {
configBottom = ( String ) mainSettingsFireAlarmSettingsCoding [ 2 ] + " * " ;
} else {
configBottom = ( String ) mainSettingsFireAlarmSettingsCoding [ 2 ] ;
}
} else if ( cursorPosition = = 1 ) {
cursorPosition = 2 ;
if ( codeWheel = = 2 ) {
configTop = ( String ) mainSettingsFireAlarmSettingsCoding [ 2 ] + " * " ;
} else {
configTop = ( String ) mainSettingsFireAlarmSettingsCoding [ 2 ] ;
}
if ( codeWheel = = 3 ) {
configBottom = ( String ) mainSettingsFireAlarmSettingsCoding [ 3 ] + " * " ;
} else {
configBottom = ( String ) mainSettingsFireAlarmSettingsCoding [ 3 ] ;
}
} else if ( cursorPosition = = 2 ) {
cursorPosition = 3 ;
if ( codeWheel = = 3 ) {
configTop = ( String ) mainSettingsFireAlarmSettingsCoding [ 3 ] + " * " ;
} else {
configTop = ( String ) mainSettingsFireAlarmSettingsCoding [ 3 ] ;
}
if ( codeWheel = = 4 ) {
configBottom = ( String ) mainSettingsFireAlarmSettingsCoding [ 4 ] + " * " ;
} else {
configBottom = ( String ) mainSettingsFireAlarmSettingsCoding [ 4 ] ;
}
} else if ( cursorPosition = = 3 ) {
cursorPosition = 4 ;
if ( codeWheel = = 4 ) {
configTop = ( String ) mainSettingsFireAlarmSettingsCoding [ 4 ] + " * " ;
} else {
configTop = ( String ) mainSettingsFireAlarmSettingsCoding [ 4 ] ;
}
if ( codeWheel = = 5 ) {
configBottom = ( String ) mainSettingsFireAlarmSettingsCoding [ 5 ] + " * " ;
} else {
configBottom = ( String ) mainSettingsFireAlarmSettingsCoding [ 5 ] ;
}
} else if ( cursorPosition = = 4 ) {
cursorPosition = 5 ;
if ( codeWheel = = 5 ) {
configTop = ( String ) mainSettingsFireAlarmSettingsCoding [ 5 ] + " * " ;
} else {
configTop = ( String ) mainSettingsFireAlarmSettingsCoding [ 5 ] ;
}
if ( codeWheel = = 0 ) {
configBottom = ( String ) mainSettingsFireAlarmSettingsCoding [ 0 ] + " * " ;
} else {
configBottom = ( String ) mainSettingsFireAlarmSettingsCoding [ 0 ] ;
}
} else if ( cursorPosition = = 5 ) {
cursorPosition = 0 ;
if ( codeWheel = = 0 ) {
configTop = ( String ) mainSettingsFireAlarmSettingsCoding [ 0 ] + " * " ;
} else {
configTop = ( String ) mainSettingsFireAlarmSettingsCoding [ 0 ] ;
}
if ( codeWheel = = 1 ) {
configBottom = ( String ) mainSettingsFireAlarmSettingsCoding [ 1 ] + " * " ;
} else {
configBottom = ( String ) mainSettingsFireAlarmSettingsCoding [ 1 ] ;
}
}
} else if ( silencePressed = = true and silenceStillPressed = = false ) {
configPage = 3 ; //change screen to facp settings
cursorPosition = 0 ;
configTop = ( String ) mainSettingsFireAlarmSettings [ 0 ] ;
configBottom = ( String ) mainSettingsFireAlarmSettings [ 1 ] ;
} else if ( drillPressed = = true and drillStillPressed = = false ) {
EEPROM . write ( 7 , cursorPosition ) ;
EEPROM . commit ( ) ;
configTop = ( String ) mainSettingsFireAlarmSettingsCoding [ cursorPosition ] + " * " ;
if ( cursorPosition = = 5 ) {
configBottom = ( String ) mainSettingsFireAlarmSettingsCoding [ 0 ] ;
} else {
configBottom = ( String ) mainSettingsFireAlarmSettingsCoding [ cursorPosition + 1 ] ;
}
codeWheel = EEPROM . read ( 7 ) ; //codeWheel setting address
}
}
// if (resetPressed == true and resetStillPressed == false){
// } else if (silencePressed == true and silenceStillPressed == false){
// } else if (drillPressed == true and drillStillPressed == false){
// }
if ( configTop ! = currentConfigTop or configBottom ! = currentConfigBottom ) {
lcd . clear ( ) ;
lcd . setCursor ( 0 , 0 ) ;
lcd . print ( " ] " + configTop ) ;
lcd . setCursor ( 0 , 1 ) ;
lcd . print ( configBottom ) ;
currentConfigTop = configTop ;
currentConfigBottom = configBottom ;
if ( configPage = = 10 ) {
lcd . setCursor ( cursorPosition , 1 ) ;
}
}
2022-07-04 19:28:48 -04:00
if ( digitalRead ( resetSwitchPin ) = = HIGH ) { //RESET BUTTON
2022-07-04 18:07:36 -04:00
resetStillPressed = true ;
}
2022-07-04 19:28:48 -04:00
if ( digitalRead ( silenceSwitchPin ) = = HIGH ) { //SILENCE BUTTON
2022-07-04 18:07:36 -04:00
silenceStillPressed = true ;
}
2022-07-04 19:28:48 -04:00
if ( digitalRead ( drillSwitchPin ) = = HIGH ) { //DRILL BUTTON
2022-07-04 18:07:36 -04:00
drillStillPressed = true ;
}
}
void loop ( ) {
if ( lcdTimeout ! = 0 ) {
if ( lcdTimeout < = lcdTimeoutTimer and backlightOn = = true ) {
lcd . noBacklight ( ) ;
backlightOn = false ;
} else if ( backlightOn = = true ) {
lcdTimeoutTimer + + ;
}
if ( ( drillPressed = = true or silencePressed = = true or resetPressed = = true or fullAlarm = = true or trouble = = true ) and backlightOn = = false ) {
lcdTimeoutTimer = 0 ;
lcd . backlight ( ) ;
backlightOn = true ;
}
}
delay ( 1 ) ;
checkKey ( ) ; //check to see if the key is inserted
checkDevices ( ) ; //check pull stations and smoke detectors
if ( ( keyInserted = = true or keyRequired = = false ) and configMenu = = false ) {
checkButtons ( ) ; //check if certain buttons are pressed
}
troubleCheck ( ) ; //trouble check
alarm ( ) ; //alarm codewheel
if ( configMenu = = false ) {
lcdUpdate ( ) ;
} else if ( configMenu = = true ) {
if ( keyInserted = = true or keyRequired = = false ) {
config ( ) ;
}
}
}