Compare commits

..

6 Commits

Author SHA1 Message Date
5e98be43ed Update README.md 2024-06-03 11:03:16 -04:00
a924b6d243
troubleshooting & fixed error code 2024-01-03 14:05:12 -05:00
21c20db83e
stable firmware improvements 2023-12-31 13:18:13 -05:00
94d8cd9c53
Update README.md 2023-03-28 22:04:12 -04:00
9263e47355
instructions 2023-03-28 12:29:16 -04:00
969e449376
stable firmware 2023-03-28 12:07:02 -04:00
10 changed files with 46 additions and 193 deletions

View File

@ -1,40 +1,6 @@
# ⚠️ TESTED FIRMWARE IS IN [RELEASES](https://code.lexza.ch/Lexzach/antigneous/releases) ⚠️ # Stable Release v1.5
[![](https://dcbadge.vercel.app/api/server/fwqYtBrfqs)](https://discord.gg/fwqYtBrfqs) ## Instruction Manuals 📄
📕 [Basic Assembly and Operation Manual](https://code.lexza.ch/Lexzach/antigneous/src/branch/stable-v1.5/instructions/antigneous_instructions.pdf) - [Download](https://code.lexza.ch/Lexzach/antigneous/raw/branch/stable-v1.5/instructions/antigneous_instructions.pdf)
![Icon](https://code.lexza.ch/Lexzach/antigneous/raw/branch/nightly-firmware/misc/gh_icon.png)
# What is this? 🔥
Antigneous is an open-source conventional fire alarm control panel, 3 years in the making. A fire alarm control panel is the device responsible for controlling all of the devices in a fire alarm system, such as smoke detectors, pull stations, and notification devices. Normally, a fire alarm control panel will run you back hundreds, if not thousands of dollars. This project strives to fix that issue by allowing for anyone to build their own reliable fire alarm control panel without breaking the bank.
# What do you mean by "open-source" 🔓
**You do not have to give a single cent to me in order to build this panel.**
The code that is being ran in an Antigneous fire alarm control panel is completely visible to everyone and anyone, [right here](https://code.lexza.ch/Lexzach/antigneous/src/branch/nightly-firmware/main/main.ino)! Don't like something about Antigneous, you can change it (or even better submit an issue or pull request). All hardware that is used in the making of an Antigneous panel is available to anyone. The wiring diagram for making your own is also available to anyone.
# Instruction Manuals 📄
📕 [Basic Assembly and Operation Manual](https://code.lexza.ch/Lexzach/antigneous/src/branch/nightly-firmware/instructions/antigneous_instructions.pdf) - [Download](https://code.lexza.ch/Lexzach/antigneous/raw/branch/nightly-firmware/instructions/antigneous_instructions.pdf)
📚 [Technical Instruction Manual](https://code.lexza.ch/Lexzach/antigneous/src/branch/nightly-firmware/instructions/antigneous_tech_instructions.pdf) - [Download](https://code.lexza.ch/Lexzach/antigneous/raw/branch/nightly-firmware/instructions/antigneous_tech_instructions.pdf)
# Features and Limitations ⚖️
Although I have tried to make Antigneous as feature-rich as possible, there are some limitations to take into consideration...
## Features ✅
- LCD display
- Very customizable, tinker friendly design
- Many coding selections: Temporal three, Code 4-4, Marchtime, Continuous, California Code, and Slower Marchtime
- Togglable keyless silence
- Walk test, silent walk test, and strobe test
- EOL resistor support for activating loop
- Pull station and smoke detector verification
- Fail-safe mode in case of unbootable panel
- Selectable security levels, electronic keyswitch or no keyswitch
- Strobe Sync support for System Sensor and Wheelock (more will be added)
## Current Limitations ❎
- **NOT OFFICIALLY TESTED**! This should *not* be used in place of a fire panel from a name brand company
- No EOL support for NAC circuit
- No SmartSync, or two wire sync (CURRENTLY)
- No support for 2 wire smoke detectors
- Only 2 zones
📚 [Technical Instruction Manual](https://code.lexza.ch/Lexzach/antigneous/src/branch/stable-v1.5/instructions/antigneous_tech_instructions.pdf) - [Download](https://code.lexza.ch/Lexzach/antigneous/raw/branch/stable-v1.5/instructions/antigneous_tech_instructions.pdf)

View File

@ -13,15 +13,6 @@ char *firmwareRev = "v1.5"; //VERSION
int EEPROMVersion = 1; //version control to rewrite eeprom after update int EEPROMVersion = 1; //version control to rewrite eeprom after update
int EEPROMBuild = 5; int EEPROMBuild = 5;
//patents
// https://patents.google.com/patent/US5559492 - simplex
// https://patents.google.com/patent/US6281789 - simplex smartsync
// https://patents.google.com/patent/US6194994 - wheelock
// https://patents.google.com/patent/US5659287A/en - gentex strobe sync
// https://patents.google.com/patent/US5959528 - gentex smartsync
// https://patents.google.com/patent/US8928191B2/en - potter weird universal sync
//----------------------------------------------------------------------------- RUNTIME VARIABLES //----------------------------------------------------------------------------- RUNTIME VARIABLES
bool fullAlarm = false; //bool to control if this is a full alarm that requres a panel reset to clear bool fullAlarm = false; //bool to control if this is a full alarm that requres a panel reset to clear
bool silenced = false; bool silenced = false;
@ -86,8 +77,6 @@ bool preAlarm = false; //use pre-alarm?
bool smokeDetectorVerification = false; //should smoke detectors activate first stage bool smokeDetectorVerification = false; //should smoke detectors activate first stage
bool smokeDetectorCurrentlyInVerification = false; //Is a smoke detector currently in verification? bool smokeDetectorCurrentlyInVerification = false; //Is a smoke detector currently in verification?
bool audibleSilence = true; bool audibleSilence = true;
bool useTwoWire = false; //does the panel use 2 wire for alarms
int twoWireTimer = 0; //timer for 2 wire alarms
int smokeDetectorTimeout = 60000; //how long to wait before toggling smoke detectors back on int smokeDetectorTimeout = 60000; //how long to wait before toggling smoke detectors back on
int smokeDetectorPostRestartTimer = 0; //variable to keep track of the 60 seconds post-power up that the panel watches the smoke detector int smokeDetectorPostRestartTimer = 0; //variable to keep track of the 60 seconds post-power up that the panel watches the smoke detector
int smokeDetectorPostRestartVerificationTime = 120000; //time in ms that the smoke detector should be monitored int smokeDetectorPostRestartVerificationTime = 120000; //time in ms that the smoke detector should be monitored
@ -284,20 +273,23 @@ void setup() {
lcd.print((String)"HOLD BUTTONS - "+i); lcd.print((String)"HOLD BUTTONS - "+i);
delay(1000); delay(1000);
} }
lcd.clear();
lcd.setCursor(0,0);
if (digitalRead(resetButtonPin) and digitalRead(silenceButtonPin) and digitalRead(drillButtonPin)){ if (digitalRead(resetButtonPin) and digitalRead(silenceButtonPin) and digitalRead(drillButtonPin)){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("RESETTING TO"); lcd.print("RESETTING TO");
lcd.setCursor(0,1); lcd.setCursor(0,1);
lcd.print("FACTORY SETTINGS"); lcd.print("FACTORY SETTINGS");
resetEEPROM(); resetEEPROM();
delay(4000);
ESP.restart();
} else { } else {
lcd.clear();
lcd.setCursor(0,0);
lcd.print("FACTORY RESET"); lcd.print("FACTORY RESET");
lcd.setCursor(0,1); lcd.setCursor(0,1);
lcd.print("CANCELLED"); lcd.print("CANCELLED");
delay(3000);
} }
delay(3000);
ESP.restart();
} }
//----------------------------------------------------------------------------- EEPROM RESET BUTTONS //----------------------------------------------------------------------------- EEPROM RESET BUTTONS
@ -366,7 +358,6 @@ void setup() {
smokeDetectorVerification = EEPROM.read(76) == 1 ? true : false; smokeDetectorVerification = EEPROM.read(76) == 1 ? true : false;
audibleSilence = EEPROM.read(79) == 1 ? true : false; audibleSilence = EEPROM.read(79) == 1 ? true : false;
keylessSilence = EEPROM.read(27) == 1 ? true : false; keylessSilence = EEPROM.read(27) == 1 ? true : false;
useTwoWire = EEPROM.read(30) == 1 ? true : false;
smokeDetectorTimeout = EEPROM.read(77)*5000; smokeDetectorTimeout = EEPROM.read(77)*5000;
smokeDetectorPostRestartVerificationTime = EEPROM.read(28)*5000; smokeDetectorPostRestartVerificationTime = EEPROM.read(28)*5000;
firstStageTime = EEPROM.read(75)*60000; firstStageTime = EEPROM.read(75)*60000;
@ -722,41 +713,23 @@ void checkButtons(){
//----------------------------------------------------------------------------- NAC ACTIVATION //----------------------------------------------------------------------------- NAC ACTIVATION
void alarm(){ void alarm(){
if (strobe){ if (strobe){
if (strobeSync == 0){ //add more strobesyncs in the future if (strobeSync != 1 and strobeSync != 2){ //add more strobesyncs in the future
strobeOn(true); strobeOn(true);
} else { } else if (strobeSync == 1 or strobeSync == 2){
if (strobeSyncTimer >= 1000){
strobeSyncTimer=0;
} else if (strobeSyncTimer >= 975){
strobeOn(false);
} else if (strobeSyncTimer <= 10){
strobeOn(true);
}
strobeSyncTimer++; strobeSyncTimer++;
if (strobeSync == 1 or strobeSync == 4){
if (strobeSyncTimer >= 1000){
strobeSyncTimer=0;
} else if (strobeSyncTimer >= 975){
strobeOn(false);
} else if (strobeSyncTimer <= 25){
strobeOn(true);
}
} else if (strobeSync == 2) {
if (strobeSyncTimer >= 2000){
strobeSyncTimer=0;
} else if (strobeSyncTimer >= 1968){
strobeOn(false);
} else if (strobeSyncTimer <= 32){
strobeOn(true);
}
} else if (strobeSync == 3) {
if (strobeSyncTimer >= 2000){
strobeSyncTimer=0;
} else if (strobeSyncTimer >= 1985){
strobeOn(false);
} else if (strobeSyncTimer <= 15){
strobeOn(true);
}
}
} }
}else{ }else{
strobeOn(false); strobeOn(false);
strobeSyncTimer = 0; strobeSyncTimer = 0;
} }
if (horn and not useTwoWire){ if (horn){
if (not preAlarm or secondStage){ //yes, preAlarm == false is redundant but in the case that second stage == false, but pre-alarm is off, the full alarm will still sound if (not preAlarm or secondStage){ //yes, preAlarm == false is redundant but in the case that second stage == false, but pre-alarm is off, the full alarm will still sound
if (codeWheel == 0){ if (codeWheel == 0){
@ -787,7 +760,7 @@ void alarm(){
codeWheelTimer = -1; codeWheelTimer = -1;
} }
} else if (codeWheel == 2) { //--------- 4-4 } else if (codeWheel == 2) { //---------- 4-4
if (codeWheelTimer == 0) { if (codeWheelTimer == 0) {
hornOn(true); hornOn(true);
@ -826,7 +799,7 @@ void alarm(){
codeWheelTimer = -1; codeWheelTimer = -1;
} }
} else if (codeWheel == 3) { //--------- continuous } else if (codeWheel == 3) { //---------- continuous
hornOn(true); hornOn(true);
} else if (codeWheel == 5) { } else if (codeWheel == 5) {
if (codeWheelTimer == 0){ //---------- marchtime slower if (codeWheelTimer == 0){ //---------- marchtime slower
@ -858,42 +831,6 @@ void alarm(){
codeWheelTimer = -1; codeWheelTimer = -1;
} }
codeWheelTimer++;
firstStageTimer++;
if (firstStageTimer>=firstStageTime){
codeWheelTimer = 0;
secondStage = true;
currentScreen = -1;
}
}
} else if (useTwoWire){ //-------------------------------- DO MORE TESTING WITH THIS!!!!
if (horn and (not preAlarm or secondStage)){ //2 wire alarm
if (twoWireTimer >= 1000){
twoWireTimer = 0;
} else if (twoWireTimer >= 975){
hornOn(false);
} else if (twoWireTimer <= 10){
hornOn(true);
}
twoWireTimer++;
} else if (not horn and silenced and audibleSilence){ //2 wire silence
if (twoWireTimer >= 1000){
twoWireTimer = 0;
} else if (twoWireTimer >= 965){
hornOn(false);
} else if (twoWireTimer <= 10){
hornOn(true);
}
twoWireTimer++;
} else if (horn and preAlarm and not secondStage){ //2 wire pre-alarm
if (codeWheelTimer == 0){
hornOn(true);
} else if (codeWheelTimer == 75){
hornOn(false);
} else if (codeWheelTimer >= 5075){
codeWheelTimer = -1;
}
codeWheelTimer++; codeWheelTimer++;
firstStageTimer++; firstStageTimer++;
if (firstStageTimer>=firstStageTime){ if (firstStageTimer>=firstStageTime){
@ -905,7 +842,6 @@ void alarm(){
} else { } else {
hornOn(false); hornOn(false);
codeWheelTimer = 0; codeWheelTimer = 0;
twoWireTimer = 0;
} }
if (fullAlarm){ if (fullAlarm){
alarmLedTimer++; alarmLedTimer++;
@ -1044,18 +980,18 @@ void configLCDUpdate(int cursor, String top, String bottom, bool replaceTop = fa
} }
void config(){ void config(){
const char *main[] = {"Testing","Settings"}; //menu 0 char *main[] = {"Testing","Settings"}; //menu 0
const char *mainTesting[] = {"Walk Test","Silent Wlk Test","Strobe Test"}; //menu 1 char *mainTesting[] = {"Walk Test","Silent Wlk Test","Strobe Test"}; //menu 1
const char *mainSettings[] = {"Fire Alarm","Panel"}; //menu 2 char *mainSettings[] = {"Fire Alarm","Panel"}; //menu 2
const char *mainSettingsFireAlarmSettings[] = {"Coding","Verification","Pre-Alarm","Audible Sil.:","No-Key Sil.:","Strobe Sync","2 Wire:"}; //menu 3 char *mainSettingsFireAlarmSettings[] = {"Coding","Verification","Pre-Alarm","Audible Sil.:","No-Key Sil.:","Strobe Sync"}; //menu 3
const char *mainSettingsVerificationSettings[] = {"Verification:","V.Time:","Det.Verif.:","Det.Timeout:","Det.Watch:"}; //menu 4 char *mainSettingsVerificationSettings[] = {"Verification:","V.Time:","Det.Verif.:","Det.Timeout:","Det.Watch:"}; //menu 4
const char *mainSettingsFireAlarmSettingsCoding[] = {"Temporal Three","Marchtime","4-4","Continuous","California","Slow Marchtime"}; //menu 5 char *mainSettingsFireAlarmSettingsCoding[] = {"Temporal Three","Marchtime","4-4","Continuous","California","Slow Marchtime"}; //menu 5
const char *mainSettingsFireAlarmSettingsPreAlarmSettings[] = {"Pre-Alarm:","Stage1 Time:"}; //menu 6 char *mainSettingsFireAlarmSettingsPreAlarmSettings[] = {"Pre-Alarm:","Stage1 Time:"}; //menu 6
const char *mainPanelSettings[] = {"Panel Name","Panel Security","LCD Dim:","Factory Reset","About"}; //menu 8 char *mainPanelSettings[] = {"Panel Name","Panel Security","LCD Dim:","Factory Reset","About"}; //menu 8
const char *mainPanelSettingsPanelSecurity[] = {"None","Keyswitch","Passcode"}; //menu 9 char *mainPanelSettingsPanelSecurity[] = {"None","Keyswitch","Passcode"}; //menu 9
const char *mainPanelSettingsPanelName[] = {"Enter Name:"}; //menu 10 char *mainPanelSettingsPanelName[] = {"Enter Name:"}; //menu 10
const char *mainSettingsFireAlarmSettingsStrobeSync[] = {"None","System Sensor","Wheelock", "Gentex","Simplex"}; //menu 11 char *mainSettingsFireAlarmSettingsStrobeSync[] = {"None","System Sensor","Wheelock"}; //menu 11
const char *mainPanelSettingsAbout[] = {"Antigneous FACP","Nightly ","Made by Lexzach","Hrs On: "}; //menu 12 char *mainPanelSettingsAbout[] = {"Antigneous FACP","Stable ","Made by Lexzach","Hrs On: "}; //menu 12
if (digitalRead(resetButtonPin)){ //RESET BUTTON if (digitalRead(resetButtonPin)){ //RESET BUTTON
resetPressed = true; resetPressed = true;
@ -1158,11 +1094,7 @@ void config(){
} else if (drillPressed and not drillStillPressed){ } else if (drillPressed and not drillStillPressed){
if (cursorPosition == 0){ if (cursorPosition == 0){
configPage = 3; //change screen to facp settings configPage = 3; //change screen to facp settings
if (useTwoWire){ configLCDUpdate(0, (String)mainSettingsFireAlarmSettings[0], (String)mainSettingsFireAlarmSettings[1]);
configLCDUpdate(0, (String)mainSettingsFireAlarmSettings[0] + " off", (String)mainSettingsFireAlarmSettings[1]);
} else {
configLCDUpdate(0, (String)mainSettingsFireAlarmSettings[0], (String)mainSettingsFireAlarmSettings[1]);
}
} else if (cursorPosition == 1){ } else if (cursorPosition == 1){
configPage = 8; //change screen to facp settings configPage = 8; //change screen to facp settings
configLCDUpdate(0, (String)mainPanelSettings[0], (String)mainPanelSettings[1]); configLCDUpdate(0, (String)mainPanelSettings[0], (String)mainPanelSettings[1]);
@ -1190,25 +1122,15 @@ void config(){
configLCDUpdate(4, (String)mainSettingsFireAlarmSettings[4]+"off", (String)mainSettingsFireAlarmSettings[5], false, false); configLCDUpdate(4, (String)mainSettingsFireAlarmSettings[4]+"off", (String)mainSettingsFireAlarmSettings[5], false, false);
} }
} else if (cursorPosition == 4) { } else if (cursorPosition == 4) {
configLCDUpdate(5, (String)mainSettingsFireAlarmSettings[5], (String)mainSettingsFireAlarmSettings[6]+useTwoWire, false, true); configLCDUpdate(5, (String)mainSettingsFireAlarmSettings[5], (String)mainSettingsFireAlarmSettings[0], false, false);
} else if (cursorPosition == 5){ } else if (cursorPosition == 5){
if (useTwoWire){ configLCDUpdate(0, (String)mainSettingsFireAlarmSettings[0], (String)mainSettingsFireAlarmSettings[1]);
configLCDUpdate(6, (String)mainSettingsFireAlarmSettings[6]+useTwoWire, (String)mainSettingsFireAlarmSettings[0]+"off", true, false);
} else {
configLCDUpdate(6, (String)mainSettingsFireAlarmSettings[6]+useTwoWire, (String)mainSettingsFireAlarmSettings[0], true, false);
}
} else if (cursorPosition == 6){
if (useTwoWire){
configLCDUpdate(0, (String)mainSettingsFireAlarmSettings[0] + " off", (String)mainSettingsFireAlarmSettings[1]);
} else {
configLCDUpdate(0, (String)mainSettingsFireAlarmSettings[0], (String)mainSettingsFireAlarmSettings[1]);
}
} }
} else if (silencePressed and not silenceStillPressed){ } else if (silencePressed and not silenceStillPressed){
configPage = 2; configPage = 2;
configLCDUpdate(0, (String)mainSettings[0], (String)mainSettings[1]); configLCDUpdate(0, (String)mainSettings[0], (String)mainSettings[1]);
} else if (drillPressed and not drillStillPressed){ } else if (drillPressed and not drillStillPressed){
if (cursorPosition == 0 and not useTwoWire){ if (cursorPosition == 0){
configPage = 5; configPage = 5;
if (codeWheel == 0){ if (codeWheel == 0){
configLCDUpdate(0, (String)mainSettingsFireAlarmSettingsCoding[0] + "*", (String)mainSettingsFireAlarmSettingsCoding[1]); configLCDUpdate(0, (String)mainSettingsFireAlarmSettingsCoding[0] + "*", (String)mainSettingsFireAlarmSettingsCoding[1]);
@ -1264,20 +1186,6 @@ void config(){
} else { } else {
configLCDUpdate(0, (String)mainSettingsFireAlarmSettingsStrobeSync[0], (String)mainSettingsFireAlarmSettingsStrobeSync[1]); configLCDUpdate(0, (String)mainSettingsFireAlarmSettingsStrobeSync[0], (String)mainSettingsFireAlarmSettingsStrobeSync[1]);
} }
} else if (cursorPosition == 6){
if (useTwoWire){
useTwoWire = false;
EEPROM.write(30,0);
} else {
useTwoWire = true;
EEPROM.write(30,1);
}
EEPROM.commit();
if (useTwoWire){
configLCDUpdate(cursorPosition, (String)mainSettingsFireAlarmSettings[6]+useTwoWire, (String)mainSettingsFireAlarmSettings[0] + " off", true, false);
} else {
configLCDUpdate(cursorPosition, (String)mainSettingsFireAlarmSettings[6]+useTwoWire, (String)mainSettingsFireAlarmSettings[0], true, false);
}
} }
} }
//----------------------------------------------------------------------------- SETTINGS > FIRE ALARM //----------------------------------------------------------------------------- SETTINGS > FIRE ALARM
@ -1492,11 +1400,7 @@ void config(){
} }
} else if (silencePressed and not silenceStillPressed){ } else if (silencePressed and not silenceStillPressed){
configPage = 3; //change screen to facp settings configPage = 3; //change screen to facp settings
if (useTwoWire){ configLCDUpdate(0, (String)mainSettingsFireAlarmSettings[0], (String)mainSettingsFireAlarmSettings[1]);
configLCDUpdate(0, (String)mainSettingsFireAlarmSettings[0] + " off", (String)mainSettingsFireAlarmSettings[1]);
} else {
configLCDUpdate(0, (String)mainSettingsFireAlarmSettings[0], (String)mainSettingsFireAlarmSettings[1]);
}
} else if (drillPressed and not drillStillPressed){ } else if (drillPressed and not drillStillPressed){
EEPROM.write(7,cursorPosition); //write the new codewheel settings to eeprom EEPROM.write(7,cursorPosition); //write the new codewheel settings to eeprom
EEPROM.commit(); EEPROM.commit();
@ -1849,29 +1753,13 @@ void config(){
} }
} else if (cursorPosition == 1) { } else if (cursorPosition == 1) {
if (strobeSync == 2){ if (strobeSync == 2){
configLCDUpdate(2, (String)mainSettingsFireAlarmSettingsStrobeSync[2]+"*", (String)mainSettingsFireAlarmSettingsStrobeSync[3]); configLCDUpdate(2, (String)mainSettingsFireAlarmSettingsStrobeSync[2]+"*", (String)mainSettingsFireAlarmSettingsStrobeSync[0]);
} else if (strobeSync == 3){ } else if (strobeSync == 0){
configLCDUpdate(2, (String)mainSettingsFireAlarmSettingsStrobeSync[2], (String)mainSettingsFireAlarmSettingsStrobeSync[3]+"*"); configLCDUpdate(2, (String)mainSettingsFireAlarmSettingsStrobeSync[2], (String)mainSettingsFireAlarmSettingsStrobeSync[0]+"*");
} else{ } else{
configLCDUpdate(2, (String)mainSettingsFireAlarmSettingsStrobeSync[2], (String)mainSettingsFireAlarmSettingsStrobeSync[3]); configLCDUpdate(2, (String)mainSettingsFireAlarmSettingsStrobeSync[2], (String)mainSettingsFireAlarmSettingsStrobeSync[0]);
} }
} else if (cursorPosition == 2) { } else if (cursorPosition == 2) {
if (strobeSync == 3){
configLCDUpdate(3, (String)mainSettingsFireAlarmSettingsStrobeSync[3]+"*", (String)mainSettingsFireAlarmSettingsStrobeSync[4]);
} else if (strobeSync == 4){
configLCDUpdate(3, (String)mainSettingsFireAlarmSettingsStrobeSync[3], (String)mainSettingsFireAlarmSettingsStrobeSync[4]+"*");
} else{
configLCDUpdate(3, (String)mainSettingsFireAlarmSettingsStrobeSync[3], (String)mainSettingsFireAlarmSettingsStrobeSync[4]);
}
} else if (cursorPosition == 3) {
if (strobeSync == 4){
configLCDUpdate(4, (String)mainSettingsFireAlarmSettingsStrobeSync[4]+"*", (String)mainSettingsFireAlarmSettingsStrobeSync[0]);
} else if (strobeSync == 5){
configLCDUpdate(4, (String)mainSettingsFireAlarmSettingsStrobeSync[4], (String)mainSettingsFireAlarmSettingsStrobeSync[0]+"*");
} else{
configLCDUpdate(4, (String)mainSettingsFireAlarmSettingsStrobeSync[4], (String)mainSettingsFireAlarmSettingsStrobeSync[0]);
}
} else if (cursorPosition == 4) {
if (strobeSync == 0){ if (strobeSync == 0){
configLCDUpdate(0, (String)mainSettingsFireAlarmSettingsStrobeSync[0]+"*", (String)mainSettingsFireAlarmSettingsStrobeSync[1]); configLCDUpdate(0, (String)mainSettingsFireAlarmSettingsStrobeSync[0]+"*", (String)mainSettingsFireAlarmSettingsStrobeSync[1]);
} else if (strobeSync == 1){ } else if (strobeSync == 1){
@ -1882,11 +1770,11 @@ void config(){
} }
} else if (silencePressed and not silenceStillPressed){ } else if (silencePressed and not silenceStillPressed){
configPage = 3; //change screen to facp settings configPage = 3; //change screen to facp settings
configLCDUpdate(5, (String)mainSettingsFireAlarmSettings[5], (String)mainSettingsFireAlarmSettings[6]+useTwoWire, false, true); configLCDUpdate(5, (String)mainSettingsFireAlarmSettings[5], (String)mainSettingsFireAlarmSettings[0], false, false);
} else if (drillPressed and not drillStillPressed){ } else if (drillPressed and not drillStillPressed){
EEPROM.write(29,cursorPosition); //write strobe sync settings EEPROM.write(29,cursorPosition); //write strobe sync settings
EEPROM.commit(); EEPROM.commit();
if (cursorPosition == 4){ if (cursorPosition == 2){
configLCDUpdate(cursorPosition, (String)mainSettingsFireAlarmSettingsStrobeSync[cursorPosition]+"*", (String)mainSettingsFireAlarmSettingsStrobeSync[0]); configLCDUpdate(cursorPosition, (String)mainSettingsFireAlarmSettingsStrobeSync[cursorPosition]+"*", (String)mainSettingsFireAlarmSettingsStrobeSync[0]);
} else { } else {
configLCDUpdate(cursorPosition, (String)mainSettingsFireAlarmSettingsStrobeSync[cursorPosition]+"*", (String)mainSettingsFireAlarmSettingsStrobeSync[cursorPosition+1]); configLCDUpdate(cursorPosition, (String)mainSettingsFireAlarmSettingsStrobeSync[cursorPosition]+"*", (String)mainSettingsFireAlarmSettingsStrobeSync[cursorPosition+1]);
@ -2049,7 +1937,6 @@ void failsafe(){ //--------------------------------------------- FAILSAFE MODE I
digitalWrite(silenceLed,LOW); digitalWrite(silenceLed,LOW);
digitalWrite(alarmLed,LOW); digitalWrite(alarmLed,LOW);
digitalWrite(readyLed,LOW); digitalWrite(readyLed,LOW);
delay(500);
ESP.restart(); ESP.restart();
} }
if (troubleLedTimer >= 2000){ if (troubleLedTimer >= 2000){

Binary file not shown.

Before

Width:  |  Height:  |  Size: 582 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 533 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 294 KiB