Клавиатура 4*4

cls
Offline
Зарегистрирован: 31.12.2016

Нашёл скетч для проверки работы клавиатуры.  По идее каждая кнопка должна вызывать свечение светодиода на 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); // Выкл. светодиод
}
 

Клапауций 234
Offline
Зарегистрирован: 24.10.2016

тю. купи мультиметр и прозвони, что там у тебя бракованое.

cls
Offline
Зарегистрирован: 31.12.2016

а так вы не можете сказать, правильно ли всё подключено и правильно ли написан скетч?

Клапауций 234
Offline
Зарегистрирован: 24.10.2016

cls пишет:

а так вы не можете сказать, правильно ли всё подключено и правильно ли написан скетч?

могу - нанимаешь меня на работу и я тебе каждое 1 января проверяю правильность подключения и написания скетча.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Доброе утро.

Строки 34, 51, 54. Прочему там 3, а не 4? Так и задумано?