int row_pins[4] = {18,17,16,15};
int col_pins[4] = {7,6,5,4};
int row_ls[4] = {38,37,36,35};
int col_ls[4] = {0,45,48,47};
char key;
char last_key;
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
for(int i=0;i<4;i++){
pinMode(row_pins[i], INPUT_PULLUP);
pinMode(col_pins[i], OUTPUT);
digitalWrite(col_pins[i], HIGH);
}
for(int i=0;i<4;i++){
pinMode(row_ls[i], OUTPUT);
pinMode(col_ls[i], OUTPUT);
digitalWrite(row_ls[i], LOW);
digitalWrite(col_ls[i], LOW);
}
}
void turn_on(int row,int col){
for(int i=0;i<4;i++){
digitalWrite(row_ls[i], HIGH);
digitalWrite(col_ls[i], LOW);
}
if(row >=0) digitalWrite(row_ls[row], LOW);
if(col >=0) digitalWrite(col_ls[col], HIGH);
}
char read_keypad(){
char keys[4][4] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
for(int j =0;j<4;j++){
digitalWrite(col_pins[j], LOW);
for(int i=0;i<4;i++){
if(digitalRead(row_pins[i]) == LOW){
digitalWrite(col_pins[j], HIGH);
turn_on(i,j);
return keys[i][j];
}
}
digitalWrite(col_pins[j], HIGH);
}
return NULL;
}
void loop() {
key = read_keypad();
if(key && (last_key != key)){
last_key = key;
Serial.printf("检测到按键:%c 按下\n",key);
}
}
Loading
esp32-s3-devkitc-1
esp32-s3-devkitc-1