Amateur Radio Station R9AL

      Сегодня мы будем создавать устройство, использующее матричную клавиатуру как устройство ввода, а пьезоизлучатель как устройство вывода. Сделаем так, чтобы устройство издавало звук при нажатии на кнопку матричной клавиатуры, пусть каждой кнопке будет назначен свой звук. Больше всего такое устройство напоминает пианино, но довольно странное, так как вместо клавиш - набор кнопок. Возьмем схему из прошлого занятия (см. Урок 10) и добавим к ней пьезоизлучатель, подключив его к выводу 13:



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



За основу возбмем также программу с прошлого занятия, с использованием стандартной библиотеки Keypad.h

В программу нужно будет добавить только одну строчку:
tone(13, (int)customKey*15, 300);


Эта строка будет на выводе 13 создавать тон с частотой (int)customKey*15 и продолжительностью 300 мс. Переменная customKey - символьная переменная (тип char), но (int)customKey возвращает числовое значение (тип int), в соответствии с таблицей ASCII, то есть это значение будет в диапазоне от 35 до 68, а умножение на 15 позволяет получить частоты от 525 до 1020 Гц, что примерно соответствует второй октаве.

Целиком программа будет выглядеть так:

#include < Keypad.h>

const byte ROWS = 4; // четыре строки в матричной клавиатуре
const byte COLS = 4; // четыре колонки в матричной клавиатуре
char hexaKeys[ROWS][COLS] = {  // определяем названия кнопок на клавиатуре
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};
byte rowPins[ROWS] = {9, 8, 7, 6}; // подключаем строки к соответвующим пинам контроллера
byte colPins[COLS] = {5, 4, 3, 2}; // подключаем колонки к соответвующим пинам контроллера


//инициализируем клавиатуру
Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); 

void setup(){
  Serial.begin(9600);
}
  
void loop(){
  char customKey = customKeypad.getKey();
  
  if (customKey){
    Serial.println(customKey);
    tone(13, (int)customKey*15, 300); // 13 - номер вывода к которому подключен пьезоизлучатель
  }
}


Операторы сравнения

Мы уже сталкивались с условным оператором if (см. Урок 8) - этот оператор используется с операторами сравнения. Т.е. задается некоторое условие, и если оно истинно, то выполняются колманлы внутри оператора if, если не выполняется, то программа пропускает этот код.

Условия создаются с помощью операторов сравнения:

x == y (x равно y)

x != y (x не равно y)

x < y (x меньше чем y) 

x > y (x больше чем y)

x <= y (x меньше чем или равно y)

x >= y (x больше чем или равно y)

например условие: (x < 100) - истинно, если x действительно меньше 100, и ложно если x больше или равно 100.

Обратите внимание, на то, что знак простого равенства - это оператор присваивания, и например запись (x = 3) - присвоит значению x новое значение 3. А если нам нужно сравнить переменную x с числом три, то используется двойное равенство, запись (x == 3), проверяет равно ли x трем или нет, не меняя значение переменной x.





Copyright © R9AL 2021 Все права защищены

Рейтинг@Mail.ru Яндекс цитирования