From 809e60314e4b84e5077176fd3a32193e0ad19609 Mon Sep 17 00:00:00 2001 From: Lexzach Date: Wed, 20 Apr 2022 23:56:56 -0400 Subject: [PATCH] epic --- facp/src/eeprom.txt | 7 ++++- facp/src/main.cpp | 66 ++++++++++++++++++++++++++++++++++++--------- facp/src/menus.txt | 31 ++++++++++++++------- 3 files changed, 81 insertions(+), 23 deletions(-) diff --git a/facp/src/eeprom.txt b/facp/src/eeprom.txt index 4debe1b..c047d2e 100644 --- a/facp/src/eeprom.txt +++ b/facp/src/eeprom.txt @@ -6,4 +6,9 @@ Address allocation: 10 | 1-255 - how long to do verification (value * 0.1 = actual verification time in seconds) 11-71 | 65-90, 97-122, 45-57, 32 - System name 72 | 0-4094 - EOL resistor lenience -73 | 0-1 - enable EOL resistor \ No newline at end of file +73 | 0-1 - enable EOL resistor +74 | 0-1 - pre-alarm enabled +75 | 1-10 - first-stage time +76 | 0-1 - smoke detector pre-alarm +77 | 1-5 - smoke detector timeout +78 | 0-1 - panel homescreen \ No newline at end of file diff --git a/facp/src/main.cpp b/facp/src/main.cpp index 56b3192..88d5b36 100644 --- a/facp/src/main.cpp +++ b/facp/src/main.cpp @@ -1,6 +1,7 @@ #include #include #include +#include //RUNTIME VARIABLES bool fullAlarm = false; //bool to control if this is a full alarm that requres a panel reset to clear @@ -25,6 +26,8 @@ bool eolResistor = true; //is the EOL resistor enabled int codeWheel = 0; //which alarm pattern to use, code-3 default int verificationTime = 2500; int resistorLenience = 0; +int panelHomescreen = 0; +String panelName = ""; LiquidCrystal_I2C lcd(0x27,16,2); void setup() { @@ -33,17 +36,20 @@ void setup() { Serial.println("Booting..."); pinMode(13, OUTPUT); //horn - pinMode(12, OUTPUT); //strobe + pinMode(18, OUTPUT); //strobe pinMode(14, OUTPUT); //smoke relay - pinMode(27, OUTPUT); //ready LED - pinMode(26, OUTPUT); //silence LED - pinMode(25, OUTPUT); //alarm LED - pinMode(33, INPUT); //key switch - pinMode(32, INPUT); //reset switch - pinMode(35, INPUT); //silence switch - pinMode(34, INPUT); //drill switch - pinMode(15, INPUT); //pull station - pinMode(4, OUTPUT); //buzzer + pinMode(27, OUTPUT); //ready LED D + pinMode(26, OUTPUT); //silence LED D + pinMode(25, OUTPUT); //alarm LED D + pinMode(33, INPUT); //key switch D + pinMode(32, INPUT); //reset switch D + pinMode(35, INPUT); //silence switch D + pinMode(34, INPUT); //drill switch D + pinMode(15, INPUT); //pull station D + pinMode(4, OUTPUT); //buzzer D + digitalWrite(13, HIGH); //horn + digitalWrite(18, HIGH); //strobe + digitalWrite(14, HIGH); //smoke relay pinMode(22, OUTPUT); //scl pinMode(21, OUTPUT); //sda @@ -82,11 +88,17 @@ void setup() { //system name "[DEFAULT NAME]" EEPROM.write(11,91);EEPROM.write(12,68);EEPROM.write(13,69);EEPROM.write(14,70);EEPROM.write(15,65);EEPROM.write(16,85);EEPROM.write(17,76);EEPROM.write(18,84);EEPROM.write(19,32);EEPROM.write(20,78);EEPROM.write(21,65);EEPROM.write(22,77);EEPROM.write(23,69);EEPROM.write(24,93); - for (int i=25; i==71; i++){ //write all 0's from 25-71 address + for (int i=25; i<=71; i++){ //write all 0's from 25-71 address EEPROM.write(i,0); } EEPROM.write(72,0); //EOL lenience 0 by default 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,1); //smoke detector timeout + EEPROM.write(78,0); //homescreen is panel name by default + EEPROM.commit(); @@ -121,8 +133,19 @@ void setup() { } verificationTime = EEPROM.read(10)*100; resistorLenience = EEPROM.read(72); + panelHomescreen = EEPROM.read(78); + for (int i=11; i<=71; i++){ //read panel name + if (EEPROM.read(i) != 0){ + panelName = panelName + (char)EEPROM.read(i); + } + Serial.println(panelName); + } + Serial.println("Config loaded"); digitalWrite(27, HIGH); //power on ready LED on startup + digitalWrite(26, LOW); + digitalWrite(25, LOW); + digitalWrite(14, LOW); //smoke relay } void tone() { @@ -191,11 +214,17 @@ void troubleCheck(){ void checkButtons(){ if (digitalRead(32) == HIGH){ //RESET BUTTON + lcd.clear(); + lcd.setCursor(0,0); + lcd.print("Resetting..."); tone(); digitalWrite(27, HIGH); //ready LED digitalWrite(26, HIGH); //silence LED digitalWrite(25, HIGH); //alarm LED - delay(1500); + digitalWrite(13, HIGH); //horn + digitalWrite(18, HIGH); //strobe + digitalWrite(14, HIGH); //smoke relay + delay(2500); noTone(); ESP.restart(); } @@ -228,6 +257,11 @@ void checkButtons(){ } void alarm(){ + if (strobe == true){ + digitalWrite(18, LOW); + }else{ + digitalWrite(18,HIGH); + } if (horn == true){ if (codeWheel == 0){ @@ -341,6 +375,12 @@ void lcdUpdate(){ 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(15)); + } currentScreen = 0; } else if (trouble==true){ if (troubleType == 0 and currentScreen != 1){ @@ -382,7 +422,7 @@ void loop() { } else { lcdUpdateTimer++; } - Serial.println(analogRead(15)); + } diff --git a/facp/src/menus.txt b/facp/src/menus.txt index 193ba32..d233c22 100644 --- a/facp/src/menus.txt +++ b/facp/src/menus.txt @@ -11,23 +11,36 @@ - - - Continuious = 3 - - - California = 4 - - - Marchtime (slower) = 5 -- - verification -- - verification time -- - audible silence -- - advanced smoke detector verification -- - smoke detector verification timeout +- - enable/disable verification +- - [verification time] +- - - 0.1-25.5 seconds +- - [pre-alarm] +- - - enable/disable pre-alarm +- - - [first-stage] +- - - - [first-stage time] +- - - - - 1-10 minutes +- - - [second-stage] +- - - [smoke detector pre-alarm] +- - - - enable/disable smoke detector pre-alarm +- - - - [smoke detector timeout] +- - - - - 1-5 minutes +- - enable/disable audible silence - [panel settings] - - [panel name] - - - enter panel name +- - [panel security] +- - - None +- - - Keyswitch (pin 33) +- - - Passcode (future) - - [homescreen] - - - panel name - - - [stats for nerds] - - - - zone input voltages -- - lcd timeout +- - - - +- - [lcd timeout] +- - - 30 sec, 1 min, 5 min, 30 min, off [advanced settings] - [resistor lenience] - - 0-200 -- [EOL resistors] -- - enabled -- - disabled +- enable/disable EOL resistors