Distinguish between BUZZER and SPEAKER (PR#2513)
A speaker needs a AC or a pulsed DC to make a sound, a buzzer only needs a DC. A buzzer has it's own resonator. It works in most cases to feed the buzzer with a pulsed DC, but the sound will not be as loud as with pure DC. There seem to be boards where the BEEPER-pin is not able to handle a PWM. Obviously intended for a buzzer. To make these board able to handle a speaker * replace the PWM based tone()-function again with a on-delay-off-delay loop. Hopefully the last time I touch the beeper code.
This commit is contained in:
committed by
Richard Wackerbarth
parent
53d9c9ff23
commit
fd0e81b0c7
@@ -9,8 +9,21 @@
|
||||
lcd_buzz(duration, freq);
|
||||
#elif defined(BEEPER) && BEEPER >= 0 // on-board buzzers have no further condition
|
||||
SET_OUTPUT(BEEPER);
|
||||
tone(BEEPER, freq, duration);
|
||||
delay(duration);
|
||||
#ifdef SPEAKER // a speaker needs a AC ore a pulsed DC
|
||||
//tone(BEEPER, freq, duration); // needs a PWMable pin
|
||||
unsigned int delay = 1000000 / freq / 2;
|
||||
int i = duration * freq / 1000;
|
||||
while (i--) {
|
||||
WRITE(BEEPER,HIGH);
|
||||
delayMicroseconds(delay);
|
||||
WRITE(BEEPER,LOW);
|
||||
delayMicroseconds(delay);
|
||||
}
|
||||
#else // buzzer has its own resonator - needs a DC
|
||||
WRITE(BEEPER, HIGH);
|
||||
delay(duration);
|
||||
WRITE(BEEPER, LOW);
|
||||
#endif
|
||||
#else
|
||||
delay(duration);
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user