Клавиатура 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? Так и задумано?