Матрица кнопок и сдвиговые регистры
- Войдите на сайт для отправки комментариев
Вс, 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.