Инструменты пользователя

Инструменты сайта


Это старая версия документа!


Эксперимент 8. Мерзкое пианино

← Бегущий огонёк | Оглавление | Миксер →


В этом эксперименте мы создаем маленькую клавиатуру на которой можно сыграть несколько нот.

Прочтите перед выполнением

Список деталей для эксперимента

Для дополнительного задания

  • еще 2 кнопки
  • еще 2 резистора номиналом 10 кОм
  • еще 2 провода

Принципиальная схема

Схема на макетке

Обратите внимание

  • Ножки тактовой кнопки, расположенные с одной стороны разомкнуты, когда кнопка не нажата. Ножки, расположенные друг напротив друга на противоположных сторонах кнопки, — одна «рельса». Воспользовавшись этим, мы можем расположить резистор с одной стороны макетки, а провод, подключаемый к порту Arduino, с другой стороны.
  • В данном эксперименте мы подключаем кнопки по схеме с подтягивающим резистором.
  • Для того, чтобы данный вариант программы работал, важно, чтобы кнопки были подключены к портам, находящимся рядом друг с другом (имеющим соседние номера).

Скетч

 

Пояснения к коду

  • Благодаря тому, что в начале программы мы определили FIRST_KEY_PIN и KEY_COUNT, мы можем подключать произвольное количество кнопок к любым идущим друг за другом цифровым пинам, и для корректировки программы нам не придется менять параметры цикла for, но только изменить эти константы:
    • цикл в любом случае пробегает от 0 до KEY_COUNT;
    • перед считыванием порта мы задаем смещение на номер первого используемого порта — FIRST_KEY_PIN.
  • Функция digitalRead(pin) возвращает состояние порта, номер которого передан ей параметром pin. Это может быть состояние HIGH или LOW (высокое напряжение или низкое, 1 или 0, true или false).
  • Поскольку мы получаем с порта одно из двух состояний, мы сохраняем его в переменную уже знакомого нам типа boolean, и можем работать с ней как с логическим значением.
  • Мы используем логический оператор отрицания !, «не». Если keyUp имеет значение 0, выражение !keyUp будет иметь значение 1 и наоборот.
  • Поскольку мы собрали схему с подтягивающим резистором, при нажатии кнопки мы будем получать на соответствующем порте 0. Как мы знаем, действия, описанные в условном операторе if выполняются, когда его условие имеет значение «истина», 1, поэтому нужное нам действие будет выполняться при инвертированном значении состояния порта.

Вопросы для проверки себя

  1. Почему мы не настраивали порты, к которым подключены кнопки, как INPUT, но устройство работает?
  2. Каким образом мы избежали написания отдельного когда для чтения каждой кнопки?
  3. Почему разные «ноты», издаваемые пищалкой, звучат с разной громкостью?
  4. Для чего мы использовали оператор логического отрицания !?

Задания для самостоятельного решения

  1. Сделайте так, чтобы наше пианино звучало в диапазоне от 2 кГц до 5 кГц.
  2. Добавьте еще 2 кнопки и измените программу так, чтобы можно было извлечь 5 различных нот.
  3. Подключите кнопки по схеме со стягивающим резистором и измените программу так, чтобы она продолжала работать.

← Бегущий огонёк | Оглавление | Миксер →