String Read(){
for(int i = 6; i <= 9; i++){
for(int k = 6; k <= 9; k++){ //set all pins to high
digitalWrite(k, HIGH);
}
//set one of the pins to low
digitalWrite(i, LOW);
for(int j = 2; j <= 5; j++){ //check if any of the pins 2 - 5 are shorted with current "i" pin
if(digitalRead(j) == LOW){
while(digitalRead(j) == LOW){ delay(10); } //wait until button is released
//convert two pin values into actual data from keyboard and return it
if((i == 6) && (j == 2)){ return "1"; }
if((i == 7) && (j == 2)){ return "2"; }
if((i == 8) && (j == 2)){ return "3"; }
if((i == 9) && (j == 2)){ return "A"; }
if((i == 6) && (j == 3)){ return "4"; }
if((i == 7) && (j == 3)){ return "5"; }
if((i == 8) && (j == 3)){ return "6"; }
if((i == 9) && (j == 3)){ return "B"; }
if((i == 6) && (j == 4)){ return "7"; }
if((i == 7) && (j == 4)){ return "8"; }
if((i == 8) && (j == 4)){ return "9"; }
if((i == 9) && (j == 4)){ return "C"; }
if((i == 6) && (j == 5)){ return "*"; }
if((i == 7) && (j == 5)){ return "0"; }
if((i == 8) && (j == 5)){ return "#"; }
if((i == 9) && (j == 5)){ return "D"; }
}
}
delay(5); //a little delay, so our microcontroller wont go crazy
}
return ""; //if no button is pressed, return nothing
}
void setup() {
for(int i = 2; i <= 9; i++){
if((i >= 2) && (i <= 5)){
pinMode(i, INPUT_PULLUP);
} else {
pinMode(i, OUTPUT);
}
}
Serial.begin(115200);
Serial.println("initialization");
}
void loop() {
Serial.print(Read());
delay(10);
}