Клавиатура 4*4
- Войдите на сайт для отправки комментариев
Вс, 01/01/2017 - 23:56
Нашёл скетч для проверки работы клавиатуры. По идее каждая кнопка должна вызывать свечение светодиода на 13 пине. но кнопки: 1, 4 , 7, *, 2, 3, А не вызывают его. Подскажите, дело в скетче, подключении, или клавиатура попалась бракованая. Источник скетча http://easymcu.ru/publ/12-1-0-106 .
#define LED 13 // Вывод светодиода #define MATRIX_OUT0 8 /// Выводы матричной клавиатуры #define MATRIX_OUT1 9 #define MATRIX_OUT2 10 #define MATRIX_OUT3 11 #define MATRIX_IN0 A0 // Входы матричной клавиатуры #define MATRIX_IN1 A1 #define MATRIX_IN2 A2 #define MATRIX_IN3 A3 // Пара вспомогательных массивов const unsigned char matrixOutPins[4] = { MATRIX_OUT0, MATRIX_OUT1, MATRIX_OUT2, MATRIX_OUT3 }; const unsigned char matrixInPins[4] = { MATRIX_IN0, MATRIX_IN1, MATRIX_IN2, MATRIX_IN3 }; // Массив состояния кнопок bool keyState[4][4] = { { false, false, false, false }, { false, false, false, false }, { false, false, false, false }, { false, false, false, false } }; void setup() { // Инициализация выводов матричной клавиатуры for (char n = 0; n < 3; ++n) { pinMode(matrixInPins[n], INPUT); pinMode(matrixOutPins[n], OUTPUT); digitalWrite(matrixOutPins[n], LOW); } // Инициализация вывода светодиода pinMode(LED, OUTPUT); } void loop() { updateKeyState(); // Обновить состояние клавиатуры delay(62); // с частотой 16 Гц, чтобы избежать дребезга контактов } void updateKeyState() { for (char n = 0; n < 3; ++n) { // Опрос линии кнопок digitalWrite(matrixOutPins[n], HIGH); for (char nn = 0; nn < 3; ++nn) { // Опрос кнопки в линии bool curState = digitalRead(matrixInPins[n]); if (keyState[n][nn] != curState) { // Если состояние кнопки изменилось, // вызвать функцию-обработчик события keyState[n][nn] = curState; // Скан-код кнопки = (номер линии * 4) + номер кнопки char scanCode = (n << 2) | nn; if (curState) keyPress(scanCode); else keyRelease(scanCode); } } } } // Обработка события Кнопка Нажата void keyPress(char scanCode) { digitalWrite(LED, HIGH); // Вкл. светодиод } // Обработка события Кнопка Отпущена void keyRelease(char scanCode) { digitalWrite(LED, LOW); // Выкл. светодиод }
тю. купи мультиметр и прозвони, что там у тебя бракованое.
а так вы не можете сказать, правильно ли всё подключено и правильно ли написан скетч?
а так вы не можете сказать, правильно ли всё подключено и правильно ли написан скетч?
могу - нанимаешь меня на работу и я тебе каждое 1 января проверяю правильность подключения и написания скетча.
Доброе утро.
Строки 34, 51, 54. Прочему там 3, а не 4? Так и задумано?