#include <Keypad.h>
#include <iostream>
#include <string>
String code;
#define ROW_NUM 4
#define COLUMN_NUM 4
char keys[ROW_NUM][COLUMN_NUM] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
uint8_t pin_rows[ROW_NUM] = {22, 21, 19, 18};
uint8_t pin_column[COLUMN_NUM] = {5, 4, 2, 15};
Keypad keypad = Keypad( makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM );
#define LED 23
void optionMessage(){
Serial.println("Choose option:");
Serial.println("* - enter code");
Serial.println("# - show code");
}
void show(){
Serial.println(code);
for(int i=0; i< code.length();i++){
delay(1800);
switch(code[i]){
case '0':
zero();
break;
case '1':
one();
break;
case '2':
two();
break;
case '3':
three();
break;
case '4':
four();
break;
case '5':
five();
break;
case '6':
six();
break;
case '7':
seven();
break;
case '8':
eight();
break;
case '9':
nine();
break;
}
}
}
char choose(){
return keypad.getKey();
}
void inputCode(){
code.clear();
char number;
Serial.println("If you want to finish, you want choose '*'");
do{
number = '\0';
while(number == '\0' ){
number = keypad.getKey();
}
//Serial.println("Selected number:"+ number);
if (number >= '0' && number <= '9') {
code += number;
Serial.println("Current code:" + code);
}
}while(number != '*');
}
void longSignal(){
digitalWrite(LED, HIGH);
delay(1800);
digitalWrite(LED, LOW);
delay(800);
}
void shortSignal(){
digitalWrite(LED, HIGH);
delay(600);
digitalWrite(LED, LOW);
delay(800);
}
void zero(){
// -----
for(int i=1;i<6;i++){
longSignal();
}}
void one(){
// .----
for(int i=1;i<2;i++){
shortSignal();
}
for(int i=1;i<5;i++){
longSignal();
}}
void two(){
// ..---
for(int i=1;i<3;i++){
shortSignal();
}
for(int i=1;i<4;i++){
longSignal();
}}
void three(){
// ...--
for(int i=1;i<4;i++){
shortSignal();
}
for(int i=1;i<3;i++){
longSignal();
}}
void four(){
// ....-
for(int i=1;i<5;i++){
shortSignal();
}
for(int i=1;i<2;i++){
longSignal();
}}
void five(){
// .....
for(int i=1;i<6;i++){
shortSignal();
}}
void six(){
// -....
for(int i=1;i<2;i++){
longSignal();
}
for(int i=1;i<5;i++){
shortSignal();
}}
void seven(){
// --...
for(int i=1;i<3;i++){
longSignal();
}
for(int i=1;i<4;i++){
shortSignal();
}}
void eight(){
// ---..
for(int i=1;i<4;i++){
longSignal();
}
for(int i=1;i<3;i++){
shortSignal();
}}
void nine(){
// ----.
for(int i=1;i<5;i++){
longSignal();
}
for(int i=1;i<2;i++){
shortSignal();
}}
void setup() {
Serial.begin(115200);
Serial.println("Hello, ESP32!");
pinMode(LED, OUTPUT);
pinMode(pin_rows[ROW_NUM], INPUT);
pinMode(pin_column[COLUMN_NUM], INPUT);
}
void loop() {
optionMessage();
char option;
while(true){
option = choose();
switch(option){
case '*':
Serial.println("Enter code:");
inputCode();
break;
case '#':
Serial.println("Show code");
show();
break;
}
}
delay(10);
}