Мерзенне піаніно з кнопок та пищалки Buzzer

Звукові модулі та їх особливості, обговорення плеєрів, мікрофонів та підсилювачів звуку, запис та відтворення голосу з допомогою контролерів Ардуіно
Відповісти
Аватар користувача
Arduino
Site Admin
Повідомлень: 98
З нами з: 16 травня 2017 18:18

Мерзенне піаніно з кнопок та пищалки Buzzer

Повідомлення Arduino » 25 травня 2017 18:17

В прикладі ми створюємо маленьку клавіатуру, на якій можна зіграти кілька нот

Ніжки тактовою кнопки, розташовані з одного боку, розімкнуті, коли кнопка не було натиснуто. Ніжки, розташовані одна навпроти одної на протилежних сторонах макетки і знаходяться на одній «рейці». Скориставшись цим, ми можемо розташувати резистор з одного боку макетки, а провід, що підключається до порту Arduino, з іншого боку.
В даному експерименті ми підключаємо кнопки по схемі з підтягуючим резистором.
Для того, щоб даний варіант програми працював, важливо, щоб кнопки були підключені до портів, що знаходяться поруч один з одним, тобто мають сусідні номери.
l8-merzkoe-pianino1.jpg
#define BUZZER_PIN 13 // пін з пищалки (англ. «buzzer»)
#define FIRST_KEY_PIN 7 // перший пін з клавішею (англ. «key»)
#define KEY_COUNT 3 // загальна кількість клавіш

недійсні установки ( )
{
pinMode ( BUZZER_PIN, OUTPUT ) ;
}

void loop ( )
{
// в циклі біжимо по всіх номерах кнопок від 0-го по 2-й
for ( int i = 0 ; i < KEY_COUNT ; ++ i ) {
// на основі номера кнопки обчислюємо номер її Піна
int keyPin = i + FIRST_KEY_PIN ;

// зчитуємо значення з кнопки. Можливі всього 2 варіанти:
// * високий сигнал, 5 вольт, істина - кнопка відпущена
// * низький сигнал, земля, брехня - кнопка затиснута
boolean keyUp = digitalRead ( keyPin ) ;

// перевіряємо умова «якщо не кнопка відпущена». Знак «!»
// перед булевої змінної означає заперечення, тобто «Не».
if ( ! keyUp ) {
// розраховуємо висоту ноти в герцах в залежності від
// клавіші, яку розглядаємо на даному етапі циклу.
// Ми отримаємо значення 3500, 4000 або 4500
int frequency = 3500 + i * 500 ;

// Змушуємо пискавку пищати з потрібною частотою протягом
// 20 мілісекунд. Якщо клавіша залишиться затиснутою, пищалка
// знову зазвучить при наступному проході loop, а ми почуємо
// безперервний звук
tone ( BUZZER_PIN, frequency, 20 ) ;
}
}
}
Тлумачення коду скетчу
  • Завдяки тому, що на початку програми ми визначили 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, виконуються, коли його умова має значення «істина» (одиниця). Тому для виконання дії після натискання, ми інвертуємо сигнал з кнопки.

Відповісти

Повернутись до “Звук та ультразвук”