feat:增加蓝牙配网功能
This commit is contained in:
@@ -64,9 +64,9 @@ AlarmManager::~AlarmManager() {}
|
||||
// ============================================================
|
||||
|
||||
bool AlarmManager::begin() {
|
||||
ledcSetup(BUZZER_PWM_CHANNEL, BUZZER_PWM_FREQ, BUZZER_PWM_RESOLUTION);
|
||||
ledcAttachPin(BUZZER_PIN, BUZZER_PWM_CHANNEL);
|
||||
ledcWrite(BUZZER_PWM_CHANNEL, 0);
|
||||
// 有源蜂鸣器: 用 digitalWrite, 不用 PWM
|
||||
pinMode(BUZZER_PIN, OUTPUT);
|
||||
digitalWrite(BUZZER_PIN, LOW);
|
||||
|
||||
pinMode(LED_ALARM_PIN, OUTPUT);
|
||||
digitalWrite(LED_ALARM_PIN, LOW);
|
||||
@@ -148,29 +148,29 @@ static void _calcBuzzerParams(AlarmManager::AlarmType t,
|
||||
uint8_t& beeps, uint32_t& onMs,
|
||||
uint32_t& offMs, uint32_t& pauseMs) {
|
||||
switch (t) {
|
||||
// 人身安全 — 连速急哔 (最刺耳)
|
||||
// 人身安全 — 连速急哔
|
||||
case AlarmManager::ALARM_FALL:
|
||||
beeps = 0; onMs = 60; offMs = 60; pauseMs = 0; // 跌倒: 连速哔
|
||||
beeps = 0; onMs = 200; offMs = 200; pauseMs = 0; // 跌倒: 急促哔哔
|
||||
break;
|
||||
case AlarmManager::ALARM_HEART_ABNORMAL:
|
||||
case AlarmManager::ALARM_BREATH_ABNORMAL:
|
||||
beeps = 5; onMs = 80; offMs = 80; pauseMs = 400; // 心率/呼吸: 5连急哔
|
||||
beeps = 5; onMs = 200; offMs = 150; pauseMs = 500; // 心率/呼吸: 5连哔
|
||||
break;
|
||||
// 环境安全 — 次急
|
||||
// 环境安全
|
||||
case AlarmManager::ALARM_WATER_LEAK:
|
||||
beeps = 3; onMs = 120; offMs = 100; pauseMs = 500; // 水浸: 3连哔
|
||||
beeps = 3; onMs = 250; offMs = 200; pauseMs = 600; // 水浸: 3连哔
|
||||
break;
|
||||
// 环境舒适 — 温和
|
||||
// 环境舒适
|
||||
case AlarmManager::ALARM_TEMP_ABNORMAL:
|
||||
case AlarmManager::ALARM_HUMI_ABNORMAL:
|
||||
beeps = 2; onMs = 200; offMs = 400; pauseMs = 1200; // 温湿度: 2声长停
|
||||
beeps = 2; onMs = 300; offMs = 500; pauseMs = 1500; // 温湿度: 2声长停
|
||||
break;
|
||||
// 设备状态 — 仅提示
|
||||
// 设备状态
|
||||
case AlarmManager::ALARM_SENSOR_FAULT:
|
||||
beeps = 1; onMs = 300; offMs = 3000; pauseMs = 0; // 传感器: 单声提醒
|
||||
beeps = 1; onMs = 500; offMs = 3000; pauseMs = 0; // 传感器: 单声提醒
|
||||
break;
|
||||
default:
|
||||
beeps = 0; onMs = 500; offMs = 500; pauseMs = 0; // 持续
|
||||
beeps = 0; onMs = 500; offMs = 500; pauseMs = 0; // 持续
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -277,8 +277,13 @@ void AlarmManager::executeRestore(const AlarmCommand& cmd) {
|
||||
Serial.printf("[告警] ☁️ 恢复: %s\n", cmd.alarmType);
|
||||
|
||||
AlarmType localType = ALARM_SERVER;
|
||||
if (strcmp(cmd.alarmType, "fall") == 0) localType = ALARM_FALL;
|
||||
else if (strcmp(cmd.alarmType, "water_leak") == 0) localType = ALARM_WATER_LEAK;
|
||||
if (strcmp(cmd.alarmType, "fall") == 0) localType = ALARM_FALL;
|
||||
else if (strcmp(cmd.alarmType, "water_leak") == 0) localType = ALARM_WATER_LEAK;
|
||||
else if (strcmp(cmd.alarmType, "heart_abnormal") == 0) localType = ALARM_HEART_ABNORMAL;
|
||||
else if (strcmp(cmd.alarmType, "breath_abnormal") == 0) localType = ALARM_BREATH_ABNORMAL;
|
||||
else if (strcmp(cmd.alarmType, "temp_abnormal") == 0) localType = ALARM_TEMP_ABNORMAL;
|
||||
else if (strcmp(cmd.alarmType, "humi_abnormal") == 0) localType = ALARM_HUMI_ABNORMAL;
|
||||
else if (strcmp(cmd.alarmType, "sensor_fault") == 0) localType = ALARM_SENSOR_FAULT;
|
||||
|
||||
clearLocal(localType);
|
||||
|
||||
@@ -308,7 +313,7 @@ void AlarmManager::_setBuzzer(bool on) {
|
||||
if (on) {
|
||||
_buzzerOffTime = 0;
|
||||
} else {
|
||||
ledcWrite(BUZZER_PWM_CHANNEL, 0);
|
||||
digitalWrite(BUZZER_PIN, LOW);
|
||||
_buzzerOffTime = 0;
|
||||
}
|
||||
}
|
||||
@@ -328,16 +333,20 @@ void AlarmManager::_updateBuzzer() {
|
||||
// 定时关闭
|
||||
if (_buzzerOffTime > 0 && millis() >= _buzzerOffTime) {
|
||||
_buzzerOn = false;
|
||||
ledcWrite(BUZZER_PWM_CHANNEL, 0);
|
||||
digitalWrite(BUZZER_PIN, LOW);
|
||||
Serial.println(F("[告警] ⏰ 蜂鸣器定时关闭"));
|
||||
return;
|
||||
}
|
||||
|
||||
uint32_t now = millis();
|
||||
|
||||
// 云端定时: 持续响
|
||||
// 云端定时: 哔哔声 (500ms响/500ms停), 不是长鸣
|
||||
if (_buzzerOffTime > 0) {
|
||||
ledcWrite(BUZZER_PWM_CHANNEL, 128);
|
||||
if (now - _buzzerToggleTime >= 500) {
|
||||
_buzzerToggleTime = now;
|
||||
_buzzerBeepState = !_buzzerBeepState;
|
||||
digitalWrite(BUZZER_PIN, _buzzerBeepState ? HIGH : LOW);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -347,7 +356,7 @@ void AlarmManager::_updateBuzzer() {
|
||||
if (now - _buzzerToggleTime >= (_buzzerBeepState ? _beepOnMs : _beepOffMs)) {
|
||||
_buzzerToggleTime = now;
|
||||
_buzzerBeepState = !_buzzerBeepState;
|
||||
ledcWrite(BUZZER_PWM_CHANNEL, _buzzerBeepState ? 128 : 0);
|
||||
digitalWrite(BUZZER_PIN, _buzzerBeepState ? HIGH : LOW);
|
||||
}
|
||||
} else {
|
||||
// 多声一组: N声哔 + 长停顿
|
||||
@@ -358,7 +367,7 @@ void AlarmManager::_updateBuzzer() {
|
||||
_buzzerToggleTime = now;
|
||||
if (_beepCount >= _beepsPerCycle) _beepCount = 0;
|
||||
_buzzerBeepState = true;
|
||||
ledcWrite(BUZZER_PWM_CHANNEL, 128);
|
||||
digitalWrite(BUZZER_PIN, HIGH);
|
||||
_beepCount++;
|
||||
}
|
||||
} else {
|
||||
@@ -366,7 +375,7 @@ void AlarmManager::_updateBuzzer() {
|
||||
if (now - _buzzerToggleTime >= _beepOnMs) {
|
||||
_buzzerToggleTime = now;
|
||||
_buzzerBeepState = false;
|
||||
ledcWrite(BUZZER_PWM_CHANNEL, 0);
|
||||
digitalWrite(BUZZER_PIN, LOW);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user