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

Arduino:Примеры/Tone2

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

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

Контакты:

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


Звук, реагирующий на изменяющуюся информацию [1]

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

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

  • 8-омовый динамик;
  • Фоторезистор;
  • Резистор на 4700 ом;
  • Резистор на 100 ом;
  • Макетная плата Breadboard;
  • Провода-перемычки;

Цепь

Arduino speaker photocell bb.png

Подсоедините один контакт динамика к 9-ому цифровому контакту (через 100-омовый резистор), а другой – к «земле» (GND). Фоторезистор подсоедините к 5-вольтовому напряжению, а также к 0-ому аналоговому контакту и к «земле» (через 4700-омовый резистор).

Схема

Arduino speaker photocell schem.png

Код

Для этого примера требуется очень простой код. Просто возьмем входные данные с аналогового контакта и разобьем так, чтобы превратить их в нотную гамму. Люди могут слышать звуки частотой от 20 до 20000 Гц, но для этого скетча подойдет и диапазон от 120 до 1500 Гц. Для разбиения входных данных нужно знать их диапазон, и в построенной нами цепи входные данные варьируются от 400 до 1000. Чтобы преобразовать эти данные (идущие от сенсора) в звуковой диапазон, воспользуемся функцией map().

  1. /*
  2.  Звук, реагирующий на изменяющуюся информацию
  3.  
  4.  Проигрывает звук, который меняется в зависимости от изменения данных на входном аналоговом контакте.
  5.  
  6.  Цепь:
  7.  * 8-омовый динамик на 9-ом цифровом контакте
  8.  * фоторезистор, подсоединенный 5 вольтам и 0-ому аналоговому контакту
  9.  * 4700-омовый резистор, подсоединенный к «земле» и 0-ому аналоговому контакту
  10.  
  11.  Создан 21 января 2010,
  12.  модифицирован 31 мая 2012 Томом Иго (Tom Igoe) по совету Майкла Флинна (Michael Flynn)
  13.  
  14. Этот пример кода не защищен авторским правом.
  15.  
  16.  http://arduino.cc/en/Tutorial/Tone2
  17.  
  18.  */
  19.  
  20.  
  21. void setup() {
  22.   // инициализируем последовательную передачу данных (только в целях отладки):
  23.   Serial.begin(9600);
  24. }
  25.  
  26. void loop() {
  27.   // считываем данные с сенсора (т.е. с фоторезистора):
  28.   int sensorReading = analogRead(A0);
  29.   // выводим на Serial Monitor данные от сенсора, чтобы узнать их диапазон:
  30.   Serial.println(sensorReading);
  31.   // сопоставляем диапазон входных аналоговых данных
  32.   // (в данном случае это 400-1000 от фоторезистора)
  33.   // с выходными данными, т.е. со звуковым диапазоном (120-1500 Гц);
  34.   // меняем максимальное и минимальное значения входных данных
  35.   // в зависимости от данных, «пойманных» фоторезистором:
  36.   int thisPitch = map(sensorReading, 400, 1000, 120, 1500);
  37.  
  38.   // проигрываем звук:
  39.   tone(9, thisPitch, 10);
  40.   delay(1);        // делаем задержку между считываниями – для стабильности программы
  41. }

См.также

  1. array
  2. for
  3. tone()
  4. map()
  5. Tone
  6. Simple keyboard
  7. Tone4

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

  1. Arduino - Tone2