#include <SevSeg.h>
#include <Keypad.h>
SevSeg mySevSeg;
const byte rows = 4; // Кількість рядків
const byte cols = 4; // Кількість стовпчиків
// Порти підключення клавіатури:
byte rowPins[rows] = {A15, A14, A13, A12};
// Рядки R1, R2, R3, R4
byte colPins[cols] = {A11, A10, A9, A8};
// Стовпчики С1, С2, С3, С4
char keys[rows][cols] = { // Масив позначень клавіш
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
Keypad myKeypad(*keys, rowPins, colPins, rows, cols);
void setup() {
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);
}
void loop() {
static int number;
char key = myKeypad.getKey();
if (key != NO_KEY) {
if (key >= '0' && key <= '9'){
if (number < 1000) {
if (number >=0) number = number * 10 + (key - '0');
else number = number * 10 - (key - '0');
}
} else {
switch(key){
case '#' : number *= -1; break;
case 'C' : number = 0; break;
case 'D' : number /= 10; break;
}
}
mySevSeg.setNumber(number);
}
mySevSeg.refreshDisplay();
}