/* selecting A-D selects the digit, automatically digit 4
once a number is pressed it becomes the number that is pressed
pressing '*' clears all digits and resets to digit 4
pressing '#' does nothing
*/
#include <Keypad.h> //keypad library by Mark Stanley and Alexander Brevig
#define A 2
#define B 3
#define C 4
#define D 5
#define E 14
#define F 15
#define G 16
#define D1 17
#define D2 18
#define D3 19
#define D4 20
char dig = D4;
const byte ROWS = 4; //four rows on the keypad
const byte COLS = 4; //four columns on the keypad
char hexaKeys[ROWS][COLS] = { //matrix that mimics the keypad
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte rowPins[ROWS] = {10, 11, 12, 13}; //define the pins connected to each row
byte colPins[COLS] = {6, 7, 8, 9}; //define the pins connected to each column
Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); //create keypad object
void setup() {
Serial.begin(9600); //start serial communication
for (int i = 2; i < 6; i++) pinMode(i, OUTPUT);
for (int i = 14; i < 17; i++) pinMode(i, OUTPUT);
off(); //clear display
}
void loop() {
char Key = customKeypad.getKey(); //read key that is pressed
if (Key) { //if a key is pressed
Serial.println(Key); //print the key in serial communication
switch (Key) {
case '0':
dig_select();
zero();
break;
case '1':
dig_select();
one();
break;
case '2':
dig_select();
two();
break;
case '3':
dig_select();
three();
break;
case '4':
dig_select();
four();
break;
case '5':
dig_select();
five();
break;
case '6':
dig_select();
six();
break;
case '7':
dig_select();
seven();
break;
case '8':
dig_select();
eight();
break;
case '9':
dig_select();
nine();
break;
case 'A':
dig = D1;
break;
case 'B':
dig = D2;
break;
case 'C':
dig = D3;
break;
case 'D':
dig = D4;
break;
case '*':
for (int i = 17; i < 21; i++){
digitalWrite(i,HIGH);
}
off();
dig = D4;
dig_select();
break;
}
}
}
void off() {
digitalWrite(A, HIGH);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, HIGH);
digitalWrite(G, HIGH);
}
void one() {
digitalWrite(A, HIGH);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, HIGH);
digitalWrite(G, HIGH);
}
void two() {
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, HIGH);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, HIGH);
digitalWrite(G, LOW);
}
void three() {
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(E, HIGH);
digitalWrite(F, HIGH);
digitalWrite(G, LOW);
}
void four() {
digitalWrite(A, HIGH);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
}
void five() {
digitalWrite(A, LOW);
digitalWrite(B, HIGH);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(E, HIGH);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
}
void six() {
digitalWrite(A, LOW);
digitalWrite(B, HIGH);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
}
void seven() {
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, HIGH);
digitalWrite(G, HIGH);
}
void eight() {
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
}
void nine() {
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(E, HIGH);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
}
void zero() {
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
digitalWrite(G, HIGH);
}
void printA() {
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, HIGH);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
}
void printC() {
digitalWrite(A, LOW);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
digitalWrite(G, HIGH);
}
void dig_select() {
for (int i = 17; i < 21; i++) {
digitalWrite(i, LOW); //turn all digits off
}
digitalWrite(dig, HIGH); //turn current dig on
}