Compare commits
9 Commits
stable-v1.
...
nightly-fi
Author | SHA1 | Date | |
---|---|---|---|
9b6933338b | |||
b8f31e62fa | |||
c7c02a6f10 | |||
cebd63f897 | |||
5102ba83ca | |||
5fdd3bf32a | |||
1444e35137 | |||
43c8b7cfe1 | |||
fbe0f0a865 |
13
README.md
13
README.md
@ -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) ⚠️
|
||||
|
||||
[](https://forthebadge.com) [](https://forthebadge.com) [](https://forthebadge.com)
|
||||

|
||||
[](https://discord.gg/fwqYtBrfqs)
|
||||
|
||||

|
||||
# 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://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 📄
|
||||
📕 [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 ⚖️
|
||||
Although I have tried to make Antigneous as feature-rich as possible, there are some limitations to take into consideration...
|
||||
|
Binary file not shown.
Binary file not shown.
@ -284,23 +284,20 @@ void setup() {
|
||||
lcd.print((String)"HOLD BUTTONS - "+i);
|
||||
delay(1000);
|
||||
}
|
||||
lcd.clear();
|
||||
lcd.setCursor(0,0);
|
||||
if (digitalRead(resetButtonPin) and digitalRead(silenceButtonPin) and digitalRead(drillButtonPin)){
|
||||
lcd.clear();
|
||||
lcd.setCursor(0,0);
|
||||
lcd.print("RESETTING TO");
|
||||
lcd.setCursor(0,1);
|
||||
lcd.print("FACTORY SETTINGS");
|
||||
resetEEPROM();
|
||||
delay(4000);
|
||||
ESP.restart();
|
||||
} else {
|
||||
lcd.clear();
|
||||
lcd.setCursor(0,0);
|
||||
lcd.print("FACTORY RESET");
|
||||
lcd.setCursor(0,1);
|
||||
lcd.print("CANCELLED");
|
||||
delay(3000);
|
||||
}
|
||||
delay(3000);
|
||||
ESP.restart();
|
||||
}
|
||||
//----------------------------------------------------------------------------- EEPROM RESET BUTTONS
|
||||
|
||||
@ -325,11 +322,7 @@ void setup() {
|
||||
Serial.println("EEPROM verification failed.");
|
||||
lcd.clear();
|
||||
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.print("check manual");
|
||||
while(not digitalRead(resetButtonPin) and not digitalRead(drillButtonPin)){ //wait until button is pressed
|
||||
@ -729,17 +722,35 @@ void checkButtons(){
|
||||
//----------------------------------------------------------------------------- NAC ACTIVATION
|
||||
void alarm(){
|
||||
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);
|
||||
} else if (strobeSync == 1 or strobeSync == 2){
|
||||
if (strobeSyncTimer >= 1000){
|
||||
strobeSyncTimer=0;
|
||||
} else if (strobeSyncTimer >= 975){
|
||||
strobeOn(false);
|
||||
} else if (strobeSyncTimer <= 10){
|
||||
strobeOn(true);
|
||||
}
|
||||
} else {
|
||||
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{
|
||||
strobeOn(false);
|
||||
@ -776,7 +787,7 @@ void alarm(){
|
||||
codeWheelTimer = -1;
|
||||
}
|
||||
|
||||
} else if (codeWheel == 2) { //---------- 4-4
|
||||
} else if (codeWheel == 2) { //--------- 4-4
|
||||
|
||||
if (codeWheelTimer == 0) {
|
||||
hornOn(true);
|
||||
@ -815,7 +826,7 @@ void alarm(){
|
||||
codeWheelTimer = -1;
|
||||
}
|
||||
|
||||
} else if (codeWheel == 3) { //---------- continuous
|
||||
} else if (codeWheel == 3) { //--------- continuous
|
||||
hornOn(true);
|
||||
} else if (codeWheel == 5) {
|
||||
if (codeWheelTimer == 0){ //---------- marchtime slower
|
||||
@ -856,7 +867,7 @@ void alarm(){
|
||||
}
|
||||
}
|
||||
} 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){
|
||||
twoWireTimer = 0;
|
||||
} else if (twoWireTimer >= 975){
|
||||
@ -865,7 +876,7 @@ void alarm(){
|
||||
hornOn(true);
|
||||
}
|
||||
twoWireTimer++;
|
||||
} else if (not horn and silenced and audibleSilence){
|
||||
} else if (not horn and silenced and audibleSilence){ //2 wire silence
|
||||
if (twoWireTimer >= 1000){
|
||||
twoWireTimer = 0;
|
||||
} else if (twoWireTimer >= 965){
|
||||
@ -874,7 +885,7 @@ void alarm(){
|
||||
hornOn(true);
|
||||
}
|
||||
twoWireTimer++;
|
||||
} else if (horn and preAlarm and not secondStage){
|
||||
} else if (horn and preAlarm and not secondStage){ //2 wire pre-alarm
|
||||
if (codeWheelTimer == 0){
|
||||
hornOn(true);
|
||||
} else if (codeWheelTimer == 75){
|
||||
@ -1033,18 +1044,18 @@ void configLCDUpdate(int cursor, String top, String bottom, bool replaceTop = fa
|
||||
}
|
||||
|
||||
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.:","No-Key Sil.:","Strobe Sync","2 Wire:"}; //menu 3
|
||||
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
|
||||
char *mainSettingsFireAlarmSettingsPreAlarmSettings[] = {"Pre-Alarm:","Stage1 Time:"}; //menu 6
|
||||
char *mainPanelSettings[] = {"Panel Name","Panel Security","LCD Dim:","Factory Reset","About"}; //menu 8
|
||||
char *mainPanelSettingsPanelSecurity[] = {"None","Keyswitch","Passcode"}; //menu 9
|
||||
char *mainPanelSettingsPanelName[] = {"Enter Name:"}; //menu 10
|
||||
char *mainSettingsFireAlarmSettingsStrobeSync[] = {"None","System Sensor","Wheelock", "Gentex","Simplex"}; //menu 11
|
||||
char *mainPanelSettingsAbout[] = {"Antigneous FACP","Nightly ","Made by Lexzach","Hrs On: "}; //menu 12
|
||||
const char *main[] = {"Testing","Settings"}; //menu 0
|
||||
const char *mainTesting[] = {"Walk Test","Silent Wlk Test","Strobe Test"}; //menu 1
|
||||
const 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
|
||||
const 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
|
||||
const char *mainSettingsFireAlarmSettingsPreAlarmSettings[] = {"Pre-Alarm:","Stage1 Time:"}; //menu 6
|
||||
const char *mainPanelSettings[] = {"Panel Name","Panel Security","LCD Dim:","Factory Reset","About"}; //menu 8
|
||||
const char *mainPanelSettingsPanelSecurity[] = {"None","Keyswitch","Passcode"}; //menu 9
|
||||
const char *mainPanelSettingsPanelName[] = {"Enter Name:"}; //menu 10
|
||||
const char *mainSettingsFireAlarmSettingsStrobeSync[] = {"None","System Sensor","Wheelock", "Gentex","Simplex"}; //menu 11
|
||||
const char *mainPanelSettingsAbout[] = {"Antigneous FACP","Nightly ","Made by Lexzach","Hrs On: "}; //menu 12
|
||||
|
||||
if (digitalRead(resetButtonPin)){ //RESET BUTTON
|
||||
resetPressed = true;
|
||||
@ -2038,6 +2049,7 @@ void failsafe(){ //--------------------------------------------- FAILSAFE MODE I
|
||||
digitalWrite(silenceLed,LOW);
|
||||
digitalWrite(alarmLed,LOW);
|
||||
digitalWrite(readyLed,LOW);
|
||||
delay(500);
|
||||
ESP.restart();
|
||||
}
|
||||
if (troubleLedTimer >= 2000){
|
||||
|
Before Width: | Height: | Size: 294 KiB After Width: | Height: | Size: 294 KiB |
Loading…
x
Reference in New Issue
Block a user