Files
firmware/src/buzz/buzz.cpp

70 lines
1.8 KiB
C++
Raw Normal View History

2021-03-14 19:00:20 -07:00
#include "buzz.h"
#include "configuration.h"
2022-10-26 00:07:02 +02:00
#include "NodeDB.h"
2021-03-14 19:00:20 -07:00
2022-11-24 12:24:57 +01:00
#if !defined(ARCH_ESP32) && !defined(ARCH_RP2040) && !defined(ARCH_PORTDUINO)
2021-03-14 19:00:20 -07:00
#include "Tone.h"
2022-05-10 11:07:49 +02:00
#endif
2021-03-14 19:00:20 -07:00
2022-11-24 12:24:57 +01:00
#if !defined(ARCH_PORTDUINO)
2021-03-14 19:00:20 -07:00
extern "C" void delay(uint32_t dwMs);
2022-11-24 12:24:57 +01:00
#endif
2021-03-14 19:00:20 -07:00
struct ToneDuration {
int frequency_khz;
int duration_ms;
};
2021-03-14 20:46:58 -07:00
// Some common frequencies.
#define NOTE_C3 131
#define NOTE_CS3 139
#define NOTE_D3 147
#define NOTE_DS3 156
#define NOTE_E3 165
#define NOTE_F3 175
#define NOTE_FS3 185
#define NOTE_G3 196
#define NOTE_GS3 208
#define NOTE_A3 220
#define NOTE_AS3 233
#define NOTE_B3 247
#define NOTE_CS4 277
2021-03-14 20:46:58 -07:00
2021-03-14 19:00:20 -07:00
const int DURATION_1_8 = 125; // 1/8 note
const int DURATION_1_4 = 250; // 1/4 note
void playTones(const ToneDuration *tone_durations, int size) {
#ifdef PIN_BUZZER
if (!config.device.buzzer_gpio)
config.device.buzzer_gpio = PIN_BUZZER;
#endif
if (config.device.buzzer_gpio) {
2022-10-26 00:07:02 +02:00
for (int i = 0; i < size; i++) {
const auto &tone_duration = tone_durations[i];
tone(config.device.buzzer_gpio, tone_duration.frequency_khz, tone_duration.duration_ms);
2022-10-26 00:07:02 +02:00
// to distinguish the notes, set a minimum time between them.
delay(1.3 * tone_duration.duration_ms);
}
2021-03-14 19:00:20 -07:00
}
}
2022-05-10 11:07:49 +02:00
void playBeep() {
ToneDuration melody[] = {{NOTE_B3, DURATION_1_4}};
playTones(melody, sizeof(melody) / sizeof(ToneDuration));
}
2021-03-14 19:00:20 -07:00
void playStartMelody() {
ToneDuration melody[] = {{NOTE_FS3, DURATION_1_8},
{NOTE_AS3, DURATION_1_8},
{NOTE_CS4, DURATION_1_4}};
2021-03-14 19:00:20 -07:00
playTones(melody, sizeof(melody) / sizeof(ToneDuration));
}
void playShutdownMelody() {
ToneDuration melody[] = {{NOTE_CS4, DURATION_1_8},
{NOTE_AS3, DURATION_1_8},
{NOTE_FS3, DURATION_1_4}};
2021-03-14 19:00:20 -07:00
playTones(melody, sizeof(melody) / sizeof(ToneDuration));
}