Cat hungry.png
Здравствуйте! Собираем деньги на перевод материалов по электронике(https://www.allaboutcircuits.com/education/). Реквизиты указаны здесь.

Arduino:Примеры/Tone3

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

Перевод: Максим Кузьмин (Cubewriter)
Перевел 2686 статей для сайта.

Контакты:

Проверка/Оформление/Редактирование: Мякишев Е.А.


Простая клавиатура при помощи функции 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

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

  1. Arduino - Tone3