Зумер і мелодії
Вступ
Окрім тактильних (кнопки) і візуальних (світлодіоди) способів взаємодії з Дроном, існують ще й інші. Наприклад, один з таких, який ми розглянемо на цьому уроці – звуковий (або акустичний). Звуки дуже важливі і широко використовуються в різноманітних побутових пристроях. Наприклад, мікрохвильовки не просто так мають гучні пищалки. Коли ви увімкнули підігрів їжі на кілька хвилин і пішли в іншу кімнату, то немає іншого більш дієвого способу повідомити Вам про закінчення підігріву окрім як голосно запищати. Простим миганням світлодіоду тут не обійтися, оскільки Ви навряд його побачите з іншої кінмати. Інший приклад це якщо забути закрити дверцята холодильника, то більш-менш сучасні холодильники запищать, попереджуючи Вас, щоб продукти не розморозились і не було катастрофи на кухні. Ще один приклад це детектори диму, які подавши звуковий сигнал, завчасно попереджують про пожежу
Пищалка
Пищалки, або їх ще називають зумери чи бузери, це складніші пристрої для керування ніж світлодіоди. У випадку світлодіодів в попередніх уроках ми передавали одиницю в функцію
digitalWrite
і все – цього було достатньо для увімкнення світлодіоду. Що робив Дрон під капотом то це підключав напругу в кілька вольт на світлодіод і він вмикався. Для того, щоб увімкнути пищалку (бузер), потрібно передавати не просто напругу, а коливаючу напругу з певною частотою. Яку частоту напруги передаєш на пищалку, таку вона вона і відтворює у вигляді звуківЛюдське вухо може сприймати звуки з частотою в діапазоні від 20 Гц (Герц) до 20 тисяч Гц. Але найкраще людина сприймає звуки у діапазоні частот від 2000 до 5000 Гц. Саме ці частоти відповідають людській мові. Тому за роки еволюції людина навчилась дуже добре чути саме їх, щоб краще чути співрозмовника.
Отже тепер ми знаємо, що для того, щоб нам почути звуки треба заставити Дрон звучати з певною частотою. На щастя і для цього існує функція, яка вміє це робити, треба лише передати їй в параметри частоту, з якою ми хочемо, щоб пищалка звучала і тривалість звучання. Ця функція називається tone
Написання програми
Давайте напишемо програму, яка буде періодично видавати звук з частотою 500 Гц на пін PA6, до якого підключимо пищалку
1void setup() {
2 pinMode(PA6, OUTPUT);
3}
4
5void loop() {
6 tone(PA6, 500, 300);
7 delay(2000);
8}
1void setup() { //Функція 'setup' виконується першою при запуску Дрона і лише раз
2 pinMode(PA6, OUTPUT);//переводимо пін пищалки в режим роботи на вихід
3}
4
5void loop() { //Функція 'loop' виконується циклічно і безкінечно одразу після 'setup'
6 tone(PA6, 500, 300); //Вмикаємо звучання піна PA6 з частотою 500 Гц впродовж 300 мілісекунд
7 delay(2000); //чекаємо наприклад 2 секунди до наступного пищання
8}
Отже, як видно з прикладу вище, функція tone
приймає 3 можливі параметри: номер піна (PA6), частота звучання (500 Гц), тривалість звучання (300 мс). Як ми вже знаємо, в одній секунді – 1000 мілісекунд
Дрон сам по собі не має пищалки (зумера), але його можна підключити як зовнішній модуль до піна PA6 Дрона. Після підключення пищалки переведіть Дрон в режим програмування (див. 1-ий урок), скопіюйте програму в Ардуїно, завантажте нашу нову програму на Дрон
Підказка: якщо пищалка набридне, щоб вберегти свої нерви і зупинити пищалку переведіть Дрон в режим програмування уже знайомим способом. Так мелодія зупиниться
Самостійна робота №1
Спробуйте модифікувати попередній приклад, змінивши частоту на будь-яку іншу, тривалість пищання чи павзи між пищаннями. Поспостерігайте за змінами в тональності, особливо між високими частотами (наприклад 10000 Гц) та низькими (100 Гц). Також, якщо маєте пса, спробуйте задати дуже високу частоту (10 000 Гц) і дати псу послухати. Чи змінилась поведінка пса?
Мелодії
Тепер давайте спробуємо зіграти мелодії на зумері. Якщо в попередньому прикладі ми використовували одну ноту (звучання однієї частоти), то для відомої мелодії доведеться відтворити набагато більше нот і ще й різної частоти
1int buzzer = PA6;
2
3void setup() {
4 pinMode(buzzer, OUTPUT);
5}
6
7void loop() {
8 tone(buzzer, 494, 800);
9 delay(900);
10
11 tone(buzzer, 494, 250);
12 delay(300);
13
14 tone(buzzer, 494, 250);
15 delay(300);
16
17 tone(buzzer, 440, 250);
18 delay(300);
19
20 tone(buzzer, 494, 250);
21 delay(300);
22
23 tone(buzzer, 523, 250);
24 delay(300);
25
26 tone(buzzer, 587, 850);
27 delay(900);
28
29 tone(buzzer, 523, 250);
30 delay(300);
31
32 tone(buzzer, 494, 550);
33 delay(600);
34
35 tone(buzzer, 440, 550);
36 delay(600);
37
38 tone(buzzer, 392, 550);
39 delay(600);
40
41 tone(buzzer, 494, 550);
42 delay(600);
43
44 tone(buzzer, 370, 550);
45 delay(600);
46
47 tone(buzzer, 494, 550);
48 delay(1000);
49}
Завантажте цю програму на Дрон. Що за музика грає? Як бачите поєднання кількох нот різної частоти, різних за тривалістю і павзами між ними призводить до звучання знайомих мелодій. Так і створюється музика
Цикли
Єдиний недолік програми вище в тому, що ми відтворили лише невеликий уривок мелодії, а програма вже стала дуже довгою і складною для читання. Щоб це виправити нам потрібно познайомитися з такими поняттями в програмуванні як цикли і масиви. З поняттям циклів ми вже трохи знайомі по функції loop
, яка сама по собі виконується циклічно: після відпрацювання всіх функцій всередині loop
вони починають викликатися заново одна за одною. Це ви могли спостерігати по мелодії Гімну з програми вище: після закінчення уривку Гімну уривок починався знову. Але тепер нам треба навчитися створювати власні зациклені ділянки програми всередині loop
. Давайте зіграємо всього 5 нот в циклі, щоб зрозуміти принцип роботи:
1void setup() {
2 pinMode(PA6, OUTPUT);
3}
4
5void loop() {
6 for (int i = 0; i < 5; i++) {
7 int note = 1200 + 200 * i;
8 tone(PA6, note, 200);
9 delay(300);
10 }
11}
1void setup() {
2 pinMode(PA6, OUTPUT); //Переводимо пін PA6 в режим роботи на ВИХІД
3}
4
5void loop() {
6 for (int i = 0; i < 5; i++) { //Оголошуємо цикл, який виконується 5 разів
7 int note = 1200 + 200 * i; //в кожній з 5-ти ітерацій збільшуємо ноту 1200 на 200
8 tone(PA6, note, 200); //відтворюємо ноти з фіксованою тривалістю 200 мілісекунд
9 delay(300); //чекаємо наприклад 300 мілісекунд до відтворення наступної ноти
10 }
11}
Завантажте програму на Дрон. Як видно з прикладу вище ключове слово для створення циклу це for
. Далі в круглих дужках перечислюються параметри циклу: відлік будемо починати з нуля, лічити будемо до 5 і щоразу збільшувати змінну i
на одиницю. Далі в фігурних дужках розміщується тіло циклу, в якому власне написані функції, які мають виконуватися кожну ітерацію (повторення). Використовуючи змінну i
ми можемо для кожної з 5-ти ітерацій використати власну ноту, давайте розпишемо в словах, що відбувається на кожній з 5-ти ітерацій:
- В першій ітерації
i
дорівнює 0, отже в зміннуnote
запишеться 1200 (1200+200*0) - В другій ітерації
i
вже 1, тому в зміннуnote
запишеться 1400 (1200+200*1) - В третій ітерації
i
збільшилась вже до 2, тому в зміннуnote
запишеться 1600 (1200+200*2) - В четвертій ітерації
i
збільшилась до 3, тому в зміннуnote
запишеться 1800 (1200+200*3) - В наступній ітерації
i
збільшилась до 4, тому в зміннуnote
запишеться 2000 (1200+200*4) - Наступна ітерація не відбудеться, тому що ми задали щоб цикл виконувався допоки змінна
i
менша за 5, а змінна вже досягла значення 4. І при збільшенні її до 5 вважається причиною, щоб закінчити виконання циклу.
Тобто рахуючи від 0 до 4 ми маємо 5 ітерацій, в кожній з яких змінна i
має такі 5 значень: 0, 1, 2, 3, 4
Самостійна робота №2
Модифікуйте програму вище, щоб цикл виконувався не 5, а більше разів, наприклад 10, 15 або 20. Завантажте програму на Дрон.
Щойно Ви могли відчути переваги використання циклів: замість того, щоб писати функцію tone
10, 15 чи 20 разів Ви просто змінили одне число в програмі і все.
Модифікуйте програму вище таким чином, щоб перша ітерація починалась з частоти не 1200, а наприклад 2000. І щоб збільшувалась не по 200 за ітерацію, а по 500.
Масиви
Цикли найчастіше застосовують з масивами. Масиви це набір змінних одного типу. Тобто якщо раніше ми створювали одну змінну за раз, то тепер зможемо створювати їх багато за один раз. Погляньте на програму з уривком Гімну, там дуже багато різних чисел, які було б зручно записати разом в одному місці, а потім використовувати. Для цього і будемо використовувати масиви. А от в уже в циклах зручно звертатися до елементів масиву. Це тому, що звичайні змінні мають назви, по який до них треба звертатися. Тобто якщо у Вас є наприклад 5 змінних, то треба пам’ятати назву кожної і по ній звертатися. Це складно. Елементи (змінні) в масиві не мають назв, лише сам масив має ім’я, а звертатися до елементів масиву треба по їх порядковому номеру, починаючи з нуля. Тобто достатньо порахувати до 5, щоб звернутися до кожної змінної. Давайте напишемо програму, де використаємо всього один масив і всього один цикл, з якого будемо діставати елементи з масиву.
1void setup() {
2 pinMode(PA6, OUTPUT);
3}
4
5int notes[] = { 1200, 900, 1100, 1300, 2500 };
6
7void loop() {
8 for (int i = 0; i < 5; i++) {
9 int note = notes[i];
10 tone(PA6, note, 200);
11 delay(250);
12 }
13}
1void setup() {
2 pinMode(PA6, OUTPUT);
3}
4
5int notes[] = { 1200, 900, 1100, 1300, 2500 }; //створюємо масив наприклад з 5-ти чисел типу int
6
7void loop() {
8 for (int i = 0; i < 5; i++) { //створюємо цикл: рахуємо з нуля до 5 і збільшуємо змінну 'i' щоразу
9 int note = notes[i]; //елементи в масиві не мають назв, але натомість можна звертатись по номеру
10 tone(PA6, note, 200); //на піні PA6 відтворюємо 5 нот з масиву 'notes', кожну впродовж 200 мс
11 delay(250); //затримка між нотами хай буде 250 мс
12 }
13}
В програмі вище ми виконали наступні дії:
- Створили масив
notes
з 5-ти нот різної частоти - Створили цикл, який перебирає кожну ноту з масиву і відтворює її впродовж 200 мілісекунд
Насправді затримка між нотами в 250 мс це не час між закінченням однієї ноти і початком наступної як могло здатися. Насправді це час між початком першої і початком наступної ноти. Тобто, якщо тривалість кожної ноти 200 мс, то виходить що реальна павза між нотами 50 мс (тобто 250 - 200). 50 мілісекунд це дуже мало і Вам може здатися, що павзи насправді немає, оскільки ноти відтворюються одна за одною дуже швидко. Насправді ж павзи є. Якщо не вірите, спробуйте поставити число значно більше за 250 мс і переконайтесь самі.
Нарешті, познайомившись з циклами, масивами і як їх разом можна використовувати давайте відтворимо більш повний Гімн України за допомогою них:
1void setup() {
2 pinMode(PA6, OUTPUT);
3}
4
5int notes[] = {
6 494, 494, 494, 440, 494, 523, 587, 523, 494,
7 440, 392, 494, 370, 494, 330, 370, 392, 440,
8 494, 494, 494, 440, 494, 523, 587, 523, 494,
9 440, 392, 494, 370, 494, 330, 330, 370, 370,
10 494, 440, 392, 370, 330, 370, 392, 330, 370,
11 370, 392, 392, 440, 440, 494, 494, 370, 370,
12 494, 440, 392, 370, 330, 370, 392, 330, 370,
13 370, 392, 494, 370, 494, 330, 370, 392, 440
14};
15
16int durations[] = {
17 800, 250, 250, 250, 250, 250, 850, 250, 550,
18 550, 550, 550, 550, 550, 850, 250, 550, 550,
19 850, 250, 250, 250, 250, 250, 850, 250, 550,
20 550, 550, 550, 550, 550, 1100, 550, 850, 250,
21 250, 250, 250, 250, 250, 250, 250, 250, 550,
22 550, 550, 550, 550, 550, 1100, 550, 800, 250,
23 250, 250, 250, 250, 250, 250, 250, 250, 550,
24 550, 550, 550, 550, 550, 800, 250, 250, 250
25};
26
27int delays[] = {
28 900, 300, 300, 300, 300, 300, 900, 300, 600,
29 600, 600, 600, 600, 600, 900, 300, 600, 600,
30 900, 300, 300, 300, 300, 300, 900, 300, 600,
31 600, 600, 600, 600, 600, 1200, 1200, 900, 300,
32 300, 300, 300, 300, 300, 300, 300, 300, 600,
33 600, 600, 600, 600, 600, 1200, 1200, 900, 300,
34 300, 300, 300, 300, 300, 300, 300, 300, 600,
35 600, 600, 600, 600, 600, 900, 300, 300, 300
36};
37
38void loop() {
39 for (int i = 0; i < 72; i++) {
40 tone(PA6, notes[i], durations[i]);
41 delay(delays[i]);
42 }
43}
В ширшій версії ми створили цілих 3 масиви: масив для самих нот, масив для їх тривалості та масив для павз між ними. В кожному з масивів по 74 елементи. Тобто, щоб відтворити одну 1 ноту ми беремо частоту з першого масив, тривалість ноти з 2-го, і павзу перед наступною нотою з 3-го масиву. Важко уявити як це саме довелося писати без масивів, а лише з використанням змінних. Отже ми набагато скоротили нашу програму і при цьому Гімн зробили довшим.
Якщо хочете спробувати інші мелодії, то ось список із деяких популярних з ігор та фільмів.
Мелодії з Ігор
1void setup() {
2 pinMode(PA6, OUTPUT);
3}
4
5int notes[] = {
6 659, 659, 0, 659, 0, 523, 659, 784, 0,
7 392, 0, 523, 392, 0, 330, 440, 494, 466,
8 440, 392, 659, 784, 880, 698, 784, 0, 659,
9 523, 587, 494, 523, 392, 0, 330, 440, 494,
10 466, 440, 392, 659, 784, 880, 698, 784, 0,
11 659, 523, 587, 494, 0, 784, 740, 698, 622,
12 659, 0, 415, 440, 262, 0, 440, 523, 587,
13 0, 622, 0, 587, 523, 0, 0, 784, 740,
14 698, 622, 659, 0, 415, 440, 262, 0, 440,
15 523, 587, 0, 622, 0, 587, 523, 0, 523,
16 523, 523, 0, 523, 587, 659, 523, 440, 392,
17 523, 523, 523, 0, 523, 587, 659, 0, 523,
18 523, 523, 0, 523, 587, 659, 523, 440, 392,
19 659, 659, 0, 659, 0, 523, 659, 784, 0,
20 392, 0, 523, 392, 0, 330, 440, 494, 466,
21 440, 392, 659, 784, 880, 698, 784, 0, 659,
22 523, 587, 494, 523, 392, 0, 330, 440, 494,
23 466, 440, 392, 659, 784, 880, 698, 784, 0,
24 659, 523, 587, 494, 659, 523, 392, 0, 415,
25 440, 698, 698, 440, 587, 880, 880, 880, 784,
26 698, 659, 523, 440, 392, 659, 523, 392, 0,
27 415, 440, 698, 698, 440, 494, 698, 698, 698,
28 659, 587, 523, 330, 330, 262, 659, 523, 392,
29 0, 415, 440, 698, 698, 440, 587, 880, 880,
30 880, 784, 698, 659, 523, 440, 392, 659, 523,
31 392, 0, 415, 440, 698, 698, 440, 494, 698,
32 698, 698, 659, 587, 523, 330, 330, 262, 523,
33 523, 523, 0, 523, 587, 659, 0, 523, 523,
34 523, 0, 523, 587, 659, 523, 440, 392, 659,
35 659, 0, 659, 0, 523, 659, 784, 0, 392,
36 0, 659, 523, 392, 0, 415, 440, 698, 698,
37 440, 587, 880, 880, 880, 784, 698, 659, 523,
38 440, 392, 659, 523, 392, 0, 415, 440, 698,
39 698, 440, 494, 698, 698, 698, 659, 587, 523,
40 330, 330, 262, 523, 392, 330, 440, 494, 440,
41 415, 466, 415, 392, 294, 330
42};
43
44int durations[] = {
45 125, 125, 125, 125, 125, 125, 125,
46 250, 250, 125, 250, 250, 125, 250, 250,
47 250, 250, 125, 250, 125, 125, 125, 250, 125, 125,
48 125, 250, 125, 125, 250, 250, 125, 250, 250,
49 250, 250, 125, 250, 125, 125, 125, 250, 125, 125,
50 125, 250, 125, 125, 250,
51 250, 125, 125, 125, 250, 125,
52 125, 125, 125, 125, 125, 125, 125, 125,
53 250, 250, 125, 250, 500, 500,
54 250, 125, 125, 125, 250, 125,
55 125, 125, 125, 125, 125, 125, 125, 125,
56 250, 250, 125, 250, 500, 500,
57 125, 250, 125, 125, 125, 250,
58 125, 250, 125, 500,
59 125, 250, 125, 125, 125, 125, 125, 1000,
60 125, 250, 125, 125, 125, 250,
61 125, 250, 125, 500,
62 125, 125, 125, 125, 125, 125, 250,
63 250, 250, 250, 250, 250, 125, 250, 250,
64 250, 250, 125, 250,
65 125, 125, 125, 250, 125, 125,
66 125, 250, 125, 125, 250,
67 250, 125, 250, 250, 250, 250, 125, 250,
68 125, 125, 125, 250, 125, 125,
69 125, 250, 125, 125, 250,
70 125, 250, 125, 250, 250,
71 125, 250, 125, 500,
72 125, 125, 125, 125, 125, 125,
73 125, 250, 125, 500,
74 125, 250, 125, 250, 250,
75 125, 250, 125, 500,
76 125, 250, 125, 125, 125, 125,
77 125, 250, 125, 500,
78 125, 250, 125, 250, 250,
79 125, 250, 125, 500,
80 125, 125, 125, 125, 125, 125,
81 125, 250, 125, 500,
82 125, 250, 125, 250, 250,
83 125, 250, 125, 500,
84 125, 250, 125, 125, 125, 125,
85 125, 250, 125, 500,
86 125, 250, 125, 125, 125, 125, 125, 1000,
87 125, 250, 125, 125, 125, 250,
88 125, 250, 125, 500,
89 125, 125, 125, 125, 125, 125, 250,
90 250, 250, 250, 250,
91 125, 250, 125, 250, 250,
92 125, 250, 125, 500,
93 125, 125, 125, 125, 125, 125,
94 125, 250, 125, 500,
95 125, 250, 125, 250, 250,
96 125, 250, 125, 500,
97 125, 250, 125, 125, 125, 125,
98 125, 250, 125, 500,
99 250, 250, 250,
100 125, 125, 125, 125, 125, 125,
101 125, 125, 500
102};
103
104int delays[] = {
105 152, 152, 152, 152, 152, 152, 152,
106 305, 305, 152, 305, 305, 152, 305, 305,
107 305, 305, 152, 305, 152, 152, 152, 305, 152, 152,
108 152, 305, 152, 152, 305,
109 305, 152, 305, 305, 305, 305, 152, 305,
110 152, 152, 152, 305, 152, 152,
111 152, 305, 152, 152, 305,
112 305, 152, 152, 152, 305, 152,
113 152, 152, 152, 152, 152, 152, 152, 152,
114 305, 305, 152, 305, 610, 610,
115 305, 152, 152, 152, 305, 152,
116 152, 152, 152, 152, 152, 152, 152, 152,
117 305, 305, 152, 305, 610, 610,
118 152, 305, 152, 152, 152, 305,
119 152, 305, 152, 610,
120 152, 305, 152, 152, 152, 152, 152,
121 1220, 152, 305, 152, 152, 152, 305,
122 152, 305, 152, 610,
123 152, 152, 152, 152, 152, 152, 305,
124 305, 305, 305, 305, 305, 152, 305, 305,
125 305, 305, 152, 305,
126 152, 152, 152, 305, 152, 152,
127 152, 305, 152, 152, 305,
128 305, 152, 305, 305, 305, 305, 152, 305,
129 152, 152, 152, 305, 152, 152,
130 152, 305, 152, 152, 305,
131 152, 305, 152, 305, 305,
132 152, 305, 152, 610,
133 152, 152, 152, 152, 152, 152,
134 152, 305, 152, 610,
135 152, 305, 152, 305, 305,
136 152, 305, 152, 610,
137 152, 305, 152, 152, 152, 152,
138 152, 305, 152, 610,
139 152, 305, 152, 305, 305,
140 152, 305, 152, 610,
141 152, 152, 152, 152, 152, 152,
142 152, 305, 152, 610,
143 152, 305, 152, 305, 305,
144 152, 305, 152, 610,
145 152, 305, 152, 152, 152, 152,
146 152, 305, 152, 610,
147 152, 305, 152, 152, 152, 152, 152,
148 1220, 152, 305, 152, 152, 152, 305,
149 152, 305, 152, 610,
150 152, 152, 152, 152, 152, 152, 305,
151 305, 305, 305, 305,
152 152, 305, 152, 305, 305,
153 152, 305, 152, 610,
154 152, 152, 152, 152, 152, 152,
155 152, 305, 152, 610,
156 152, 305, 152, 305, 305,
157 152, 305, 152, 610,
158 152, 305, 152, 152, 152, 152,
159 152, 305, 152, 610,
160 305, 305, 305, 152, 152, 152, 152, 152, 152,
161 152, 152, 610
162};
163
164void loop() {
165 for (int i = 0; i < 321; i++) {
166 tone(PA6, notes[i], durations[i]);
167 delay(delays[i]);
168 }
169}
1void setup() {
2 pinMode(PA6, OUTPUT);
3}
4
5int notes[] = {
6 659, 494, 523, 587, 523, 494,
7 440, 440, 523, 659, 587, 523,
8 494, 523, 587, 659,
9 523, 440, 440, 440, 494, 523,
10 587, 698, 880, 784, 698,
11 659, 523, 659, 587, 523,
12 494, 494, 523, 587, 659,
13 523, 440, 440, 0,
14 659, 494, 523, 587, 523, 494,
15 440, 440, 523, 659, 587, 523,
16 494, 523, 587, 659,
17 523, 440, 440, 440, 494, 523,
18 587, 698, 880, 784, 698,
19 659, 523, 659, 587, 523,
20 494, 494, 523, 587, 659,
21 523, 440, 440, 0,
22 659, 523, 587, 494,
23 523, 440, 415, 494, 0,
24 659, 523, 587, 494,
25 523, 659, 880, 831
26};
27
28int durations[] = {
29 250, 125, 125, 250, 125, 125,
30 250, 125, 125, 250, 125, 125,
31 250, 125, 250, 250,
32 250, 250, 125, 250, 125, 125,
33 250, 125, 250, 125, 125,
34 250, 125, 250, 125, 125,
35 250, 125, 125, 250, 250,
36 250, 250, 250, 250,
37 250, 125, 125, 250, 125, 125,
38 250, 125, 125, 250, 125, 125,
39 250, 125, 250, 250,
40 250, 250, 125, 250, 125, 125,
41 250, 125, 250, 125, 125,
42 250, 125, 250, 125, 125,
43 250, 125, 125, 250, 250,
44 250, 250, 250, 250,
45 500, 500, 500, 500,
46 500, 500, 500, 250, 125,
47 500, 500, 500, 500,
48 250, 250, 500, 500
49};
50
51int delays[] = {
52 350, 175, 175, 350, 175, 175,
53 350, 175, 175, 350, 175, 175,
54 350, 175, 350, 350,
55 350, 350, 175, 350, 175, 175,
56 350, 175, 350, 175, 175,
57 350, 175, 350, 175, 175,
58 350, 175, 175, 350, 350,
59 350, 350, 350, 350,
60 350, 175, 175, 350, 175, 175,
61 350, 175, 175, 350, 175, 175,
62 350, 175, 350, 350,
63 350, 350, 175, 350, 175, 175,
64 350, 175, 350, 175, 175,
65 350, 175, 350, 175, 175,
66 350, 175, 175, 350, 350,
67 350, 350, 350, 350,
68 700, 700, 700, 700,
69 700, 700, 700, 350, 175,
70 700, 700, 700, 700,
71 350, 350, 700, 700
72};
73
74void loop() {
75 for (int i = 0; i < 99; i++) {
76 tone(PA6, notes[i], durations[i]);
77 delay(delays[i]);
78 }
79}
1void setup() {
2 pinMode(PA6, OUTPUT);
3}
4
5int notes[] = {
6 82, 82, 165, 82, 82, 147, 82, 82,
7 131, 82, 82, 117, 82, 82, 123, 131,
8 82, 82, 165, 82, 82, 147, 82, 82,
9 131, 82, 82, 117,
10
11 82, 82, 165, 82, 82, 147, 82, 82,
12 131, 82, 82, 117, 82, 82, 123, 131,
13 82, 82, 165, 82, 82, 147, 82, 82,
14 131, 82, 82, 117,
15
16 82, 82, 165, 82, 82, 147, 82, 82,
17 131, 82, 82, 117, 82, 82, 123, 131,
18 82, 82, 165, 82, 82, 147, 82, 82,
19 131, 82, 82, 117,
20
21 82, 82, 165, 82, 82, 147, 82, 82,
22 131, 82, 82, 117, 82, 82, 123, 131,
23 82, 82, 165, 82, 82, 147, 82, 82,
24 185, 147, 123, 220, 185, 123, 147, 185, 220, 185, 147, 123,
25
26 82, 82, 165, 82, 82, 147, 82, 82,
27 131, 82, 82, 117, 82, 82, 123, 131,
28 82, 82, 165, 82, 82, 147, 82, 82,
29 131, 82, 82, 117,
30
31 82, 82, 165, 82, 82, 147, 82, 82,
32 131, 82, 82, 117, 82, 82, 123, 131,
33 82, 82, 165, 82, 82, 147, 82, 82,
34 247, 196, 165, 196, 247, 330, 196, 247, 330, 247, 392, 494,
35
36 110, 110, 220, 110, 110, 196, 110, 110,
37 175, 110, 110, 156, 110, 110, 165, 175,
38 110, 110, 220, 110, 110, 196, 110, 110,
39 175, 110, 110, 156,
40
41 110, 110, 220, 110, 110, 196, 110, 110,
42 175, 110, 110, 156, 110, 110, 165, 175,
43 110, 110, 220, 110, 110, 196, 110, 110,
44 220, 175, 147, 220, 175, 147, 262, 220, 175, 220, 175, 147,
45
46 82, 82, 165, 82, 82, 147, 82, 82,
47 131, 82, 82, 117, 82, 82, 123, 131,
48 82, 82, 165, 82, 82, 147, 82, 82,
49 131, 82, 82, 117,
50
51 82, 82, 165, 82, 82, 147, 82, 82,
52 131, 82, 82, 117, 82, 82, 123, 131,
53 82, 82, 165, 82, 82, 147, 82, 82,
54 131, 82, 82, 117,
55
56 139, 139, 277, 139, 139, 247, 139, 139,
57 220, 139, 139, 196, 139, 139, 208, 220,
58 123, 123, 247, 123, 123, 220, 123, 123,
59 196, 123, 123, 175,
60
61 82, 82, 165, 82, 82, 147, 82, 82,
62 131, 82, 82, 117, 82, 82, 123, 131,
63 82, 82, 165, 82, 82, 147, 82, 82,
64 247, 196, 165, 196, 247, 330, 196, 247, 330, 247, 392, 494,
65
66 82, 82, 165, 82, 82, 147, 82, 82,
67 131, 82, 82, 117, 82, 82, 123, 131,
68 82, 82, 165, 82, 82, 147, 82, 82,
69 131, 82, 82, 117,
70
71 82, 82, 165, 82, 82, 147, 82, 82,
72 131, 82, 82, 117, 82, 82, 123, 131,
73 82, 82, 165, 82, 82, 147, 82, 82,
74 185, 156, 123, 185, 156, 123, 196, 147, 123, 311, 156, 123,
75
76 82, 82, 165, 82, 82, 147, 82, 82,
77 131, 82, 82, 117, 82, 82, 123, 131,
78 82, 82, 165, 82, 82, 147, 82, 82,
79 131, 82, 82, 117,
80
81 82, 82, 165, 82, 82, 147, 82, 82,
82 131, 82, 82, 117, 82, 82, 123, 131,
83 82, 82, 165, 82, 82, 147, 82, 82,
84 330, 247, 196, 392, 330, 196, 247, 294, 330, 392, 330, 196,
85
86 82, 82, 165, 82, 82, 147, 82, 82,
87 131, 82, 82, 117, 82, 82, 123, 131,
88 82, 82, 165, 82, 82, 147, 82, 82,
89 131, 82, 82, 117,
90
91 110, 110, 220, 110, 110, 196, 110, 110,
92 175, 110, 110, 156, 110, 110, 165, 175,
93 110, 110, 220, 110, 110, 196, 110, 110,
94 220, 175, 147, 220, 175, 147, 262, 220, 175, 220, 175, 147,
95
96 82, 82, 165, 82, 82, 147, 82, 82,
97 131, 82, 82, 117, 82, 82, 123, 131,
98 82, 82, 165, 82, 82, 147, 82, 82,
99 131, 82, 82, 117
100};
101
102int durations[] = {
103 125, 125, 125, 125, 125, 125, 125, 125,
104 125, 125, 125, 125, 125, 125, 125, 125,
105 125, 125, 125, 125, 125, 125, 125, 125,
106 125, 125, 125, 500,
107 125, 125, 125, 125, 125, 125, 125, 125,
108 125, 125, 125, 125, 125, 125, 125, 125,
109 125, 125, 125, 125, 125, 125, 125, 125,
110 125, 125, 125, 500,
111 125, 125, 125, 125, 125, 125, 125, 125,
112 125, 125, 125, 125, 125, 125, 125, 125,
113 125, 125, 125, 125, 125, 125, 125, 125,
114 125, 125, 125, 500,
115 125, 125, 125, 125, 125, 125, 125, 125,
116 125, 125, 125, 125, 125, 125, 125, 125,
117 125, 125, 125, 125, 125, 125, 125, 125,
118 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
119 125, 125, 125, 125, 125, 125, 125, 125,
120 125, 125, 125, 125, 125, 125, 125, 125,
121 125, 125, 125, 125, 125, 125, 125, 125,
122 125, 125, 125, 500,
123 125, 125, 125, 125, 125, 125, 125, 125,
124 125, 125, 125, 125, 125, 125, 125, 125,
125 125, 125, 125, 125, 125, 125, 125, 125,
126 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
127 125, 125, 125, 125, 125, 125, 125, 125,
128 125, 125, 125, 125, 125, 125, 125, 125,
129 125, 125, 125, 125, 125, 125, 125, 125,
130 125, 125, 125, 500,
131 125, 125, 125, 125, 125, 125, 125, 125,
132 125, 125, 125, 125, 125, 125, 125, 125,
133 125, 125, 125, 125, 125, 125, 125, 125,
134 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
135 125, 125, 125, 125, 125, 125, 125, 125,
136 125, 125, 125, 125, 125, 125, 125, 125,
137 125, 125, 125, 125, 125, 125, 125, 125,
138 125, 125, 125, 500,
139 125, 125, 125, 125, 125, 125, 125, 125,
140 125, 125, 125, 125, 125, 125, 125, 125,
141 125, 125, 125, 125, 125, 125, 125, 125,
142 125, 125, 125, 500,
143 125, 125, 125, 125, 125, 125, 125, 125,
144 125, 125, 125, 125, 125, 125, 125, 125,
145 125, 125, 125, 125, 125, 125, 125, 125,
146 125, 125, 125, 500,
147 125, 125, 125, 125, 125, 125, 125, 125,
148 125, 125, 125, 125, 125, 125, 125, 125,
149 125, 125, 125, 125, 125, 125, 125, 125,
150 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
151 125, 125, 125, 125, 125, 125, 125, 125,
152 125, 125, 125, 125, 125, 125, 125, 125,
153 125, 125, 125, 125, 125, 125, 125, 125,
154 125, 125, 125, 500,
155 125, 125, 125, 125, 125, 125, 125, 125,
156 125, 125, 125, 125, 125, 125, 125, 125,
157 125, 125, 125, 125, 125, 125, 125, 125,
158 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
159 125, 125, 125, 125, 125, 125, 125, 125,
160 125, 125, 125, 125, 125, 125, 125, 125,
161 125, 125, 125, 125, 125, 125, 125, 125,
162 125, 125, 125, 500,
163 125, 125, 125, 125, 125, 125, 125, 125,
164 125, 125, 125, 125, 125, 125, 125, 125,
165 125, 125, 125, 125, 125, 125, 125, 125,
166 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
167 125, 125, 125, 125, 125, 125, 125, 125,
168 125, 125, 125, 125, 125, 125, 125, 125,
169 125, 125, 125, 125, 125, 125, 125, 125,
170 125, 125, 125, 500,
171 125, 125, 125, 125, 125, 125, 125, 125,
172 125, 125, 125, 125, 125, 125, 125, 125,
173 125, 125, 125, 125, 125, 125, 125, 125,
174 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
175 125, 125, 125, 125, 125, 125, 125, 125,
176 125, 125, 125, 125, 125, 125, 125, 125,
177 125, 125, 125, 125, 125, 125, 125, 125,
178 125, 125, 125, 500
179};
180
181void loop() {
182 for (int i = 0; i < 588; i++) {
183 tone(PA6, notes[i], durations[i]);
184 delay(durations[i] * 1.3);
185 }
186}
1void setup() {
2 pinMode(PA6, OUTPUT);
3}
4
5int notes[] = {
6 494, 988, 740, 622,
7 988, 740, 622, 523,
8 1047, 1568, 1319, 1047, 1568, 1319,
9 494, 988, 740, 622, 988,
10 740, 622, 622, 659, 698,
11 698, 740, 784, 784, 831, 880, 988
12};
13
14int durations[] = {
15 63, 63, 63, 63,
16 32, 63, 125, 63,
17 63, 63, 63, 32, 63, 125,
18 63, 63, 63, 63, 32,
19 63, 125, 32, 32, 32,
20 32, 32, 32, 32, 32, 63, 125
21};
22
23void loop() {
24 for (int i = 0; i < 31; i++) {
25 tone(PA6, notes[i], durations[i]);
26 delay(durations[i] * 2.5);
27 }
28}
Мелодії з Фільмів
1void setup() {
2 pinMode(PA6, OUTPUT);
3}
4
5int notes[] = {
6 330, 392, 440, 440, 0, 440, 494, 523, 523, 0,
7 523, 587, 494, 494, 0, 440, 392, 440, 0, 330,
8 392, 440, 440, 0, 440, 494, 523, 523, 0, 523,
9 587, 494, 494, 0, 440, 392, 440, 0, 330, 392,
10 440, 440, 0, 440, 523, 587, 587, 0, 587, 659,
11 698, 698, 0, 659, 587, 659, 440, 0, 440, 494,
12 523, 523, 0, 587, 659, 440, 0, 440, 523, 494,
13 494, 0, 523, 440, 494, 0, 440, 440, 440, 494,
14 523, 523, 0, 523, 587, 494, 494, 0, 440, 392,
15 440, 0, 330, 392, 440, 440, 0, 440, 494, 523,
16 523, 0, 523, 587, 494, 494, 0, 440, 392, 440,
17 0, 330, 392, 440, 440, 0, 440, 523, 587, 587,
18 0, 587, 659, 698, 698, 0, 659, 587, 659, 440,
19 0, 440, 494, 523, 523, 0, 587, 659, 440, 0,
20 440, 523, 494, 494, 0, 523, 440, 494, 0, 659,
21 0, 0, 698, 0, 0, 659, 659, 0, 784, 0, 659, 587,
22 0, 0, 587, 0, 0, 523, 0, 0, 494, 523, 0, 494,
23 0, 440, 659, 0, 0, 698, 0, 0, 659, 659, 0,
24 784, 0, 659, 587, 0, 0, 587, 0, 0, 523, 0, 0,
25 494, 523, 0, 494, 0, 440
26};
27
28
29int durations[] = {
30 125, 125, 250, 125, 125, 125, 125, 250, 125, 125,
31 125, 125, 250, 125, 125, 125, 125, 250, 125,
32 125, 125, 250, 125, 125, 125, 125, 250, 125, 125,
33 125, 125, 250, 125, 125, 125, 125, 250, 125,
34 125, 125, 250, 125, 125, 125, 125, 250, 125, 125,
35 125, 125, 250, 125, 125, 125, 125, 125, 250, 125,
36 125, 125, 250, 125, 125, 250, 125, 250, 125,
37 125, 125, 250, 125, 125, 125, 125, 250, 250,
38 250, 125, 125, 125, 250, 125, 125, 125, 125, 250, 125, 125,
39 125, 125, 250, 125, 125, 125, 250, 125, 125,
40 125, 125, 250, 125, 125, 125, 125, 250, 125, 125,
41 125, 125, 250, 125, 125, 125, 250, 125, 125,
42 125, 125, 250, 125, 125, 125, 125, 250, 125, 125,
43 125, 125, 125, 250, 125, 125, 125, 250, 125, 125,
44 250, 125, 250, 125, 125, 125, 250, 125, 125,
45 125, 125, 250, 250, 250, 125, 250, 250, 125, 250,
46 125, 125, 125, 125, 125, 125, 125, 125, 250,
47 250, 125, 250, 250, 125, 250, 125, 125, 125, 125, 125, 500,
48 250, 125, 250, 250, 125, 250, 125, 125, 125,
49 125, 125, 125, 125, 125, 250, 250, 125, 250,
50 250, 125, 250, 125, 125, 125, 125, 125, 500
51};
52
53int delays[] = {
54 162, 162, 325, 162, 162, 162, 162, 325, 162, 162,
55 162, 162, 325, 162, 162, 162, 162, 325, 162,
56 162, 162, 325, 162, 162, 162, 162, 325, 162, 162,
57 162, 162, 325, 162, 162, 162, 162, 325, 162,
58 162, 162, 325, 162, 162, 162, 162, 325, 162, 162,
59 162, 162, 325, 162, 162, 162, 162, 162, 325, 162,
60 162, 162, 325, 162, 162, 325, 162, 325, 162,
61 162, 162, 325, 162, 162, 162, 162, 325, 325,
62 325, 162, 162, 162, 325, 162, 162,
63 162, 162, 325, 162, 162, 162, 162, 325, 162,
64 162, 162, 325, 162, 162, 162, 162, 325, 162, 162,
65 162, 162, 325, 162, 162, 162, 162, 325, 162,
66 162, 162, 325, 162, 162, 162, 162, 325, 162, 162,
67 162, 162, 325, 162, 162, 162, 162, 162, 325, 162,
68 162, 162, 325, 162, 162, 325, 162, 325, 162,
69 162, 162, 325, 162, 162, 162, 162, 325, 325,
70 325, 162, 325, 325, 162, 325, 162, 162, 162,
71 162, 162, 162, 162, 162, 325, 325, 162, 325, 325, 162, 325,
72 162, 162, 162, 162, 162, 650, 325, 162, 325, 325, 162, 325,
73 162, 162, 162, 162, 162, 162, 162, 162, 325,
74 325, 162, 325, 325, 162, 325, 162, 162, 162, 162, 162, 650
75};
76
77void loop() {
78 for (int i = 0; i < 203; i++) {
79 tone(PA6, notes[i], durations[i]);
80 delay(delays[i]);
81 }
82}
1void setup() {
2 pinMode(PA6, OUTPUT);
3}
4
5int notes[] = {
6 466, 466, 466, 349, 1047, 880, 830, 784,
7 1397, 1047, 880, 830, 784, 1397, 1047, 880,
8 830, 880, 784, 523, 523, 523, 349, 1047,
9 880, 830, 784, 1397, 1047, 880, 830, 784
10};
11
12int durations[] = {
13 125, 125, 125, 500, 500, 125, 125, 125,
14 500, 250, 125, 125, 125, 500, 250, 125,
15 125, 125, 500, 125, 125, 125, 500, 500,
16 125, 125, 125, 500, 250, 125, 125, 125
17};
18
19int delays[] = {
20 162, 162, 162, 650, 650, 162, 162, 162,
21 650, 325, 162, 162, 162, 650, 325, 162,
22 162, 162, 650, 163, 162, 163, 650, 650,
23 162, 162, 162, 650, 325, 162, 162, 162
24};
25
26void loop() {
27 for (int i = 0; i < 32; i++) {
28 tone(PA6, notes[i], durations[i]);
29 delay(delays[i]);
30 }
31}
1void setup() {
2 pinMode(PA6, OUTPUT);
3}
4
5int notes[] = {
6 0, 294, 392, 466, 440, 392, 587, 523, 440,
7 392, 466, 440, 349, 415, 294, 294, 392, 466,
8 440, 392, 587, 698, 659, 622, 494, 622, 587,
9 554, 277, 494, 392, 466, 587, 466, 587, 466,
10 622, 587, 554, 440, 466, 587, 554, 277, 294,
11 587, 0, 466, 587, 466, 587, 466, 698, 659,
12 622, 494, 622, 587, 554, 277, 466, 392
13};
14
15int durations[] = {
16 500, 250, 250, 125, 250, 500, 250, 500, 500,
17 250, 125, 250, 500, 250, 1000, 250, 250, 125,
18 250, 500, 250, 500, 250, 500, 250, 250, 125,
19 250, 500, 250, 1000, 250, 500, 250, 500, 250,
20 500, 250, 500, 250, 250, 125, 250, 500, 250,
21 1000, 250, 250, 500, 250, 500, 250, 500, 250,
22 500, 250, 250, 125, 250, 500, 250, 1000
23};
24
25int delays[] = {
26 650, 325, 325, 162, 325, 650, 325, 650, 650,
27 325, 162, 325, 650, 325, 1300, 325, 325, 162,
28 325, 650, 325, 650, 325, 650, 325, 325, 162,
29 325, 650, 325, 1300, 325, 650, 325, 650, 325,
30 650, 325, 650, 325, 325, 162, 325, 650, 325,
31 1300, 325, 325, 650, 325, 650, 325, 650, 325,
32 650, 325, 325, 162, 325, 650, 325, 1300
33};
34
35void loop() {
36 for (int i = 0; i < 62; i++) {
37 tone(PA6, notes[i], durations[i]);
38 delay(delays[i]);
39 }
40}
1void setup() {
2 pinMode(PA6, OUTPUT);
3}
4
5int notes[] = {
6 392, 262, 311, 349, 392, 262, 311, 349, 392,
7 262, 330, 349, 392, 262, 330, 349, 392, 262,
8 330, 349, 392, 262, 330, 349, 392, 262,
9 311, 349, 392, 262, 311, 349, 294,
10 349, 233, 311, 294, 349, 233, 311,
11 294, 262, 392, 262, 311, 349, 392, 262,
12 311, 349, 294, 349, 233, 311, 294, 349,
13 233, 311, 294, 262, 392, 262, 311, 349,
14 392, 262, 311, 349, 294, 349, 233, 294,
15 311, 294, 233, 262, 523, 466, 262,
16 392, 311, 311, 349, 392, 523, 466,
17 262, 392, 311, 311, 294, 523, 392,
18 415, 466, 523, 392, 415, 466, 523,
19 392, 415, 466, 523, 392, 415, 466,
20 0, 831, 932, 1047, 784, 831, 932
21};
22
23int durations[] = {
24 125, 125, 63, 63, 125, 125, 63, 63,
25 125, 125, 63, 63, 125, 125, 63, 63,
26 125, 125, 63, 63, 125, 125, 63, 63,
27 250, 250, 63, 63, 250, 250, 63, 63,
28 1000, 250, 250, 63, 63, 250, 250,
29 63, 63, 1000, 250, 250, 63, 63, 250,
30 250, 63, 63, 1000, 250, 250, 63, 63,
31 250, 250, 63, 63, 500, 250, 250, 125,
32 125, 125, 125, 1000, 500, 500, 500, 500,
33 500, 250, 250, 1000, 500, 500, 500, 500,
34 500, 250, 250, 125, 125, 63, 63, 125,
35 125, 63, 63, 125, 125, 63, 63, 125,
36 125, 63, 63, 250, 63, 63, 125, 125,
37 63, 63, 125, 63, 63, 63, 125, 125, 63,
38 63
39};
40
41int delays[] = {
42 225, 225, 113, 113, 225, 225, 113, 113,
43 225, 225, 113, 113, 225, 225, 113, 113,
44 225, 225, 113, 113, 225, 225, 113, 113,
45 450, 450, 113, 113, 450, 450, 113, 113,
46 1800, 450, 450, 113, 113, 450, 450,
47 113, 113, 1800, 450, 450, 113, 113, 450,
48 450, 113, 113, 1800, 450, 450, 113, 113,
49 450, 450, 113, 113, 900, 450, 450, 225,
50 225, 225, 225, 1800, 900, 900, 900, 900,
51 900, 450, 450, 1800, 900, 900, 900, 900,
52 900, 450, 450, 225, 225, 113, 113, 225,
53 225, 113, 113, 225, 225, 113, 113, 225,
54 225, 113, 113, 450, 113, 113, 225, 225,
55 113, 113, 225, 113, 113, 113, 225, 225, 113,
56 113
57};
58
59void loop() {
60 for (int i = 0; i < 113; i++) {
61 tone(PA6, notes[i], durations[i]);
62 delay(delays[i]);
63 }
64}