mirror of https://github.com/meshcore-dev/MeshCore
4 changed files with 112 additions and 1 deletions
@ -0,0 +1,54 @@ |
|||||
|
#ifdef PIN_BUZZER |
||||
|
#include "buzzer.h" |
||||
|
|
||||
|
void genericBuzzer::begin() { |
||||
|
Serial.print("DBG: Setting up buzzer on pin "); |
||||
|
Serial.println(PIN_BUZZER); |
||||
|
#ifdef PIN_BUZZER_EN |
||||
|
pinMode(PIN_BUZZER_EN, OUTPUT); |
||||
|
digitalWrite(PIN_BUZZER_EN, HIGH); |
||||
|
#endif |
||||
|
|
||||
|
quiet(false); |
||||
|
pinMode(PIN_BUZZER, OUTPUT); |
||||
|
startup(); |
||||
|
} |
||||
|
|
||||
|
void genericBuzzer::play(const char *melody) { |
||||
|
if (isPlaying()) // interrupt existing
|
||||
|
{ |
||||
|
rtttl::stop(); |
||||
|
} |
||||
|
|
||||
|
if (_is_quiet) return; |
||||
|
|
||||
|
rtttl::begin(PIN_BUZZER,melody); |
||||
|
// Serial.print("DBG: Playing melody - isQuiet: ");
|
||||
|
// Serial.println(isQuiet());
|
||||
|
} |
||||
|
|
||||
|
bool genericBuzzer::isPlaying() { |
||||
|
return rtttl::isPlaying(); |
||||
|
} |
||||
|
|
||||
|
void genericBuzzer::loop() { |
||||
|
if (!rtttl::done()) rtttl::play(); |
||||
|
} |
||||
|
|
||||
|
void genericBuzzer::startup() { |
||||
|
play(startup_song); |
||||
|
} |
||||
|
|
||||
|
void genericBuzzer::shutdown() { |
||||
|
play(shutdown_song); |
||||
|
} |
||||
|
|
||||
|
void genericBuzzer::quiet(bool buzzer_state) { |
||||
|
_is_quiet = buzzer_state; |
||||
|
} |
||||
|
|
||||
|
bool genericBuzzer::isQuiet() { |
||||
|
return _is_quiet; |
||||
|
} |
||||
|
|
||||
|
#endif // ifdef PIN_BUZZER
|
||||
@ -0,0 +1,36 @@ |
|||||
|
#pragma once |
||||
|
|
||||
|
#include <Arduino.h> |
||||
|
#include <NonBlockingRtttl.h> |
||||
|
|
||||
|
/* class abstracts underlying RTTTL library
|
||||
|
|
||||
|
Just a simple imlementation to start. At the moment use same |
||||
|
melody for message and discovery |
||||
|
Suggest enum type for different sounds |
||||
|
- on message |
||||
|
- on discovery |
||||
|
|
||||
|
TODO |
||||
|
- make message ring tone configurable |
||||
|
|
||||
|
*/ |
||||
|
class genericBuzzer |
||||
|
{ |
||||
|
public: |
||||
|
void begin(); // set up buzzer port
|
||||
|
void play(const char *melody); // Generic play function
|
||||
|
void loop(); // loop driven-nonblocking
|
||||
|
void startup(); // play startup sound
|
||||
|
void shutdown(); // play shutdown sound
|
||||
|
bool isPlaying(); // returns true if a sound is still playing else false
|
||||
|
void quiet(bool buzzer_state); // enables or disables the buzzer
|
||||
|
bool isQuiet(); // get buzzer state on/off
|
||||
|
|
||||
|
private: |
||||
|
// gemini's picks:
|
||||
|
const char *startup_song = "Startup:d=4,o=5,b=160:16c6,16e6,8g6"; |
||||
|
const char *shutdown_song = "Shutdown:d=4,o=5,b=100:8g5,16e5,16c5"; |
||||
|
|
||||
|
bool _is_quiet = true; |
||||
|
}; |
||||
Loading…
Reference in new issue