Compare commits

...

9 Commits

Author SHA1 Message Date
9b6933338b Update README.md 2024-06-03 10:54:48 -04:00
b8f31e62fa
fixed error code and instructions 2024-01-03 14:07:38 -05:00
c7c02a6f10
Update README.md 2023-08-30 12:57:13 -04:00
cebd63f897
Update README.md 2023-03-28 21:59:43 -04:00
5102ba83ca
gh icon 2023-03-28 21:53:49 -04:00
5fdd3bf32a
strobe sync timing and code comments 2023-03-28 21:50:59 -04:00
1444e35137 strobe sync things 2023-03-28 19:22:07 -04:00
43c8b7cfe1
Update README.md 2023-03-28 12:32:17 -04:00
fbe0f0a865
instructions 2023-03-28 12:30:28 -04:00
5 changed files with 57 additions and 44 deletions

View File

@ -1,19 +1,20 @@
# ⚠️ TESTED FIRMWARE IS IN [RELEASES](https://github.com/Lexzach/antigneous/releases) ⚠️ # ⚠️ TESTED FIRMWARE IS IN [RELEASES](https://code.lexza.ch/Lexzach/antigneous/releases) ⚠️
[![forthebadge](https://forthebadge.com/images/badges/made-with-c-plus-plus.svg)](https://forthebadge.com) [![forthebadge](https://forthebadge.com/images/badges/open-source.svg)](https://forthebadge.com) [![forthebadge](https://forthebadge.com/images/badges/built-with-love.svg)](https://forthebadge.com) [![](https://dcbadge.vercel.app/api/server/fwqYtBrfqs)](https://discord.gg/fwqYtBrfqs)
![Icon](https://github.com/Lexzach/antigneous/blob/official-firmware/gh_icon.png?raw=true)
![Icon](https://code.lexza.ch/Lexzach/antigneous/raw/branch/nightly-firmware/misc/gh_icon.png)
# What is this? 🔥 # 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. 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" 🔓 # What do you mean by "open-source" 🔓
**You do not have to give a single cent to me in order to build this panel.** **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://github.com/Lexzach/antigneous/blob/official-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. 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 📄 # Instruction Manuals 📄
📕 [Basic Assembly and Operation Manual](https://github.com/Lexzach/antigneous/blob/official-firmware/instructions/antigneous_instructions.pdf) - [Download](https://github.com/Lexzach/antigneous/raw/official-firmware/instructions/antigneous_instructions.pdf) 📕 [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://github.com/Lexzach/antigneous/blob/official-firmware/instructions/antigneous_tech_instructions.pdf) - [Download](https://github.com/Lexzach/antigneous/raw/official-firmware/instructions/antigneous_tech_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 ⚖️ # Features and Limitations ⚖️
Although I have tried to make Antigneous as feature-rich as possible, there are some limitations to take into consideration... Although I have tried to make Antigneous as feature-rich as possible, there are some limitations to take into consideration...

View File

@ -284,23 +284,20 @@ void setup() {
lcd.print((String)"HOLD BUTTONS - "+i); lcd.print((String)"HOLD BUTTONS - "+i);
delay(1000); delay(1000);
} }
if (digitalRead(resetButtonPin) and digitalRead(silenceButtonPin) and digitalRead(drillButtonPin)){
lcd.clear(); lcd.clear();
lcd.setCursor(0,0); lcd.setCursor(0,0);
if (digitalRead(resetButtonPin) and digitalRead(silenceButtonPin) and digitalRead(drillButtonPin)){
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
@ -325,11 +322,7 @@ void setup() {
Serial.println("EEPROM verification failed."); Serial.println("EEPROM verification failed.");
lcd.clear(); lcd.clear();
lcd.setCursor(0,0); lcd.setCursor(0,0);
if (EEPROM.read(50) != EEPROMVersion or EEPROM.read(51) != EEPROMBuild){ //display error 2 if the firmware is different
lcd.print("ERROR 2");
} else {
lcd.print("ERROR 1"); lcd.print("ERROR 1");
}
lcd.setCursor(0,1); lcd.setCursor(0,1);
lcd.print("check manual"); lcd.print("check manual");
while(not digitalRead(resetButtonPin) and not digitalRead(drillButtonPin)){ //wait until button is pressed while(not digitalRead(resetButtonPin) and not digitalRead(drillButtonPin)){ //wait until button is pressed
@ -729,17 +722,35 @@ void checkButtons(){
//----------------------------------------------------------------------------- NAC ACTIVATION //----------------------------------------------------------------------------- NAC ACTIVATION
void alarm(){ void alarm(){
if (strobe){ if (strobe){
if (strobeSync != 1 and strobeSync != 2){ //add more strobesyncs in the future if (strobeSync == 0){ //add more strobesyncs in the future
strobeOn(true); strobeOn(true);
} else if (strobeSync == 1 or strobeSync == 2){ } else {
strobeSyncTimer++;
if (strobeSync == 1 or strobeSync == 4){
if (strobeSyncTimer >= 1000){ if (strobeSyncTimer >= 1000){
strobeSyncTimer=0; strobeSyncTimer=0;
} else if (strobeSyncTimer >= 975){ } else if (strobeSyncTimer >= 975){
strobeOn(false); strobeOn(false);
} else if (strobeSyncTimer <= 10){ } else if (strobeSyncTimer <= 25){
strobeOn(true); strobeOn(true);
} }
strobeSyncTimer++; } 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);
@ -776,7 +787,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);
@ -815,7 +826,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
@ -856,7 +867,7 @@ void alarm(){
} }
} }
} else if (useTwoWire){ //-------------------------------- DO MORE TESTING WITH THIS!!!! } else if (useTwoWire){ //-------------------------------- DO MORE TESTING WITH THIS!!!!
if (horn and (not preAlarm or secondStage)){ if (horn and (not preAlarm or secondStage)){ //2 wire alarm
if (twoWireTimer >= 1000){ if (twoWireTimer >= 1000){
twoWireTimer = 0; twoWireTimer = 0;
} else if (twoWireTimer >= 975){ } else if (twoWireTimer >= 975){
@ -865,7 +876,7 @@ void alarm(){
hornOn(true); hornOn(true);
} }
twoWireTimer++; twoWireTimer++;
} else if (not horn and silenced and audibleSilence){ } else if (not horn and silenced and audibleSilence){ //2 wire silence
if (twoWireTimer >= 1000){ if (twoWireTimer >= 1000){
twoWireTimer = 0; twoWireTimer = 0;
} else if (twoWireTimer >= 965){ } else if (twoWireTimer >= 965){
@ -874,7 +885,7 @@ void alarm(){
hornOn(true); hornOn(true);
} }
twoWireTimer++; twoWireTimer++;
} else if (horn and preAlarm and not secondStage){ } else if (horn and preAlarm and not secondStage){ //2 wire pre-alarm
if (codeWheelTimer == 0){ if (codeWheelTimer == 0){
hornOn(true); hornOn(true);
} else if (codeWheelTimer == 75){ } else if (codeWheelTimer == 75){
@ -1033,18 +1044,18 @@ void configLCDUpdate(int cursor, String top, String bottom, bool replaceTop = fa
} }
void config(){ void config(){
char *main[] = {"Testing","Settings"}; //menu 0 const char *main[] = {"Testing","Settings"}; //menu 0
char *mainTesting[] = {"Walk Test","Silent Wlk Test","Strobe Test"}; //menu 1 const char *mainTesting[] = {"Walk Test","Silent Wlk Test","Strobe Test"}; //menu 1
char *mainSettings[] = {"Fire Alarm","Panel"}; //menu 2 const char *mainSettings[] = {"Fire Alarm","Panel"}; //menu 2
char *mainSettingsFireAlarmSettings[] = {"Coding","Verification","Pre-Alarm","Audible Sil.:","No-Key Sil.:","Strobe Sync","2 Wire:"}; //menu 3 const char *mainSettingsFireAlarmSettings[] = {"Coding","Verification","Pre-Alarm","Audible Sil.:","No-Key Sil.:","Strobe Sync","2 Wire:"}; //menu 3
char *mainSettingsVerificationSettings[] = {"Verification:","V.Time:","Det.Verif.:","Det.Timeout:","Det.Watch:"}; //menu 4 const char *mainSettingsVerificationSettings[] = {"Verification:","V.Time:","Det.Verif.:","Det.Timeout:","Det.Watch:"}; //menu 4
char *mainSettingsFireAlarmSettingsCoding[] = {"Temporal Three","Marchtime","4-4","Continuous","California","Slow Marchtime"}; //menu 5 const char *mainSettingsFireAlarmSettingsCoding[] = {"Temporal Three","Marchtime","4-4","Continuous","California","Slow Marchtime"}; //menu 5
char *mainSettingsFireAlarmSettingsPreAlarmSettings[] = {"Pre-Alarm:","Stage1 Time:"}; //menu 6 const char *mainSettingsFireAlarmSettingsPreAlarmSettings[] = {"Pre-Alarm:","Stage1 Time:"}; //menu 6
char *mainPanelSettings[] = {"Panel Name","Panel Security","LCD Dim:","Factory Reset","About"}; //menu 8 const char *mainPanelSettings[] = {"Panel Name","Panel Security","LCD Dim:","Factory Reset","About"}; //menu 8
char *mainPanelSettingsPanelSecurity[] = {"None","Keyswitch","Passcode"}; //menu 9 const char *mainPanelSettingsPanelSecurity[] = {"None","Keyswitch","Passcode"}; //menu 9
char *mainPanelSettingsPanelName[] = {"Enter Name:"}; //menu 10 const char *mainPanelSettingsPanelName[] = {"Enter Name:"}; //menu 10
char *mainSettingsFireAlarmSettingsStrobeSync[] = {"None","System Sensor","Wheelock", "Gentex","Simplex"}; //menu 11 const char *mainSettingsFireAlarmSettingsStrobeSync[] = {"None","System Sensor","Wheelock", "Gentex","Simplex"}; //menu 11
char *mainPanelSettingsAbout[] = {"Antigneous FACP","Nightly ","Made by Lexzach","Hrs On: "}; //menu 12 const char *mainPanelSettingsAbout[] = {"Antigneous FACP","Nightly ","Made by Lexzach","Hrs On: "}; //menu 12
if (digitalRead(resetButtonPin)){ //RESET BUTTON if (digitalRead(resetButtonPin)){ //RESET BUTTON
resetPressed = true; resetPressed = true;
@ -2038,6 +2049,7 @@ 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){

View File

Before

Width:  |  Height:  |  Size: 294 KiB

After

Width:  |  Height:  |  Size: 294 KiB