Матрица кнопок и сдвиговые регистры

22580
Offline
Зарегистрирован: 20.09.2016

Всем привет, помогите пожалуйста разобраться. Имею массив кнопок 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);
}

 

22580
Offline
Зарегистрирован: 20.09.2016

Имена кнопок от 0 до Z (36 штук) 4 сдвиговых регистра имеют 32 выхода. Может быть нужно переделать матрицу из 6*6 кнопок в 4*8? Какраз получим 4 байта (строки по 8 бит) и можно будет их по очереди какнибудь записать 

sadman41
Offline
Зарегистрирован: 19.10.2016

Что такое "соответствующий выход"? Каким образом он соответствует?

22580
Offline
Зарегистрирован: 20.09.2016

Я придумал так) начиная от 0 до Z кнопок и от 0 бита нулевого байта до 7 бита 3 байта соответственно

sadman41
Offline
Зарегистрирован: 19.10.2016

4 байта - это переменная unsigned long. Выставляете в ней "соответствующий" бит.
Далее есть несколько путей. Например - через union соединить длинную переменную и массив в 4 байта. В длинной переменной выставлять бит, массив выводить через shiftout.