Using the tone() Function for Frequency Generation on Arduino
📖 Scenario: You want to create simple sounds using a buzzer connected to an Arduino board. The buzzer will play different tones based on frequencies you set.
🎯 Goal: Build a program that uses the tone() function to generate sounds of specific frequencies on a buzzer connected to pin 8.
📋 What You'll Learn
Create a variable for the buzzer pin number
Create a variable for the frequency in Hertz
Use the tone() function to play the frequency on the buzzer pin
Stop the tone after a short delay
Print a message to the Serial Monitor showing the frequency played
💡 Why This Matters
🌍 Real World
Generating tones is useful for alarms, notifications, and simple music on embedded devices.
💼 Career
Understanding how to control hardware like buzzers with Arduino is important for electronics and embedded systems jobs.
Progress0 / 4 steps
1
Set up the buzzer pin
Create an integer variable called buzzerPin and set it to 8.
Arduino
Hint
Use int buzzerPin = 8; to store the pin number.
2
Set the frequency value
Create an integer variable called frequency and set it to 440 (which is the musical note A).
Arduino
Hint
Use int frequency = 440; to set the frequency in Hertz.
3
Play the tone using tone()
In the setup() function, use tone(buzzerPin, frequency); to start playing the tone. Then add delay(1000); to play it for 1 second, and finally use noTone(buzzerPin); to stop the sound.
Arduino
Hint
Use tone() to start the sound, delay() to wait, and noTone() to stop.
4
Print the frequency to Serial Monitor
In the setup() function, before playing the tone, add Serial.begin(9600); to start serial communication. Then add Serial.print("Playing frequency: "); and Serial.println(frequency); to show the frequency value.
Arduino
Hint
Use Serial.begin(9600); to start, then Serial.print() and Serial.println() to show the frequency.
Practice
(1/5)
1. What does the tone() function do in Arduino?
easy
A. Generates a sound of a specific frequency on a pin
B. Reads the voltage from a sensor
C. Turns on an LED
D. Sends data over serial communication
Solution
Step 1: Understand the purpose of tone()
The tone() function is used to create sound by generating a square wave of a specific frequency on a pin.
Step 2: Compare options with function behavior
Only Generates a sound of a specific frequency on a pin describes generating sound with frequency, which matches tone() usage.
Final Answer:
Generates a sound of a specific frequency on a pin -> Option A
Quick Check:
tone() = sound frequency generation [OK]
Hint: Remember: tone() makes sound, not reads or sends data [OK]
Common Mistakes:
Confusing tone() with digitalWrite()
Thinking tone() reads sensor data
Assuming tone() controls LEDs
2. Which of the following is the correct syntax to play a 1000 Hz tone on pin 8 for 500 milliseconds?
easy
A. tone(8, 1000, 500);
B. tone(1000, 8, 500);
C. tone(8, 500, 1000);
D. tone(8, 1000); delay(500);
Solution
Step 1: Recall tone() function parameters
The correct order is tone(pin, frequency, duration). So pin 8, frequency 1000 Hz, duration 500 ms means tone(8, 1000, 500);.
Step 2: Check each option
tone(8, 1000, 500); matches the correct order. tone(1000, 8, 500); swaps pin and frequency. tone(8, 500, 1000); swaps frequency and duration. tone(8, 1000); delay(500); starts continuous tone but does not stop after 500 ms, unlike duration parameter.
A. Pin 9 outputs a 440 Hz tone for 1.5 seconds, then stops
B. Pin 9 outputs a 440 Hz tone continuously without stopping
C. Pin 9 outputs a 440 Hz tone for 1 second, then stops
D. No sound is produced because noTone() is called immediately
Solution
Step 1: Analyze tone() with duration
The tone(9, 440, 1000); plays a 440 Hz tone on pin 9 for 1000 milliseconds (1 second).
Step 2: Understand delay and noTone()
The program waits 1500 ms, which is longer than the tone duration, so the tone stops automatically after 1 second. Then noTone(9); stops any tone if still playing (safe call).
Final Answer:
Pin 9 outputs a 440 Hz tone for 1 second, then stops -> Option C
Quick Check:
tone(9, 440, 1000) plays 1s tone [OK]
Hint: Duration in tone() controls length; noTone() stops early [OK]
Common Mistakes:
Thinking tone plays for delay length
Assuming noTone() stops tone immediately before playing
Confusing tone duration with delay time
4. Identify the error in this code snippet that tries to play a 500 Hz tone on pin 7:
B. Calling tone() inside loop() with duration causes overlapping tones
C. noTone() should be called before tone() in setup()
D. delay() cannot be used with tone()
Solution
Step 1: Review tone() usage in loop()
Calling tone(7, 500, 1000); repeatedly in loop() will restart the tone every cycle, causing overlapping or interrupted sounds.
Step 2: Check other options
noTone() can be called after tone(), tone() parameters order is correct, and delay() can be used with tone(). So only Calling tone() inside loop() with duration causes overlapping tones describes the real problem.
Final Answer:
Calling tone() inside loop() with duration causes overlapping tones -> Option B
Quick Check:
Repeated tone() with duration in loop causes overlap [OK]
Hint: Avoid tone() with duration inside loop() to prevent overlap [OK]
Common Mistakes:
Calling noTone() before tone() unnecessarily
Mixing parameter order in tone()
Thinking delay() blocks tone() sound
5. You want to play a melody using tone() on pin 6 with these notes and durations: 262 Hz for 500 ms, 294 Hz for 500 ms, and 330 Hz for 1000 ms. Which code correctly plays this sequence without overlapping tones?