Skip to content

Commit aa3d749

Browse files
authored
Merge pull request arduino#31 from bcmi-labs/tone_fix_duration
Tone: fix infinite duration Former-commit-id: edbcbd3
2 parents dd23abe + d44d061 commit aa3d749

File tree

1 file changed

+10
-4
lines changed

1 file changed

+10
-4
lines changed

cores/arduino/Tone.cpp

+10-4
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,17 @@
44
void tone_timer_callback(timer_callback_args_t *args);
55

66
class Tone {
7-
uint32_t frequency;
8-
uint32_t duration;
9-
uint32_t limit;
10-
pin_size_t pin;
7+
8+
uint32_t limit = UINT32_MAX;
119
uint8_t status = LOW;
1210
static FspTimer tone_timer;
1311
static int channel;
1412

1513
public:
14+
uint32_t frequency;
15+
uint32_t duration;
16+
pin_size_t pin;
17+
1618
Tone(pin_size_t pin, unsigned int frequency, unsigned long duration) : frequency(frequency), duration(duration), pin(pin) {
1719
pinMode(pin, OUTPUT);
1820
if (frequency) {
@@ -76,6 +78,10 @@ void tone_timer_callback(timer_callback_args_t __attribute__((unused)) *args) {
7678

7779
void tone(pin_size_t pin, unsigned int frequency, unsigned long duration) {
7880
if (active_tone) {
81+
if (active_tone->pin == pin && active_tone->frequency == frequency && active_tone->duration == 0) {
82+
// infinite duration notes do not need to be restarted
83+
return;
84+
}
7985
delete active_tone;
8086
}
8187
Tone* t = new Tone(pin, frequency, duration);

0 commit comments

Comments
 (0)