tone()
Description
Generates a square wave of the specified frequency (and 50% duty cycle) on a pin. A duration can be specified, otherwise the wave continues until a call to noTone(). The pin can be connected to a piezo buzzer or other speaker to play tones.
Only one tone can be generated at a time. If a tone is already playing on a different pin, the call to
tone()
will have no effect. If the tone is playing on the same pin, the call will set its frequency.Use of the
tone()
function will interfere with PWM output on pins 3 and 11 (on boards other than the Mega).It is not possible to generate tones lower than 31Hz. For technical details, see Brett Hagman’s notes.
Syntax
Use the following function variants to generate a tone on a specific pin undefinitely or during a given time:
tone(pin, frequency)
tone(pin, frequency, duration)
Parameters
The function admits the following parameters:
: the Arduino pin on which to generate the tone.pin
: the frequency of the tone in hertz. Allowed data types:frequency
.unsigned int
: the duration of the tone in milliseconds (optional). Allowed data types:duration
.unsigned long
Returns
The function returns nothing.
Example Code
Generate a square wave on pin D0 for a second repetitively.
1#define BUZZER_PIN D0 // Example pin2
3void setup() {4 pinMode(BUZZER_PIN, OUTPUT);5}6
7void loop() {8 tone(BUZZER_PIN, 1000, 1000); // 1 kHz tone9 delay(1000);10}
Notes and Warnings
- If you want to play different pitches on multiple pins, you need to call
on one pin before callingnoTone()
on the next pin.tone()
- This function is non-blocking, which means that even if you provide the
parameter the sketch execution will continue immediately even if the tone hasn’t finished playing.duration
See also
Suggest changes
The content on docs.arduino.cc is facilitated through a public GitHub repository. If you see anything wrong, you can edit this page here.
License
The Arduino documentation is licensed under the Creative Commons Attribution-Share Alike 4.0 license.