Arduino:Примеры/Tone3

Материал из Онлайн справочника
Перейти к навигации Перейти к поиску

Перевод: Максим Кузьмин (Cubewriter) Перевел 364226 статей для сайта.</br>Контакты:</br>* Skype: cubewriter</br>* E-mail: cubewriter@gmail.com</br>* Максим Кузьмин на freelance.ru
Проверка/Оформление/Редактирование: Мякишев Е.А.


Простая клавиатура при помощи функции Tone [1]

Этот пример показывает, как использовать функцию tone() для генерации разных звуков при нажатии на разные силоизмерительные сенсоры.

Необходимое оборудование

  • 8-омовый динамик;
  • Три силоизмерительных резистора;
  • Три 10000-омовых резистора;
  • Один 100-омовый резистор;
  • Макетная плата Breadboard;
  • Провода-перемычки;

Цепь

Подсоединяем один контакт динамика к 8-ому цифровому контакту (через 100-омовый резистор), а другой – к «земле» (GND). Три силоизмерительных резистора (или любые другие аналоговые сенсоры) параллельно подключаем к 5-вольтовому напряжению. Каждый резистор подключаем к аналоговому контакту (0-ому, 1-ому и 2-ому, соответственно) и на тех же линиях (на Breadboard) ставим 10000-омовые резисторы, соединенные с «землей».

Arduino fsrs speaker bb.png

Схема

Arduino fsrs speaker schem.png

Код

Этот скетч считывает данные, идущие от трех сенсоров, подключенных к аналоговым контактам Arduino. Каждый сенсор соответствует определенной ноте. Если нажатие на сенсор превысит заданное пороговое значение, он проиграет ноту.

 1 /*
 2   Клавиатура
 3  
 4  Проигрывает звук, изменяющийся в зависимости от изменения входных данных, считанных на аналоговых контактах. 
 5  
 6  Цепь:
 7  * Три силоизмерительных резистора, подключенные к 0-ому, 1-ому и 2-ому аналоговым контактам и 5-вольтовому напряжению
 8  * Три 10000-омовых резистора, подключенные к 0-ому, 1-ому и 2-ому аналоговым контактам и «земле» 
 9  * 8-омовый динамик, подключенный к 8-ому цифровому контакту
10  
11  Создан 21 января 2010,
12  модифицирован 9 апреля 2012 Томом Иго (Tom Igoe)
13 
14 Этот пример кода не защищен авторским правом.
15  
16  http://arduino.cc/en/Tutorial/Tone3
17  
18  */
19 
20 #include "pitches.h"
21 
22 const int threshold = 10;    // задаем минимальное пороговое значение при нажатии на кнопку (если это значение будет преодолено, сенсор проиграет звук)
23 
24 // задаем ноты, которые будут проигрываться, 
25 // а также их соответствие трем силоизмерительным сенсорам:
26 int notes[] = {
27   NOTE_A4, NOTE_B4,NOTE_C3 };
28 
29 void setup() {
30 
31 }
32 
33 void loop() {
34   for (int thisSensor = 0; thisSensor < 3; thisSensor++) {
35     // считываем данные с сенсора:
36     int sensorReading = analogRead(thisSensor);
37 
38     // если на сенсор нажали достаточно сильно:
39     if (sensorReading > threshold) {
40       // проигрываем ноту, соответствующую этому сенсору:
41       tone(8, notes[thisSensor], 20);
42     } 
43   }
44 }

Скетч использует дополнительный файл – pitches.h. Этот файл содержит все необходимые значения, соответствующие стандартным нотам. К примеру, NOTE_C4 – это среднее «до», а NOTE_FS4 – это «фа-диез» и т.д. Этот нотный «алфавит» был впервые написан Бреттом Хэгменом (Brett Hagman), и в основе функции tone() лежит как раз эта его работа. Она может пригодиться для любого случая, где используются музыкальные ноты. Чтобы создать этот файл, кликните по кнопке New Tab в правом верхнем углу окна. Она выглядит следующим образом:

NewTab.png

Вставьте туда вот этот код:

 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

См.также

  1. array
  2. for
  3. tone()
  4. Tone
  5. Pitch follower
  6. Tone4

Внешние ссылки