diff --git a/samples/tone_melody/CMakeLists.txt b/samples/tone_melody/CMakeLists.txt new file mode 100644 index 00000000..bc4ef18f --- /dev/null +++ b/samples/tone_melody/CMakeLists.txt @@ -0,0 +1,13 @@ +# SPDX-License-Identifier: Apache-2.0 + +cmake_minimum_required(VERSION 3.20.0) + +cmake_path(SET ZephyrBase $ENV{ZEPHYR_BASE}) +set(DTC_OVERLAY_FILE ${ZephyrBase}/../modules/lib/Arduino-Zephyr-API/variants/${BOARD}/${BOARD}.overlay) + +find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE}) +project(tone_melody) + +target_sources(app PRIVATE src/main.cpp) + +zephyr_compile_options(-Wno-unused-variable -Wno-comment) diff --git a/samples/tone_melody/README.rst b/samples/tone_melody/README.rst new file mode 100644 index 00000000..4cdc803f --- /dev/null +++ b/samples/tone_melody/README.rst @@ -0,0 +1,36 @@ +.. _blinky-tone-sample: + +Tone Melody +############ + +Overview +******** + +This Arduino sample Plays a melody. + +Requirements +************ + +Your board must: + +#. Have piezo buzzer connected via a GPIO pin. +#. GPIO pin can be selected using CONFIG_TONE_OUT_DIGITAL_PIN_NUMBER. + +Building and Running +******************** + +Build and flash Blinky as follows, + +```sh +$> west build -p -b arduino_nano_33_ble samples/basic/tone_melody/ -DZEPHYR_EXTRA_MODULES=/home/$USER/zephyrproject/modules/lib/Arduino-Core-Zephyr + +$> west flash --bossac=/home/$USER/.arduino15/packages/arduino/tools/bossac/1.9.1-arduino2/bossac +``` + +After flashing, the buzzer starts to play a melody. + +Adding board support +******************** + +To add support for your board, set CONFIG_TONE_OUT_DIGITAL_PIN_NUMBER +according to your connections. diff --git a/samples/tone_melody/prj.conf b/samples/tone_melody/prj.conf new file mode 100644 index 00000000..100a4977 --- /dev/null +++ b/samples/tone_melody/prj.conf @@ -0,0 +1,3 @@ +CONFIG_GPIO=y +CONFIG_CPLUSPLUS=y +CONFIG_ARDUINO_API=y \ No newline at end of file diff --git a/samples/tone_melody/src/main.cpp b/samples/tone_melody/src/main.cpp new file mode 100644 index 00000000..30d84ebd --- /dev/null +++ b/samples/tone_melody/src/main.cpp @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2010-2011 Tom Igoe + * Copyright (c) 2024 Ayush Singh + * + * SPDX-License-Identifier: CC-BY-1.0 + */ + +/* + * Melody + * + * Plays a melody + * + * circuit: + * - 8 ohm speaker on digital pin 8 + * + * created 21 Jan 2010 + * modified 30 Aug 2011 + * by Tom Igoe + * + * This example code is in the public domain. + * + * https://docs.arduino.cc/built-in-examples/digital/toneMelody/ + * + */ + +#include "pitches.h" +#include + +#define toneOutPin 8 + +// notes in the melody: +int melody[] = { + NOTE_C4, NOTE_G3, NOTE_G3, NOTE_A3, NOTE_G3, 0, NOTE_B3, NOTE_C4 +}; + +// note durations: 4 = quarter note, 8 = eighth note, etc.: +int noteDurations[] = { + 4, 8, 8, 4, 4, 4, 4, 4 +}; + +void setup() { + // iterate over the notes of the melody: + for (int thisNote = 0; thisNote < 8; thisNote++) { + + // to calculate the note duration, take one second divided by the note type. + //e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc. + int noteDuration = 1000 / noteDurations[thisNote]; + tone(toneOutPin, melody[thisNote], noteDuration); + + // to distinguish the notes, set a minimum time between them. + // the note's duration + 30% seems to work well: + int pauseBetweenNotes = noteDuration * 1.30; + delay(pauseBetweenNotes); + // stop the tone playing: + noTone(toneOutPin); + } +} + +void loop() { + // no need to repeat the melody. +} diff --git a/samples/tone_melody/src/pitches.h b/samples/tone_melody/src/pitches.h new file mode 100644 index 00000000..dda92455 --- /dev/null +++ b/samples/tone_melody/src/pitches.h @@ -0,0 +1,100 @@ +/* + * Copyright (c) 2010-2011 Tom Igoe + * Copyright (c) 2024 Ayush Singh + * + * SPDX-License-Identifier: CC-BY-1.0 + */ + +/* + * Public Constants + */ + +#define NOTE_B0 31 +#define NOTE_C1 33 +#define NOTE_CS1 35 +#define NOTE_D1 37 +#define NOTE_DS1 39 +#define NOTE_E1 41 +#define NOTE_F1 44 +#define NOTE_FS1 46 +#define NOTE_G1 49 +#define NOTE_GS1 52 +#define NOTE_A1 55 +#define NOTE_AS1 58 +#define NOTE_B1 62 +#define NOTE_C2 65 +#define NOTE_CS2 69 +#define NOTE_D2 73 +#define NOTE_DS2 78 +#define NOTE_E2 82 +#define NOTE_F2 87 +#define NOTE_FS2 93 +#define NOTE_G2 98 +#define NOTE_GS2 104 +#define NOTE_A2 110 +#define NOTE_AS2 117 +#define NOTE_B2 123 +#define NOTE_C3 131 +#define NOTE_CS3 139 +#define NOTE_D3 147 +#define NOTE_DS3 156 +#define NOTE_E3 165 +#define NOTE_F3 175 +#define NOTE_FS3 185 +#define NOTE_G3 196 +#define NOTE_GS3 208 +#define NOTE_A3 220 +#define NOTE_AS3 233 +#define NOTE_B3 247 +#define NOTE_C4 262 +#define NOTE_CS4 277 +#define NOTE_D4 294 +#define NOTE_DS4 311 +#define NOTE_E4 330 +#define NOTE_F4 349 +#define NOTE_FS4 370 +#define NOTE_G4 392 +#define NOTE_GS4 415 +#define NOTE_A4 440 +#define NOTE_AS4 466 +#define NOTE_B4 494 +#define NOTE_C5 523 +#define NOTE_CS5 554 +#define NOTE_D5 587 +#define NOTE_DS5 622 +#define NOTE_E5 659 +#define NOTE_F5 698 +#define NOTE_FS5 740 +#define NOTE_G5 784 +#define NOTE_GS5 831 +#define NOTE_A5 880 +#define NOTE_AS5 932 +#define NOTE_B5 988 +#define NOTE_C6 1047 +#define NOTE_CS6 1109 +#define NOTE_D6 1175 +#define NOTE_DS6 1245 +#define NOTE_E6 1319 +#define NOTE_F6 1397 +#define NOTE_FS6 1480 +#define NOTE_G6 1568 +#define NOTE_GS6 1661 +#define NOTE_A6 1760 +#define NOTE_AS6 1865 +#define NOTE_B6 1976 +#define NOTE_C7 2093 +#define NOTE_CS7 2217 +#define NOTE_D7 2349 +#define NOTE_DS7 2489 +#define NOTE_E7 2637 +#define NOTE_F7 2794 +#define NOTE_FS7 2960 +#define NOTE_G7 3136 +#define NOTE_GS7 3322 +#define NOTE_A7 3520 +#define NOTE_AS7 3729 +#define NOTE_B7 3951 +#define NOTE_C8 4186 +#define NOTE_CS8 4435 +#define NOTE_D8 4699 +#define NOTE_DS8 4978