mirror of
https://github.com/MarekZegare4/MeshCore-Solo.git
synced 2026-08-02 02:06:11 +00:00
Settings: add buzzer volume control (5 levels, like brightness)
- NodePrefs: add buzzer_volume field (0=min..4=max, default 4) - DataStore: persist buzzer_volume at end of prefs file (backward-compat) - buzzer: setVolume()/getVolume(); applyVolume() sets PWM duty cycle via analogWrite() after each rtttl::play() call to control output amplitude - Settings UI: new BzrVol bar item in Sound section (left/right to adjust) - UITask: apply saved volume on startup alongside brightness Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
861a65d4b1
commit
ffa568938f
@@ -116,6 +116,7 @@ class SettingsScreen : public UIScreen {
|
||||
// Sound section
|
||||
SECTION_SOUND,
|
||||
BUZZER,
|
||||
BUZZER_VOLUME,
|
||||
// Radio section
|
||||
SECTION_RADIO,
|
||||
TX_POWER,
|
||||
@@ -273,6 +274,14 @@ class SettingsScreen : public UIScreen {
|
||||
display.print(_task->isBuzzerQuiet() ? "OFF" : "ON");
|
||||
#else
|
||||
display.print("N/A");
|
||||
#endif
|
||||
} else if (item == BUZZER_VOLUME) {
|
||||
display.print("BzrVol");
|
||||
#ifdef PIN_BUZZER
|
||||
renderBar(display, VAL_X, y, _task->getBuzzerVolume() + 1, 5);
|
||||
#else
|
||||
display.setCursor(VAL_X, y);
|
||||
display.print("N/A");
|
||||
#endif
|
||||
} else if (item == TX_POWER) {
|
||||
display.print("TX Pwr");
|
||||
@@ -577,6 +586,14 @@ public:
|
||||
_task->toggleBuzzer(); // saves immediately internally
|
||||
return true;
|
||||
}
|
||||
if (_selected == BUZZER_VOLUME) {
|
||||
#ifdef PIN_BUZZER
|
||||
uint8_t lvl = _task->getBuzzerVolume();
|
||||
if (right && lvl < 4) { _task->setBuzzerVolumeLevel(lvl + 1); _dirty = true; return true; }
|
||||
if (left && lvl > 0) { _task->setBuzzerVolumeLevel(lvl - 1); _dirty = true; return true; }
|
||||
#endif
|
||||
return right || left;
|
||||
}
|
||||
if (_selected == TX_POWER && p) {
|
||||
if (right && p->tx_power_dbm < 22) { p->tx_power_dbm++; _task->applyTxPower(); _dirty = true; return true; }
|
||||
if (left && p->tx_power_dbm > 2) { p->tx_power_dbm--; _task->applyTxPower(); _dirty = true; return true; }
|
||||
@@ -2157,6 +2174,7 @@ void UITask::begin(DisplayDriver* display, SensorManager* sensors, NodePrefs* no
|
||||
|
||||
#ifdef PIN_BUZZER
|
||||
buzzer.quiet(_node_prefs->buzzer_quiet);
|
||||
buzzer.setVolume(_node_prefs->buzzer_volume);
|
||||
buzzer.begin();
|
||||
#endif
|
||||
|
||||
@@ -2589,6 +2607,16 @@ void UITask::setBrightnessLevel(uint8_t level) {
|
||||
_next_refresh = 0;
|
||||
}
|
||||
|
||||
void UITask::setBuzzerVolumeLevel(uint8_t level) {
|
||||
#ifdef PIN_BUZZER
|
||||
if (_node_prefs == NULL) return;
|
||||
if (level > 4) level = 4;
|
||||
_node_prefs->buzzer_volume = level;
|
||||
buzzer.setVolume(level);
|
||||
_next_refresh = 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
void UITask::toggleBuzzer() {
|
||||
// Toggle buzzer quiet mode
|
||||
#ifdef PIN_BUZZER
|
||||
|
||||
Reference in New Issue
Block a user