Наиболее популярные клавиатуры для Arduino – 16-ти кнопочные. Они позволяют опрашивать16 кнопок всего лишь 8-ю пинами. Используются обычно в проектах с вводом чисел: калькуляторах, кодовых замках. Наиболее распространены два варианта(в данной статье рассказывается о левом варианте, ссылка на правый http://umnaya-elektronika.ru/market/5/modul_klavia... ): Данная клавиатура(Рис 1) представляет собой матрицу кнопок, то есть кнопки стоящие на пересечении проводов (в этом случае – дорожек, их можно видеть на плате). Схема представлена ниже. Она построена на тактовых кнопках и включает в себя все их достоинства и недостатки(дребезг, характерные щелчки). Рис.1 Рис.2 Алгоритм работы с такой матрицей(Рис1.) следующий: Назначаем пины 1-4 на выход, а 5-8 на вход, создаем двухмерный массив типа char и вносим в него символы или числа. Соответсвующие нашим кнопкам. Подаем на первый пин логический 0, записываем его в переменную, на 2,3,4 – логическую 1 Считываем сигнал с 5-го пина, если 0, то записываем его в переменную, если 1, то перебираем 6,7и 8 пины с тем же условием Так мы выясним, нажата ли какая-нибудь кнопка в 1-ом столбце. 0 на 5-ом пине соответствует нажатая кнопка 1-го столбца 1-ой строки, 0 на 6-ом – нажатая кнопка 1-го столбца 2-ой строки и т.д. Повторяем операции 2) и 3) для 2,3 и 4 пинов В результате получим координаты кнопки: 1-я переменная хранит номер столбца, 2-я переменная хранит номер строки. Записываем эти переменные в массив как аргументы и получаем символ или число соответствующее нажатой кнопке. ПРИМЕР ПРОГРАММЫ: int PinOut[4] {5, 4, 3, 2}; // пины выходы int PinIn[4] {9, 8, 7, 6}; // пины входа int val = 0; const char value[4][4] { {'1', '4', '7', '*'}, {'2', '5', '8', '0' }, {'3', '6', '9', '#'}, {'A', 'B', 'C', 'D'} }; // двойной массив, обозначающий кнопку int b = 0; // переменная, куда кладется число из массива(номер кнопки) void setup() { pinMode (2, OUTPUT); // инициализируем порты на выход (подают нули на столбцы) pinMode (3, OUTPUT); pinMode (4,