Compare commits

...

5 Commits

Author SHA1 Message Date
5f57eea889 feat: alarm support 2025-04-13 22:53:18 -03:00
282675a487 door sensor constructor 2025-04-13 22:52:33 -03:00
eebb4ad6cb esp32 diagram 2025-04-13 22:52:18 -03:00
a0710a79f7 alarm sound bytes 2025-04-13 22:52:11 -03:00
9cf8305ad8 default alarm status values 2025-04-13 22:51:47 -03:00
7 changed files with 2956 additions and 18 deletions

View File

@ -4,7 +4,7 @@ class LedController {
private: private:
int bluePin = 32; int bluePin = 32;
int redPin = 33; int redPin = 33;
int greenPin = 25; int greenPin = 27;
AlarmStatus* status; AlarmStatus* status;
void turnOn(int led){ void turnOn(int led){

View File

@ -1,2 +1,78 @@
#include "alarm.h" #include <XT_DAC_Audio.h>
#include "alarm.h"
#include "Arduino.h"
#include "sound.h"
#include "soc/rtc_io_reg.h"
#include "alarmSound.h"
// XT_Wav_Class SirenSound(sampleSound);
XT_Wav_Class SirenSound(alarmSound);
XT_DAC_Audio_Class DacAudio(25, 0);
uint32_t DemoCounter=0;
class Siren{
private:
int sirenPin = 25;
AlarmStatus* status;
float sinVal;
int toneVal;
void playSound(){
int max = 180;
Serial.println("Sound on " + String(sirenPin));
if(status->silent)
max = 2;
for(int x = 0; x < max ; x++){
//convert angle of sinusoidal to radian measure
sinVal = (sin(x*(3.1412/180)));
//generate sound of different frequencies by sinusoidal value
toneVal = 2000+(int(sinVal*1000));
//Set a frequency for Pin-out 8
// ledcAttach(sirenPin, toneVal, 3);
tone(sirenPin, toneVal, 3);
// buzzer->tone(toneVal, 3);
// TimerFreeTone(TONE_PIN, toneVal, 2, 5);
delay(2);
}
noTone(sirenPin);
// buzzer->noTone();
// ledcWrite(sirenPin,0); // No sound
// ledcDetach(sirenPin);
}
public:
Siren(AlarmStatus* statusRef){
status=statusRef;
}
Siren(AlarmStatus* statusRef, int pin){
status=statusRef;
sirenPin=pin;
}
void Init(){
// pinMode(sirenPin, OUTPUT);
// DacAudio = XT_DAC_Audio_Class(sirenPin, 0);
}
void SoundSiren(){
if(status->muted)
return;
// playSound();
// delay(500);
DacAudio.FillBuffer(); // Fill the sound buffer with data
if(SirenSound.Playing==false) // if not playing,
DacAudio.Play(&SirenSound); // play it, this will cause it to repeat and repeat...
Serial.println(DemoCounter++);
}
};

View File

@ -4,11 +4,13 @@
const int DOOR_OPEN = HIGH; const int DOOR_OPEN = HIGH;
const int DOOR_CLOSED = LOW; const int DOOR_CLOSED = LOW;
struct AlarmStatus{ struct AlarmStatus{
int doorStatus; int doorStatus =DOOR_OPEN;
bool doorChanged; bool doorChanged =false;
bool isArmed; bool isArmed = false;
bool isFired; bool isFired =false;
bool ledOn; bool ledOn =true;
bool muted =false;
bool silent =false; //low sound
}; };
#endif #endif

2848
esp32/alarmSound.h Normal file

File diff suppressed because it is too large Load Diff

BIN
esp32/diagram.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

View File

@ -12,11 +12,14 @@ public:
static const int DEFAULT_DOOR_SENSOR_PIN=23; static const int DEFAULT_DOOR_SENSOR_PIN=23;
DoorSensor(int doorSensorPin, AlarmStatus* statusObj){ DoorSensor(AlarmStatus* statusObj, int doorSensorPin){
Serial.println("const.");
DOOR_SENSOR_PIN = doorSensorPin; DOOR_SENSOR_PIN = doorSensorPin;
status = statusObj; status = statusObj;
} }
DoorSensor(AlarmStatus* statusObj){
DOOR_SENSOR_PIN = DEFAULT_DOOR_SENSOR_PIN;
status = statusObj;
}
void Init(){ void Init(){
pinMode(DOOR_SENSOR_PIN, INPUT_PULLUP); pinMode(DOOR_SENSOR_PIN, INPUT_PULLUP);
status->doorStatus = digitalRead(DOOR_SENSOR_PIN); status->doorStatus = digitalRead(DOOR_SENSOR_PIN);

View File

@ -1,17 +1,22 @@
#include <Arduino.h> #include <Arduino.h>
#include "alarm.h" #include "alarm.h"
#include "doorSensor.h" #include "DoorSensor.h"
#include "LedController.h" #include "LedController.h"
#include "Siren.h"
// #include <WiFi.h> // #include <WiFi.h>
AlarmStatus s = {DOOR_OPEN, false, false, false, true}; AlarmStatus s;
DoorSensor doorSensor(DoorSensor::DEFAULT_DOOR_SENSOR_PIN, &s); DoorSensor doorSensor(&s);
LedController led(&s); LedController led(&s);
Siren siren(&s);
void printStatus(){ void printStatus(){
String msg = String("Door: ") + String(doorSensor.IsDoorOpen() ? "Open" : "Closed"); String msg = String("Door: ") + String(doorSensor.IsDoorOpen() ? "Open" : "Closed");
msg = msg + " | Alarm: " + String(s.isArmed ? "Armed": "Disarmed");
msg = msg + " | Is Fired: " + String(s.isFired ? "Fired": "Not Fired"); msg = msg + " | Is Fired: " + String(s.isFired ? "Fired": "Not Fired");
msg = msg + " | Led: " + String(s.ledOn ? "On": "Off"); msg = msg + " | Led: " + String(s.ledOn ? "On": "Off");
msg = msg + " | Silent: " + String(s.silent ? "Silent": "Loud");
msg = msg + " | Muted: " + String(s.muted ? "Muted": "Not Muted");
Serial.println(msg); Serial.println(msg);
} }
void setup() { void setup() {
@ -20,16 +25,15 @@ void setup() {
printStatus(); printStatus();
doorSensor.Init(); doorSensor.Init();
led.Init(); led.Init();
printStatus(); siren.Init();
s.isArmed = doorSensor.IsDoorClosed(); s.isArmed = doorSensor.IsDoorClosed();
Serial.println("Alarm is " + String(s.isArmed ? "Armed" : "Disarmed")); // Serial.println("Alarm is " + String(s.isArmed ? "Armed" : "Disarmed"));
// WiFi.mode(WIFI_STA); // WiFi.mode(WIFI_STA);
// WiFi.disconnect(); // WiFi.disconnect();
// delay(100); // delay(100);
Serial.println("Stp Done"); printStatus();
} }
@ -42,10 +46,15 @@ void loop() {
s.doorChanged=false; s.doorChanged=false;
if(s.isFired){
s.silent = !s.silent;
siren.SoundSiren();
}
led.Update(); led.Update();
delay(1000); // delay(1000);
} }
@ -60,7 +69,7 @@ void DoorEvent(){
Serial.println("Alarm is armed, firing"); Serial.println("Alarm is armed, firing");
s.isFired=true; s.isFired=true;
}else{ }else{
delay(500); // delay(500);
Serial.println("The door-closing"); Serial.println("The door-closing");
s.isArmed=true; s.isArmed=true;
} }