// Display keypad entry on single seven segment LED
#include <Keypad.h> // https://github.com/Chris--A/Keypad
const byte COLS = 3;
const byte ROWS = 4;
char keys[ROWS][COLS] = {
{ '1', '2', '3' },
{ '4', '5', '6' },
{ '7', '8', '9' },
{ '*', '0', '#' },
};
byte colpins[] = { 15, 16, 17 };
byte rowpins[] = { 11, 12, 13, 14 };
Keypad keypad = Keypad(makeKeymap(keys), rowpins, colpins, ROWS, COLS);
int segpins[] = { 2, 3, 4, 5, 6, 7, 8, 9 }; // A, B, C, D, E, F, G, dp
int segbits[] = { 0x03, 0x9F, 0x25, 0x0D, // 0, 1, 2, 3
0x99, 0x49, 0x41, 0x1F, // 4, 5, 6, 7
0x01, 0x19, 0x39, 0xBB // 8, 9, *, #
}; // COMMON ANODE = ACTIVE LOW
unsigned long leddischargetime = 100; // time for LEDs to discharge
void setup() {
for (byte i = 2; i < 10; i++)
pinMode(i, OUTPUT); // sevseg LED pins
clearLEDs();
}
void loop() {
int key = keypad.getKey();
if (key) {
clearLEDs();
if (key == '*') key = 58; // add 16 to ASCII 42
if (key == '#') key = 59; // add 14 to ASCII 35
key = key - 48; // ASCII to DEC
for (byte i = 0; i < 8; i++) {
digitalWrite(segpins[i], bitRead(segbits[key], 7 - i));
}
}
}
void clearLEDs() {
for (byte i = 2; i < 10; i++)
digitalWrite(i, HIGH); // clear sevseg display
delay(leddischargetime);
}