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

Arduino:Примеры/Tone

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

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

Контакты:

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


Проигрывание мелодии с помощью функции Tone [1]

Данный пример показывает, как генерировать звуки при помощи функции tone(). Мелодия, запрограммированная при помощи этого скетча, возможно, покажется вам очень знакомой.

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

  • Плата Arduino;
  • Пьезодинамик;
  • Провода-перемычки;

Цепь

TonePiezo.png

Схема

Arduino exm Tone Schematic 1.png

Код

В данном скетче используется дополнительный файл – 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 в правом верхнем углу окна. Она выглядит следующим образом:

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

Теперь сохраняем это как pitches.h.

См.также

  1. array
  2. for
  3. tone()
  4. Pitch follower
  5. Simple keyboard

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

  1. Arduino - Tone