//original code from :https://www.youtube.com/watch?v=ycV1cP_anvI
#include<stdio.h>
#include<stdlib.h>
//byte row_val = b000000001;
char key_val;
char *key_val_2;
const char key[4][4]={{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}};
void row_selection(char *key_select);
char keySelect(int row, byte col);
int char_To_int(const char *str);
void setup() {
DDRB |= 0x0F; // 4 ultimos bits del puerto B como salida 00001111 last 4 bit of PORTB as output 00001111 (se usa el MSB desde el bit 0 al bit 3 )
DDRC |= 0xF0; // 4 ultimos bits del puerto C como entrada 11110000
Serial.begin(9600);
}
void loop() {
row_selection(&key_val);
//*key_val_2 = key_val;
//Serial.print(key_val);
//const char *str = key_val;
//char_To_int(str);
/*
PORTB |= 0x0F;
Serial.println(PORTB,BIN);
delay(1000);
PORTB &= 0x00;
//PORTB |= 0x0F;
Serial.println(PORTB,BIN);
delay(1000);
*/
}
int char_To_int(const char *str){
//const char *str = "12345";
int x;
sscanf(str, "%d", &x);
Serial.println(x,BIN);
return x;
}
void row_selection(char *key_select){
for(int i=0; i<4; i++){
//Serial.print("pinc ");
//Serial.println(PINC);
PORTB &= 0x00;
PORTB |= ( 1 << i );
/*Serial.print("portB ");
Serial.println(PORTB,BIN);*/
//Serial.println(PINC);
if((PINC & 0x0F)>=1){
delay(10);
//Serial.println("key press " );
//Serial.println(PINC);
*key_select = keySelect(i,PINC);
char_To_int(key_select);
Serial.print("key ");
Serial.println(*key_select);
while((PINC&0x0F)>=1){
//Serial.println("inside while");
if((PINC == 0)){
return;
}
}
//return key_select ;
}
//delay(10);
}
// return key_select ;
}
char keySelect(int row, byte col){
char key_Val ;
switch(col){
case 1:
//Serial.println((key[row][0]));
key_Val= key[row][0];
break;
case 2:
//Serial.println(key[row][1]);
key_Val = key[row][1];
break;
case 4:
//Serial.println(key[row][2]);
key_Val = key[row][2];
break;
case 8:
// Serial.println(key[row][3]);
key_Val = key[row][3];
break;
default:
//return ;
break;
}
return key_Val;
}