#define A 17
#define B 5
#define C 18
#define D 19
#define E 21
#define F 23
#define G 22
hw_timer_t *My_timer = NULL;
int state_led = 0;
int KeyPressesSW1 = 0;
bool statusSW1 = false;
int KeyPressesSW2 = 0;
bool statusSW2 = false;
void IRAM_ATTR onTimer(){
digitalWrite(2,!digitalRead(2));
if((state_led == 0)||(state_led == 1)||(state_led == 4)||(state_led == 5)||(state_led == 8)||(state_led == 9)||(state_led == 14)||(state_led == 16)||(state_led == 18)||(state_led == 20)||(state_led == 22)||(state_led == 24)){
control_7segment();
}else if ((state_led == 2)||(state_led == 3)||(state_led == 6)||(state_led == 7)||(state_led == 10)||(state_led == 11)||(state_led == 12)||(state_led == 13)||(state_led == 15)||(state_led == 17)||(state_led == 19)||(state_led == 21)||(state_led == 23)||(state_led == 25)||(state_led == 26)||(state_led == 27)||(state_led == 28)){
no_blink();
}
state_led++;
if (state_led > 28) {
state_led = 0;
}
}
void IRAM_ATTR isrSW1 (){
KeyPressesSW1 += 1;
statusSW1 = true;
}
void IRAM_ATTR isrSW2 (){
KeyPressesSW2 += 1;
statusSW2 = true;
}
void setup() {
Serial.begin(9600);
pinMode(16, INPUT_PULLUP);
pinMode(4, INPUT_PULLUP);
pinMode(A, OUTPUT);
pinMode(B, OUTPUT);
pinMode(C, OUTPUT);
pinMode(D, OUTPUT);
pinMode(E, OUTPUT);
pinMode(G, OUTPUT);
pinMode(F, OUTPUT);
pinMode(2, OUTPUT);
attachInterrupt(4,isrSW1,FALLING);
attachInterrupt(16,isrSW2,FALLING);
My_timer = timerBegin(0,80,true);
timerAttachInterrupt(My_timer,&onTimer,true);
timerAlarmWrite(My_timer,500000,true);
timerAlarmEnable(My_timer);
}
void loop() {
if(statusSW1){
Serial.printf("SW1 press %u times\n",KeyPressesSW1);
statusSW1=false;
}
if(statusSW2){
Serial.printf("SW2 press %u times\n",KeyPressesSW2);
statusSW2=false;
}
}
void control_7segment(){
if((digitalRead(4)==HIGH)&&(digitalRead(16)==HIGH)){
zero();
}
else if((digitalRead(4)==HIGH)&&(digitalRead(16)==LOW)){
one();
}
else if((digitalRead(4)==LOW)&&(digitalRead(16)==HIGH)){
two();
}
else if((digitalRead(4)==LOW)&&(digitalRead(16)==LOW)){
three();
}
}
void no_blink(void){
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
}
void zero(void){
digitalWrite(A, HIGH);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, HIGH);
digitalWrite(G, LOW);
}
void one(void){
digitalWrite(A, LOW);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
}
void two(void){
digitalWrite(A, HIGH);
digitalWrite(B, HIGH);
digitalWrite(C, LOW);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, LOW);
digitalWrite(G, HIGH);
}
void three(void){
digitalWrite(A, HIGH);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, HIGH);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
digitalWrite(G, HIGH);
}