Матрица кнопок и сдвиговые регистры
- Войдите на сайт для отправки комментариев
Вс, 14/06/2020 - 17:54
Всем привет, помогите пожалуйста разобраться. Имею массив кнопок 6*6 (36 кнопок) и 4 сдвиговых регистра 595. Опрашивая кнопку получаю имя кнопки и нужно на соответствующий этой кнопки вывод сдвиговых регистров подать "1". К сожалению я понятия не имею как это можно сделать.. Код прилагаю.
#include <Keypad.h>
#define clock A0
#define data A1
#define latch A2
const byte ROWS = 6;
const byte COLS = 6;
char keys[ROWS][COLS] = {
{'1', '2', '3', '4', '5', '6'},
{'7', '8', '9', '0', 'a', 'b'},
{'c', 'd', 'e', 'f', 'g', 'h'},
{'i', 'j', 'k', 'l', 'm', 'n'},
{'o', 'p', 'q', 'r', 's', 't'},
{'u', 'v', 'w', 'x', 'y', 'z'}
};
byte rowPins[ROWS] = {13, 12, 11, 10, 9, 8 };
byte colPins[COLS] = {7, 6, 5, 4, 3, 2};
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
void setup() {
Serial.begin(9600);
pinMode(clock, OUTPUT);
pinMode(data, OUTPUT);
pinMode(latch, OUTPUT);
digitalWrite(latch, HIGH);
}
void loop() {
char key = keypad.getKey(); // получаем значение нажатой кнопки
if (key != NO_KEY) {
Serial.println(key); //выводим нажатую кнопку в порт
}
digitalWrite(latch, LOW);
shiftOut(data, clock, LSBFIRST, 0b10101010); // Первый байт
shiftOut(data, clock, LSBFIRST, 0b10101010); // Второй байт
shiftOut(data, clock, LSBFIRST, 0b10101010); // Третий байт
shiftOut(data, clock, LSBFIRST, 0b10101010); // Четвертый байт
digitalWrite(latch, HIGH);
}
Имена кнопок от 0 до Z (36 штук) 4 сдвиговых регистра имеют 32 выхода. Может быть нужно переделать матрицу из 6*6 кнопок в 4*8? Какраз получим 4 байта (строки по 8 бит) и можно будет их по очереди какнибудь записать
Что такое "соответствующий выход"? Каким образом он соответствует?
Я придумал так) начиная от 0 до Z кнопок и от 0 бита нулевого байта до 7 бита 3 байта соответственно
4 байта - это переменная unsigned long. Выставляете в ней "соответствующий" бит.
Далее есть несколько путей. Например - через union соединить длинную переменную и массив в 4 байта. В длинной переменной выставлять бит, массив выводить через shiftout.