Skip to content

Commit 877ceb8

Browse files
committed
samples: Add tone melody
- Use `tone` and `noTone` functions to play a melody on piezo buzzer. - Taken from https://github.com/arduino/arduino-examples/blob/main/examples/02.Digital/toneMelody/toneMelody.ino - Tested on bcf with buzzer Signed-off-by: Ayush Singh <[email protected]>
1 parent 2718262 commit 877ceb8

File tree

5 files changed

+214
-0
lines changed

5 files changed

+214
-0
lines changed

samples/tone_melody/CMakeLists.txt

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
# SPDX-License-Identifier: Apache-2.0
2+
3+
cmake_minimum_required(VERSION 3.20.0)
4+
5+
cmake_path(SET ZephyrBase $ENV{ZEPHYR_BASE})
6+
set(DTC_OVERLAY_FILE ${ZephyrBase}/../modules/lib/Arduino-Zephyr-API/variants/${BOARD}/${BOARD}.overlay)
7+
8+
find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
9+
project(tone_melody)
10+
11+
target_sources(app PRIVATE src/main.cpp)
12+
13+
zephyr_compile_options(-Wno-unused-variable -Wno-comment)

samples/tone_melody/README.rst

+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
.. _blinky-tone-sample:
2+
3+
Tone Melody
4+
############
5+
6+
Overview
7+
********
8+
9+
This Arduino sample Plays a melody.
10+
11+
Requirements
12+
************
13+
14+
Your board must:
15+
16+
#. Have piezo buzzer connected via a GPIO pin.
17+
#. GPIO pin can be selected using CONFIG_TONE_OUT_DIGITAL_PIN_NUMBER.
18+
19+
Building and Running
20+
********************
21+
22+
Build and flash Blinky as follows,
23+
24+
```sh
25+
$> west build -p -b arduino_nano_33_ble samples/basic/tone_melody/ -DZEPHYR_EXTRA_MODULES=/home/$USER/zephyrproject/modules/lib/Arduino-Core-Zephyr
26+
27+
$> west flash --bossac=/home/$USER/.arduino15/packages/arduino/tools/bossac/1.9.1-arduino2/bossac
28+
```
29+
30+
After flashing, the buzzer starts to play a melody.
31+
32+
Adding board support
33+
********************
34+
35+
To add support for your board, set CONFIG_TONE_OUT_DIGITAL_PIN_NUMBER
36+
according to your connections.

samples/tone_melody/prj.conf

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
CONFIG_GPIO=y
2+
CONFIG_CPLUSPLUS=y
3+
CONFIG_ARDUINO_API=y

samples/tone_melody/src/main.cpp

+62
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
/*
2+
* Copyright (c) 2010-2011 Tom Igoe
3+
* Copyright (c) 2024 Ayush Singh <[email protected]>
4+
*
5+
* SPDX-License-Identifier: CC0-1.0
6+
*/
7+
8+
/*
9+
* Melody
10+
*
11+
* Plays a melody
12+
*
13+
* circuit:
14+
* - 8 ohm speaker on digital pin 8
15+
*
16+
* created 21 Jan 2010
17+
* modified 30 Aug 2011
18+
* by Tom Igoe
19+
* modified 14 June 2024
20+
* by Ayush Singh
21+
*
22+
* This example code is in the public domain.
23+
*
24+
* https://docs.arduino.cc/built-in-examples/digital/toneMelody/
25+
*/
26+
27+
#include "pitches.h"
28+
#include <Arduino.h>
29+
30+
#define toneOutPin 8
31+
32+
// notes in the melody:
33+
int melody[] = {
34+
NOTE_C4, NOTE_G3, NOTE_G3, NOTE_A3, NOTE_G3, 0, NOTE_B3, NOTE_C4
35+
};
36+
37+
// note durations: 4 = quarter note, 8 = eighth note, etc.:
38+
int noteDurations[] = {
39+
4, 8, 8, 4, 4, 4, 4, 4
40+
};
41+
42+
void setup() {
43+
// iterate over the notes of the melody:
44+
for (int thisNote = 0; thisNote < 8; thisNote++) {
45+
46+
// to calculate the note duration, take one second divided by the note type.
47+
//e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc.
48+
int noteDuration = 1000 / noteDurations[thisNote];
49+
tone(toneOutPin, melody[thisNote], noteDuration);
50+
51+
// to distinguish the notes, set a minimum time between them.
52+
// the note's duration + 30% seems to work well:
53+
int pauseBetweenNotes = noteDuration * 1.30;
54+
delay(pauseBetweenNotes);
55+
// stop the tone playing:
56+
noTone(toneOutPin);
57+
}
58+
}
59+
60+
void loop() {
61+
// no need to repeat the melody.
62+
}

