Привет! Мы уже знаем как извлечь из Ардуино звук. И даже собрали простое пианино с помощью Ардуино. А сегодня посмотрим как написать готовые мелодии на Ардуино в программе. А также, какие мелодии уже есть на просторах интернета.
Содержание
- Для выполнения этого урока нам понадобятся
- Программа и схема
- Другие мелодии
- Главная тема супер братьев Марио
- Имперский марш из Звездных войн
- В лесу родилась елочка
- Заключение
В предыдущем уроке мы научились генерировать звук. Посмотрите этот урок, если уже забыли его или пропустили. Сегодня мы будем использовать его опять.
Звук в ардуино. Урок 7. Ардуино
Для выполнения этого урока нам понадобятся
- Ардуино Uno
- Макетная плата
- Перемычки
- 1 резистор номиналом 150 Ом
- Потенциометр 10 кОм
- Динамик 8 Ом
- Кабель USB
Программа и схема
Соберем ту же схему из предыдущего урока. Она довольно проста.
Мы уже знаем, что такое звук, как работает динамик и, в конце концов, знаем как извлечь звук из Ардуино.
Теперь осталось написать программу, которая будет генерировать мелодию на Ардуино и воспроизводить ее на динамике. Например, простая мелодия из книги Джереми Блюма.
#include "pitches.h"
const int SPEAKER=9;
int notes[] = {
NOTE_A4, NOTE_E3, NOTE_A4, 0,
NOTE_A4, NOTE_E3, NOTE_A4, 0,
NOTE_E4, NOTE_D4, NOTE_C4, NOTE_B4, NOTE_A4, NOTE_B4, NOTE_C4, NOTE_D4,
NOTE_E4, NOTE_E3, NOTE_A4, 0
};
int times[] = {
250, 250, 250, 250,
250, 250, 250, 250,
125, 125, 125, 125, 125, 125, 125, 125,
250, 250, 250, 250
};
void setup(){
for (int i = 0; i < 20; i++)
{
tone(SPEAKER, notes[i], times[i]);
delay(times[i]);
}
}
void loop(){
}
Динамик подключается к 9 пину через сопротивление. И, к тому же, не забудьте подключить файл с нотами. Он должен находиться рядом с файлом программы в одной папке.
В этом примере ноты и длительность их звучания собраны в массивы. А в главный функции setup() управление мелодией происходит в цикле for(). Такой способ намного удобнее, чем запись мелодии построчно.
Другие мелодии
Посмотрим какие еще мелодии можно сыграть на Ардуино.
Главная тема супер братьев Марио
const int SPEAKER=9;
int notes[] = {
1318, 1318, 1318, 1046, 1318, 1568, 784,
1046, 784, 659, 880, 987, 932, 880, 784,
1318, 1568, 1750, 1396, 1568, 1318, 1046, 1174, 987,
1046, 784, 659, 880, 987, 932, 880,
784, 1318, 1568, 1750, 1396, 1568, 1318, 1046, 1174, 987,
1568, 1480, 1396, 1244, 1318, 830, 880, 1046, 880, 1046, 1174,
0, 1568, 1480, 1396, 1244, 1318, 2093, 2093, 2093,
1568, 1480, 1396, 1244, 1318, 830, 880, 1046, 880, 1046, 1174, 1244, 1174, 1046,
};
int times[] = {
150, 300, 150, 150, 300, 600, 600,
450, 150, 300, 300, 150, 150, 300, 210,
210, 150, 300, 150, 150, 300, 150, 150, 450,
450, 150, 300, 300, 150, 150, 300,
210, 210, 150, 300, 150, 150, 300, 150, 150, 450,
150, 150, 150, 300, 150, 150, 150, 150, 150, 150, 150,
0, 150, 150, 150, 300, 150, 300, 150, 600,
150, 150, 150, 300, 150, 150, 150, 150, 150, 150, 150, 300, 450, 600,
};
int delays[] = {
150, 300, 300, 150, 300, 600, 600,
450, 450, 450, 300, 300, 150, 300, 210,
210, 150, 300, 150, 300, 300, 150, 150, 450,
450, 450, 450, 300, 300, 150, 300,
210, 210, 150, 300, 150, 300, 300, 150, 150, 600,
150, 150, 150, 300, 300, 150, 150, 300, 150, 150, 150,
300, 150, 150, 150, 300, 300, 300, 150, 600,
150, 150, 150, 300, 300, 150, 150, 300, 150, 150, 450, 450, 450, 1200,
};
void setup(){
for (int i = 0; i < 75; i++){
tone(SPEAKER, notes[i], times[i]);
delay(delays[i]);
}
noTone(SPEAKER);
}
void loop(){}
Имперский марш из Звездных войн
const int SPEAKER=9;
int notes[] = {
392, 392, 392, 311, 466, 392, 311, 466, 392,
587, 587, 587, 622, 466, 369, 311, 466, 392,
784, 392, 392, 784, 739, 698, 659, 622, 659,
415, 554, 523, 493, 466, 440, 466,
311, 369, 311, 466, 392
};
int times[] = {
350, 350, 350, 250, 100, 350, 250, 100, 700,
350, 350, 350, 250, 100, 350, 250, 100, 700,
350, 250, 100, 350, 250, 100, 100, 100, 450,
150, 350, 250, 100, 100, 100, 450,
150, 350, 250, 100, 750
};
void setup(){
for (int i = 0; i < 39; i++){
tone(SPEAKER, notes[i], times[i]*2);
delay(times[i]*2);
noTone(SPEAKER);
}
}
void loop(){}
В лесу родилась елочка
#include "pitches.h"
int SPEAKER=9;
int notes[] = {
NOTE_C4, NOTE_A4, NOTE_A4, NOTE_G4,
NOTE_A4, NOTE_F4, NOTE_C4, NOTE_C4,
NOTE_C4, NOTE_A4, NOTE_A4, NOTE_AS4,
NOTE_G4, NOTE_C5, 0, NOTE_C5, NOTE_D4,
NOTE_D4, NOTE_AS4,NOTE_AS4,NOTE_A4,
NOTE_G4, NOTE_F4, NOTE_C4, NOTE_A4,
NOTE_A4, NOTE_G4, NOTE_A4, NOTE_F4
};
int times[] = {
400,400,400,400,
400,400,400,400,
400,400,400,400,
400,600,20,400,400,
400,400,400,400,
400,400,400,400,
400,400,400,600
};
void setup(){
for (int i = 0; i < 29; i++){
tone(SPEAKER, notes[i],times[i]);
delay(times[i]);
noTone(SPEAKER);
}
}
void loop(){}
Гимн СССР
int tonePin = 9;// пин пищалки
void setup() {
tone(tonePin, 174, 249.99975);
delay(277.7775);
tone(tonePin, 233, 499.9995);
delay(555.555);
tone(tonePin, 174, 374.999625);
delay(416.66625);
tone(tonePin, 195, 124.999875);
delay(138.88875);
tone(tonePin, 220, 499.9995);
delay(555.555);
tone(tonePin, 146, 249.99975);
delay(277.7775);
tone(tonePin, 146, 249.99975);
delay(277.7775);
tone(tonePin, 195, 499.9995);
delay(555.555);
tone(tonePin, 174, 374.999625);
delay(416.66625);
tone(tonePin, 155, 124.999875);
delay(138.88875);
tone(tonePin, 174, 499.9995);
delay(555.555);
tone(tonePin, 116, 249.99975);
delay(277.7775);
tone(tonePin, 116, 249.99975);
delay(277.7775);
tone(tonePin, 130, 499.9995);
delay(555.555);
tone(tonePin, 130, 374.999625);
delay(416.66625);
tone(tonePin, 146, 124.999875);
delay(138.88875);
tone(tonePin, 155, 499.9995);
delay(555.555);
tone(tonePin, 155, 374.999625);
delay(416.66625);
tone(tonePin, 174, 124.999875);
delay(138.88875);
tone(tonePin, 195, 499.9995);
delay(555.555);
tone(tonePin, 220, 374.999625);
delay(416.66625);
tone(tonePin, 233, 124.999875);
delay(138.88875);
tone(tonePin, 261, 749.99925);
delay(833.3325);
tone(tonePin, 174, 249.99975);
delay(277.7775);
tone(tonePin, 293, 499.9995);
delay(555.555);
tone(tonePin, 261, 374.999625);
delay(416.66625);
tone(tonePin, 233, 124.999875);
delay(138.88875);
tone(tonePin, 261, 499.9995);
delay(555.555);
tone(tonePin, 174, 249.99975);
delay(277.7775);
tone(tonePin, 174, 249.99975);
delay(277.7775);
tone(tonePin, 233, 499.9995);
delay(555.555);
tone(tonePin, 220, 374.999625);
delay(416.66625);
tone(tonePin, 195, 124.999875);
delay(138.88875);
tone(tonePin, 220, 499.9995);
delay(555.555);
tone(tonePin, 146, 374.999625);
delay(416.66625);
tone(tonePin, 146, 124.999875);
delay(138.88875);
tone(tonePin, 195, 499.9995);
delay(555.555);
tone(tonePin, 174, 374.999625);
delay(416.66625);
tone(tonePin, 155, 124.999875);
delay(138.88875);
tone(tonePin, 174, 499.9995);
delay(555.555);
tone(tonePin, 116, 374.999625);
delay(416.66625);
tone(tonePin, 116, 124.999875);
delay(138.88875);
tone(tonePin, 233, 499.9995);
delay(555.555);
tone(tonePin, 220, 374.999625);
delay(416.66625);
tone(tonePin, 195, 124.999875);
delay(138.88875);
tone(tonePin, 174, 999.999);
delay(1111.11);
tone(tonePin, 293, 999.999);
delay(1111.11);
tone(tonePin, 261, 249.99975);
delay(277.7775);
tone(tonePin, 233, 249.99975);
delay(277.7775);
tone(tonePin, 220, 249.99975);
delay(277.7775);
tone(tonePin, 233, 249.99975);
delay(277.7775);
tone(tonePin, 261, 749.99925);
delay(833.3325);
tone(tonePin, 174, 249.99975);
delay(277.7775);
tone(tonePin, 174, 999.999);
delay(1111.11);
tone(tonePin, 233, 999.999);
delay(1111.11);
tone(tonePin, 220, 249.99975);
delay(277.7775);
tone(tonePin, 195, 249.99975);
delay(277.7775);
tone(tonePin, 174, 249.99975);
delay(277.7775);
tone(tonePin, 195, 249.99975);
delay(277.7775);
tone(tonePin, 220, 749.99925);
delay(833.3325);
tone(tonePin, 146, 249.99975);
delay(277.7775);
tone(tonePin, 146, 999.999);
delay(1111.11);
tone(tonePin, 233, 499.9995);
delay(555.555);
tone(tonePin, 195, 374.999625);
delay(416.66625);
tone(tonePin, 220, 124.999875);
delay(138.88875);
tone(tonePin, 233, 499.9995);
delay(555.555);
tone(tonePin, 195, 374.999625);
delay(416.66625);
tone(tonePin, 220, 124.999875);
delay(138.88875);
tone(tonePin, 233, 499.9995);
delay(555.555);
tone(tonePin, 195, 374.999625);
delay(416.66625);
tone(tonePin, 233, 124.999875);
delay(138.88875);
tone(tonePin, 311, 999.999);
delay(1111.11);
tone(tonePin, 311, 999.999);
delay(1111.11);
tone(tonePin, 293, 249.99975);
delay(277.7775);
tone(tonePin, 261, 249.99975);
delay(277.7775);
tone(tonePin, 233, 249.99975);
delay(277.7775);
tone(tonePin, 261, 249.99975);
delay(277.7775);
tone(tonePin, 293, 749.99925);
delay(833.3325);
tone(tonePin, 233, 249.99975);
delay(277.7775);
tone(tonePin, 233, 999.999);
delay(1111.11);
tone(tonePin, 261, 999.999);
delay(1111.11);
tone(tonePin, 233, 249.99975);
delay(277.7775);
tone(tonePin, 220, 249.99975);
delay(277.7775);
tone(tonePin, 195, 249.99975);
delay(277.7775);
tone(tonePin, 220, 249.99975);
delay(277.7775);
tone(tonePin, 233, 749.99925);
delay(833.3325);
tone(tonePin, 195, 249.99975);
delay(277.7775);
tone(tonePin, 195, 999.999);
delay(1111.11);
tone(tonePin, 233, 499.9995);
delay(555.555);
tone(tonePin, 220, 374.999625);
delay(416.66625);
tone(tonePin, 195, 124.999875);
delay(138.88875);
tone(tonePin, 174, 499.9995);
delay(555.555);
tone(tonePin, 116, 374.999625);
delay(416.66625);
tone(tonePin, 116, 124.999875);
delay(138.88875);
tone(tonePin, 174, 999.999);
delay(1111.11);
tone(tonePin, 195, 499.9995);
delay(555.555);
tone(tonePin, 220, 499.9995);
delay(555.555);
tone(tonePin, 233, 1999.998);
delay(2222.22);
}
void loop() {}
Заключение
Как видите, на Ардуино можно сыграть почти любую мелодию. Но на этом музыкальные возможности Ардуино не исчерпываются. И если подключить дополнительные модули, то можно проиграть и mp3 аудио файлы. В будущем мы попробуем это сделать.
Спасибо, что дочитали статью до конца.
Пожалуйста, подписывайтесь на блог в яндекс дзен, ставьте лайки и пишите комментарии.
Посмотрите больше уроков и проектов на сайте arcadepub.ru
И подписывайтесь на соц. сети.
Спасибо за внимание, скоро увидимся.