Arduino:Примеры/Tone
Поддержать проект | Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Содержание
Проигрывание мелодии с помощью функции Tone [1]
Данный пример показывает, как генерировать звуки при помощи функции tone(). Мелодия, запрограммированная при помощи этого скетча, возможно, покажется вам очень знакомой.
Необходимое оборудование
- Плата Arduino;
- Пьезодинамик;
- Провода-перемычки;
Цепь
Схема
Код
В данном скетче используется дополнительный файл – pitches.h. Он содержит все значения, соответствующие стандартным нотам. Например, NOTE_C4 – это среднее «до», а NOTE_FS4 – это «фа-диез» и так далее. Этот нотный «алфавит» был написан Бреттом Хэгменом (Brett Hagman), и функция tone() основана именно на его работе. Этот скетч может пригодиться для любой ситуации с музыкальными нотами.
1 /*
2 Мелодия
3
4 Проигрывает мелодию.
5
6 Цепь:
7 * 8-омовый динамик, подключенный к 8-ому цифровому контакту
8 Создан 21 января 2010,
9 модифицирован 30 августа 2011 Томом Иго (Tom Igoe)
10
11 Данный пример кода не находится под защитой авторского права.
12
13 http://arduino.cc/en/Tutorial/Tone
14
15 */
16 #include "pitches.h"
17
18 // задаем ноты для мелодии:
19 int melody[] = {
20 NOTE_C4, NOTE_G3,NOTE_G3, NOTE_A3, NOTE_G3,0, NOTE_B3, NOTE_C4};
21
22 // задаем продолжительность нот:
23 // 4 – это четвертная нота, 8 – это восьмая нота и т.д.
24 int noteDurations[] = {
25 4, 8, 8, 4,4,4,4,4 };
26
27 void setup() {
28 // выполняем перебор нот в мелодии:
29 for (int thisNote = 0; thisNote < 8; thisNote++) {
30
31 // чтобы рассчитать время продолжительности ноты,
32 // берем одну секунду и делим ее цифру, соответствующую нужному типу ноты:
33 // например, четвертная нота – это 1000/4,
34 // а восьмая нота – это 1000/8 и т.д.
35 int noteDuration = 1000/noteDurations[thisNote];
36 tone(8, melody[thisNote],noteDuration);
37
38 // чтобы выделить ноты, делаем между ними небольшую задержку.
39 // в данном примере сделаем ее равной продолжительности ноты
40 // плюс еще 30% от продолжительности ноты:
41 int pauseBetweenNotes = noteDuration * 1.30;
42 delay(pauseBetweenNotes);
43 // останавливаем проигрывание мелодии:
44 noTone(8);
45 }
46 }
47
48 void loop() {
49 // ставить мелодию на повтор не будем.
50 }
Чтобы сделать файл pitches.h, кликните кнопку New Tab в правом верхнем углу окна. Она выглядит следующим образом:
Затем вставляем туда вот этот код:
1 /*************************************************
2 * Константы для публичного использования
3 *************************************************/
4
5 #define NOTE_B0 31
6 #define NOTE_C1 33
7 #define NOTE_CS1 35
8 #define NOTE_D1 37
9 #define NOTE_DS1 39
10 #define NOTE_E1 41
11 #define NOTE_F1 44
12 #define NOTE_FS1 46
13 #define NOTE_G1 49
14 #define NOTE_GS1 52
15 #define NOTE_A1 55
16 #define NOTE_AS1 58
17 #define NOTE_B1 62
18 #define NOTE_C2 65
19 #define NOTE_CS2 69
20 #define NOTE_D2 73
21 #define NOTE_DS2 78
22 #define NOTE_E2 82
23 #define NOTE_F2 87
24 #define NOTE_FS2 93
25 #define NOTE_G2 98
26 #define NOTE_GS2 104
27 #define NOTE_A2 110
28 #define NOTE_AS2 117
29 #define NOTE_B2 123
30 #define NOTE_C3 131
31 #define NOTE_CS3 139
32 #define NOTE_D3 147
33 #define NOTE_DS3 156
34 #define NOTE_E3 165
35 #define NOTE_F3 175
36 #define NOTE_FS3 185
37 #define NOTE_G3 196
38 #define NOTE_GS3 208
39 #define NOTE_A3 220
40 #define NOTE_AS3 233
41 #define NOTE_B3 247
42 #define NOTE_C4 262
43 #define NOTE_CS4 277
44 #define NOTE_D4 294
45 #define NOTE_DS4 311
46 #define NOTE_E4 330
47 #define NOTE_F4 349
48 #define NOTE_FS4 370
49 #define NOTE_G4 392
50 #define NOTE_GS4 415
51 #define NOTE_A4 440
52 #define NOTE_AS4 466
53 #define NOTE_B4 494
54 #define NOTE_C5 523
55 #define NOTE_CS5 554
56 #define NOTE_D5 587
57 #define NOTE_DS5 622
58 #define NOTE_E5 659
59 #define NOTE_F5 698
60 #define NOTE_FS5 740
61 #define NOTE_G5 784
62 #define NOTE_GS5 831
63 #define NOTE_A5 880
64 #define NOTE_AS5 932
65 #define NOTE_B5 988
66 #define NOTE_C6 1047
67 #define NOTE_CS6 1109
68 #define NOTE_D6 1175
69 #define NOTE_DS6 1245
70 #define NOTE_E6 1319
71 #define NOTE_F6 1397
72 #define NOTE_FS6 1480
73 #define NOTE_G6 1568
74 #define NOTE_GS6 1661
75 #define NOTE_A6 1760
76 #define NOTE_AS6 1865
77 #define NOTE_B6 1976
78 #define NOTE_C7 2093
79 #define NOTE_CS7 2217
80 #define NOTE_D7 2349
81 #define NOTE_DS7 2489
82 #define NOTE_E7 2637
83 #define NOTE_F7 2794
84 #define NOTE_FS7 2960
85 #define NOTE_G7 3136
86 #define NOTE_GS7 3322
87 #define NOTE_A7 3520
88 #define NOTE_AS7 3729
89 #define NOTE_B7 3951
90 #define NOTE_C8 4186
91 #define NOTE_CS8 4435
92 #define NOTE_D8 4699
93 #define NOTE_DS8 4978
Теперь сохраняем это как pitches.h.
См.также
Внешние ссылки