bool Cstate[4]={1,1,1,1};
bool btnPressed = 0;
bool bPressed = 0;
byte Col,Row;
byte button;
byte hexaKeys[4][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12},
{13, 14, 15, 16}
};
bool checkBtn(){
for(int i=0;i<4;i++){
//Cstate[i] = digitalRead(i+8); //Check if a collumn is pressed
//if (Cstate[i] == 0){ //If yes
if (!(PINB & (1<<i))){
//Cstate[i] = 1;
Col = i+1; //save col number
bPressed = 1;
for(int i=0;i<4;i++){
PORTD |= (1<<i+4);
//if (digitalRead(Col+7) == 1){ //when the col turns high
if (PINB & (1<<Col-1)){
Row = i+1; //we know the row now, save it
PORTD &= ~(0b11110000);
delay(250);
//break;
goto get_out;
}
}
}
}
get_out:;
}
void setup() {
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, INPUT_PULLUP);
pinMode(9, INPUT_PULLUP);
pinMode(10, INPUT_PULLUP);
pinMode(11, INPUT_PULLUP);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
Serial.begin(115200);
}
void loop() {
unsigned long start = micros();
checkBtn();
unsigned long finish = micros();
if(bPressed == 1){
bPressed = 0;
button = hexaKeys[Row-1][Col-1];
Serial.print(button);
Serial.print(" took ");
Serial.println(finish - start - 250000);
}
switch (button){
case 1:
break;
case 2:
break;
case 3:
break;
case 4:
break;
case 5:
break;
case 6:
break;
case 7:
break;
case 8:
break;
case 9:
break;
case 10:
break;
case 11:
break;
case 12:
break;
case 13:
break;
case 14:
break;
case 15:
break;
case 16:
break;
}
}