diff --git a/facp/.vscode/extensions.json b/facp/.vscode/extensions.json index e80666b..080e70d 100644 --- a/facp/.vscode/extensions.json +++ b/facp/.vscode/extensions.json @@ -3,5 +3,8 @@ // for the documentation about the extensions.json format "recommendations": [ "platformio.platformio-ide" + ], + "unwantedRecommendations": [ + "ms-vscode.cpptools-extension-pack" ] } diff --git a/facp/src/ascii.jpg b/facp/src/ascii.jpg new file mode 100644 index 0000000..42eedbe Binary files /dev/null and b/facp/src/ascii.jpg differ diff --git a/facp/src/eeprom.txt b/facp/src/eeprom.txt index 1f2cbb4..4debe1b 100644 --- a/facp/src/eeprom.txt +++ b/facp/src/eeprom.txt @@ -1,7 +1,9 @@ Address allocation: 1-6 | "Lexzach" - verify that eeprom is the FACP config eeprom -7 | 0-3 - coding selection +7 | 0-5 - coding selection 8 | 0-1 - is a key required 9 | 0-1 - is there verification 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 \ No newline at end of file +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 diff --git a/facp/src/main.cpp b/facp/src/main.cpp index b2d7d23..56b3192 100644 --- a/facp/src/main.cpp +++ b/facp/src/main.cpp @@ -21,9 +21,10 @@ int currentScreen = 0; //update display if previous screen is not the same //CONFIG VARIABLES bool keyRequired = true; //determine if key switch is required to operate buttons bool isVerification = true; //is verification turned on +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; LiquidCrystal_I2C lcd(0x27,16,2); void setup() { @@ -79,6 +80,15 @@ void setup() { EEPROM.write(9,1); //verification is turned on by default EEPROM.write(10,25); //default verification time of 2.5 seconds + //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 + EEPROM.write(i,0); + } + EEPROM.write(72,0); //EOL lenience 0 by default + EEPROM.write(73,1); //EOL resistor is enabled by default + + EEPROM.commit(); } else { Serial.println("EEPROM verification finished"); @@ -104,8 +114,13 @@ void setup() { } else { isVerification = false; } + if (EEPROM.read(73) == 1){ + eolResistor = true; + } else { + eolResistor = false; + } verificationTime = EEPROM.read(10)*100; - + resistorLenience = EEPROM.read(72); Serial.println("Config loaded"); digitalWrite(27, HIGH); //power on ready LED on startup } @@ -131,7 +146,7 @@ void checkKey(){ void checkDevices(){ - if (analogRead(15) <= 500 and horn != true){ + if (analogRead(15) <= resistorLenience and horn != true){ verification++; } else { verification = 0; @@ -141,7 +156,7 @@ void checkDevices(){ strobe = true; fullAlarm = true; tone(); - } else if (analogRead(15) == 4095) { + } else if (analogRead(15) == 4095 and eolResistor == true) { trouble = true; troubleType=1; } @@ -181,12 +196,14 @@ void checkButtons(){ digitalWrite(26, HIGH); //silence LED digitalWrite(25, HIGH); //alarm LED delay(1500); + noTone(); ESP.restart(); } if (digitalRead(35) == HIGH){ //SILENCE BUTTON if (horn == true){ //if horns are not silenced, silence the horns digitalWrite(26, HIGH); + digitalWrite(25, LOW); horn = false; } else if (horn == false and strobe == true){ //if the horns are silenced and the button is pressed again, silence the buzzer noTone(); @@ -200,6 +217,8 @@ void checkButtons(){ if (drill == 2000){ horn = true; strobe = true; + fullAlarm = true; + tone(); } else { drill++; } @@ -280,6 +299,24 @@ void alarm(){ } else if (codeWheel == 3) { //continuous digitalWrite(13, LOW); + } else if (codeWheel == 5) { + if (codeWheelTimer == 0){ //marchtime slower + digitalWrite(13, LOW); + } else if (codeWheelTimer == 500){ + digitalWrite(13, HIGH); + } else if (codeWheelTimer == 1000){ + codeWheelTimer = -1; + } + + } else if (codeWheel == 4) { + if (codeWheelTimer == 0){ //california code + digitalWrite(13, LOW); + } else if (codeWheelTimer == 10000){ + digitalWrite(13, HIGH); + } else if (codeWheelTimer == 5000){ + codeWheelTimer = -1; + } + } codeWheelTimer++; @@ -317,15 +354,15 @@ void lcdUpdate(){ lcd.clear(); lcd.setCursor(1,0); lcd.print("*** Trouble ***"); - lcd.setCursor(2,1); - lcd.print("Ground Fault"); + lcd.setCursor(2,0); + lcd.print("Device removed or EOL resistor not installed"); currentScreen = 2; } else if (fullAlarm == true and currentScreen != 3){ lcd.clear(); lcd.setCursor(0,0); lcd.print("*** FIRE ALARM ***"); lcd.setCursor(2,1); - lcd.print("zone info here"); + lcd.print("Zone 1"); currentScreen = 3; } } @@ -345,7 +382,7 @@ void loop() { } else { lcdUpdateTimer++; } - Serial.println(digitalRead(35)); + Serial.println(analogRead(15)); } diff --git a/facp/src/menus.txt b/facp/src/menus.txt new file mode 100644 index 0000000..193ba32 --- /dev/null +++ b/facp/src/menus.txt @@ -0,0 +1,33 @@ +[testing] +- walk test +- strobe test +- full system test +[settings] +- [fire alarm settings] +- - [coding] +- - - Temporal 3 = 0 +- - - Marchtime = 1 +- - - 4-4 = 2 +- - - Continuious = 3 +- - - California = 4 +- - - Marchtime (slower) = 5 +- - verification +- - verification time +- - audible silence +- - advanced smoke detector verification +- - smoke detector verification timeout +- [panel settings] +- - [panel name] +- - - enter panel name +- - [homescreen] +- - - panel name +- - - [stats for nerds] +- - - - zone input voltages +- - lcd timeout +[advanced settings] +- [resistor lenience] +- - 0-200 +- [EOL resistors] +- - enabled +- - disabled +