samples/tone_melody/src/pitches.h

+100
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
/*
2+
* Copyright (c) 2010-2011 Tom Igoe
3+
* Copyright (c) 2024 Ayush Singh <[email protected]>
4+
*
5+
* SPDX-License-Identifier: CC0-1.0
6+
*/
7+
8+
/*
9+
* Public Constants
10+
*/
11+
12+
#define NOTE_B0 31
13+
#define NOTE_C1 33
14+
#define NOTE_CS1 35
15+
#define NOTE_D1 37
16+
#define NOTE_DS1 39
17+
#define NOTE_E1 41
18+
#define NOTE_F1 44
19+
#define NOTE_FS1 46
20+
#define NOTE_G1 49
21+
#define NOTE_GS1 52
22+
#define NOTE_A1 55
23+
#define NOTE_AS1 58
24+
#define NOTE_B1 62
25+
#define NOTE_C2 65
26+
#define NOTE_CS2 69
27+
#define NOTE_D2 73
28+
#define NOTE_DS2 78
29+
#define NOTE_E2 82
30+
#define NOTE_F2 87
31+
#define NOTE_FS2 93
32+
#define NOTE_G2 98
33+
#define NOTE_GS2 104
34+
#define NOTE_A2 110
35+
#define NOTE_AS2 117
36+
#define NOTE_B2 123
37+
#define NOTE_C3 131
38+
#define NOTE_CS3 139
39+
#define NOTE_D3 147
40+
#define NOTE_DS3 156
41+
#define NOTE_E3 165
42+
#define NOTE_F3 175
43+
#define NOTE_FS3 185
44+
#define NOTE_G3 196
45+
#define NOTE_GS3 208
46+
#define NOTE_A3 220
47+
#define NOTE_AS3 233
48+
#define NOTE_B3 247
49+
#define NOTE_C4 262
50+
#define NOTE_CS4 277
51+
#define NOTE_D4 294
52+
#define NOTE_DS4 311
53+
#define NOTE_E4 330
54+
#define NOTE_F4 349
55+
#define NOTE_FS4 370
56+
#define NOTE_G4 392
57+
#define NOTE_GS4 415
58+
#define NOTE_A4 440
59+
#define NOTE_AS4 466
60+
#define NOTE_B4 494
61+
#define NOTE_C5 523
62+
#define NOTE_CS5 554
63+
#define NOTE_D5 587
64+
#define NOTE_DS5 622
65+
#define NOTE_E5 659
66+
#define NOTE_F5 698
67+
#define NOTE_FS5 740
68+
#define NOTE_G5 784
69+
#define NOTE_GS5 831
70+
#define NOTE_A5 880
71+
#define NOTE_AS5 932
72+
#define NOTE_B5 988
73+
#define NOTE_C6 1047
74+
#define NOTE_CS6 1109
75+
#define NOTE_D6 1175
76+
#define NOTE_DS6 1245
77+
#define NOTE_E6 1319
78+
#define NOTE_F6 1397
79+
#define NOTE_FS6 1480
80+
#define NOTE_G6 1568
81+
#define NOTE_GS6 1661
82+
#define NOTE_A6 1760
83+
#define NOTE_AS6 1865
84+
#define NOTE_B6 1976
85+
#define NOTE_C7 2093
86+
#define NOTE_CS7 2217
87+
#define NOTE_D7 2349
88+
#define NOTE_DS7 2489
89+
#define NOTE_E7 2637
90+
#define NOTE_F7 2794
91+
#define NOTE_FS7 2960
92+
#define NOTE_G7 3136
93+
#define NOTE_GS7 3322
94+
#define NOTE_A7 3520
95+
#define NOTE_AS7 3729
96+
#define NOTE_B7 3951
97+
#define NOTE_C8 4186
98+
#define NOTE_CS8 4435
99+
#define NOTE_D8 4699
100+
#define NOTE_DS8 4978

0 commit comments

Comments
 (0)