Различия
Показаны различия между двумя версиями страницы.
Следующая версия | Предыдущая версия | ||
конспект-arduino:мерзкое-пианино [2013/10/08 14:02] – создано perepelkin | конспект-arduino:мерзкое-пианино [2022/01/25 16:31] (текущий) – [Список деталей для эксперимента] mik | ||
---|---|---|---|
Строка 1: | Строка 1: | ||
- | ====== Эксперимент | + | ====== Эксперимент |
- | [[бегущий-огонек|← Бегущий огонёк]] | [[конспект-arduino: | + | [[бегущий-огонек|← Бегущий огонёк]] | [[конспект-arduino: |
- | ---- | + | |
- | В этом эксперименте мы создаем маленькую клавиатуру на которой можно сыграть несколько нот. | + | В этом эксперименте мы создаем маленькую клавиатуру, на которой можно сыграть несколько нот. |
===== Прочтите перед выполнением ===== | ===== Прочтите перед выполнением ===== | ||
- | [[кнопка|Кнопка]] | + | * [[кнопка|Кнопка]] |
===== Список деталей для эксперимента ===== | ===== Список деталей для эксперимента ===== | ||
- | * 1 [[amp> | + | * 1 плата |
- | * 1 [[amp> | + | * 1 беспаечная |
* 1 [[amp> | * 1 [[amp> | ||
* 3 тактовых [[amp> | * 3 тактовых [[amp> | ||
- | * 3 [[amp> | + | * 3 [[amp> |
* 10 проводов [[amp> | * 10 проводов [[amp> | ||
Строка 24: | Строка 24: | ||
===== Принципиальная схема ===== | ===== Принципиальная схема ===== | ||
- | {{ : | + | {{ : |
===== Схема на макетке ===== | ===== Схема на макетке ===== | ||
- | {{ : | + | {{ : |
===== Обратите внимание ===== | ===== Обратите внимание ===== | ||
- | * Ножки тактовой кнопки, | + | * Ножки тактовой кнопки, |
* В данном эксперименте мы подключаем кнопки по [[кнопка|схеме]] с подтягивающим резистором. | * В данном эксперименте мы подключаем кнопки по [[кнопка|схеме]] с подтягивающим резистором. | ||
- | * Для того, чтобы данный вариант программы работал, | + | * Для того, чтобы данный вариант программы работал, |
===== Скетч ===== | ===== Скетч ===== | ||
- | <code cpp > | + | <code cpp p080_dumb_piano.ino> |
+ | #define BUZZER_PIN | ||
+ | #define FIRST_KEY_PIN 7 // первый пин с клавишей (англ. «key») | ||
+ | #define KEY_COUNT | ||
- | </ | + | void setup() |
+ | { | ||
+ | pinMode(BUZZER_PIN, | ||
+ | } | ||
+ | void loop() | ||
+ | { | ||
+ | // в цикле бежим по всем номерам кнопок от 0-го по 2-й | ||
+ | for (int i = 0; i < KEY_COUNT; ++i) { | ||
+ | // на основе номера кнопки вычисляем номер её пина | ||
+ | int keyPin = i + FIRST_KEY_PIN; | ||
+ | |||
+ | // считываем значение с кнопки. Возможны всего 2 варианта: | ||
+ | // * высокий сигнал, | ||
+ | // * низкий сигнал, | ||
+ | boolean keyUp = digitalRead(keyPin); | ||
+ | | ||
+ | // проверяем условие «если не кнопка отпущена». Знак «!» | ||
+ | // перед булевой переменной означает отрицание, | ||
+ | if (!keyUp) { | ||
+ | // рассчитываем высоту ноты в герцах в зависимости от | ||
+ | // клавиши, | ||
+ | // Мы получим значение 3500, 4000 или 4500 | ||
+ | int frequency = 3500 + i * 500; | ||
+ | |||
+ | // Заставляем пищалку пищать с нужной частотой в течение | ||
+ | // 20 миллисекунд. Если клавиша останется зажатой, | ||
+ | // вновь зазвучит при следующем проходе loop, а мы услышим | ||
+ | // непрерывный звук | ||
+ | tone(BUZZER_PIN, | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </ | ||
===== Пояснения к коду ===== | ===== Пояснения к коду ===== | ||
- | * Благодаря тому, что в начале программы мы определили '' | + | * Благодаря тому, что в начале программы мы определили '' |
* цикл в любом случае пробегает от 0 до '' | * цикл в любом случае пробегает от 0 до '' | ||
* перед считыванием порта мы задаем смещение на номер первого используемого порта — '' | * перед считыванием порта мы задаем смещение на номер первого используемого порта — '' | ||
- | * Функция '' | + | * Функция '' |
* Поскольку мы получаем с порта одно из двух состояний, | * Поскольку мы получаем с порта одно из двух состояний, | ||
- | * Мы используем логический оператор отрицания '' | + | * Мы используем логический оператор отрицания |
- | * Поскольку мы собрали схему с подтягивающим резистором, | + | * Поскольку мы собрали схему с подтягивающим резистором, |
+ | * Действия, | ||
===== Вопросы для проверки себя ===== | ===== Вопросы для проверки себя ===== | ||
Строка 66: | Строка 101: | ||
---- | ---- | ||
- | [[бегущий-огонек|← Бегущий огонёк]] | [[конспект-arduino: | + | [[бегущий-огонек|← Бегущий огонёк]] | [[конспект-arduino: |