#include <SevSeg.h>
SevSeg mySevSeg;
byte colPort[] = {A11, A10, A9, A8};
// Стовпці С1, С2, С3, С4
byte rowPort[] = {A15, A14, A13, A12};
// Рядки R1, R2, R3, R4
char keys[4][4] =
{ {'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
void setup() {
for (uint8_t col = 0; col < 4; col++)
pinMode(colPort[col], INPUT);
for (uint8_t row = 0; row < 4; row++)
pinMode(rowPort[row], INPUT_PULLUP);
byte hardwareConfig = COMMON_CATHODE; // Індикатор з
// загальним катодом
byte numDigits = 4; // Кількість розрядів індикатора
byte digitPins[] = {19, 18, 17, 20}; // Масив портів,
// до яких підключені ланцюги розрядів
byte segmentPins[] = {12, 13, 7, 8, 9, 11, 10, 6};
// Масив портів, до яких підключені
// ланцюги сегментів індикатора
bool resistorsOnSegments = true; // В ланцюгах
// сегментів використовуються резистори
bool updateWithDelays = false; // Алгоритм виведення на
// індикатор без використання затримок
bool leadingZeros = false; // Незначущі нулі в старших
// розрядах не відображаються
bool disableDecPoint = false; // Роздільна крапка
// використовується (не відключена)
mySevSeg.begin(hardwareConfig, numDigits, digitPins,
segmentPins, resistorsOnSegments,
updateWithDelays, leadingZeros,
disableDecPoint);
mySevSeg.blank();
Serial.begin(115200);
Serial.println("Press and hold something on the keyboard");
//Norkov
}
void loop() {
char key = getKey();
if (key != NULL){
char out[] = {key};
mySevSeg.setChars(out);
}else{
mySevSeg.setChars("NULL");
}
mySevSeg.refreshDisplay();
}
char getKey() {
for (uint8_t col = 0; col < 4; col++) {
setCol(col); // Активуємо стовпчик
//delay(1); // Затримка на перехідні процеси
for (uint8_t row = 0; row < 4; row++)
// Перевіряємо усі рядки
if (digitalRead(rowPort[row]) == LOW)
// Якщо кнопка натиснена - повертаємо її символ
return keys[row][col];
}
// Якщо нічого не натиснено - поветаємо нуль
return 0;
}
void setCol(uint8_t newCol) {
for (uint8_t col = 0; col < 4; col++)
// Переводимо усі порти у режим введення
pinMode(colPort[col], INPUT);
// Порт заданої групи налаштовуємо на виведення
pinMode(colPort[newCol], OUTPUT);
// Встановлюємо низький рівень на виході
digitalWrite(colPort[newCol], LOW);
}