diff --git a/src/helpers/ui/buzzer.cpp b/src/helpers/ui/buzzer.cpp index 4ac7e74c..ee5fc4ce 100644 --- a/src/helpers/ui/buzzer.cpp +++ b/src/helpers/ui/buzzer.cpp @@ -49,8 +49,10 @@ void genericBuzzer::playToggle(int count, bool enabled) { const int max_notes = (int)(sizeof(notes) / sizeof(notes[0])); if (count < 1) count = 1; if (count > max_notes) count = max_notes; - char melody[64]; - // d=8 (eighths) at b=180 -> ~166 ms per note, audible on small piezos. + // NonBlockingRtttl stores only a pointer to the melody, so the backing + // buffer must outlive the call. A static buffer is fine here because the + // library can't play two melodies at once anyway. + static char melody[64]; int n = snprintf(melody, sizeof(melody), "Tg:d=8,o=6,b=180:"); for (int i = 0; i < count && n < (int)sizeof(melody); i++) { int idx = enabled ? i : (count - 1 - i);