#define A 17
#define B 5
#define C 18
#define D 19
#define E 21
#define F 23
#define G 22
int keyPressSW1 = 0;
bool statusSW1 = false;
int keyPressSW2 = 0;
bool statusSW2 = false;
hw_timer_t *My_timer = NULL;
int led_state = 1;
// state condition
void IRAM_ATTR isrSW1() {
keyPressSW1 += 1;
statusSW1 = true;
}
void IRAM_ATTR isrSW2() {
keyPressSW2 += 1;
statusSW2 = true;
}
void IRAM_ATTR onTimer() {
digitalWrite(2, !digitalRead(2));
if ((led_state == 0) || (led_state == 1) || (led_state == 4) || (led_state == 5) || (led_state == 8) || (led_state == 9) || (led_state == 14) || (led_state == 16) || (led_state == 18) || (led_state == 20) || (led_state == 22) || (led_state == 24)) {
control_7segment();
}
else if ((led_state == 2) || (led_state == 3) || (led_state == 6) || (led_state == 7) || (led_state == 10) || (led_state == 11) || (led_state == 12) || (led_state == 13) || (led_state == 15) || (led_state == 17) || (led_state == 19) || (led_state == 21) || (led_state == 23) || (led_state == 25)|| (led_state == 26)|| (led_state == 27)|| (led_state == 28)) {
no_blink();
}
led_state++;
if (led_state >= 29) {
led_state = 0;
}
}
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(16, INPUT_PULLUP);
pinMode(4, INPUT_PULLUP);
pinMode(A, OUTPUT); //A
pinMode(B, OUTPUT); //B
pinMode(C, OUTPUT); //C
pinMode(D, OUTPUT); //D
pinMode(E, OUTPUT); //E
pinMode(G, OUTPUT); //G
pinMode(F, OUTPUT); //F
// mini led
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", keyPressSW1);
statusSW1 = false;
}
if (statusSW2) {
Serial.printf("SW2 press %u times \n", keyPressSW2);
statusSW2 = false;
}
}
void control_7segment() {
if ((digitalRead(4)) && (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, HIGH);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, HIGH);
digitalWrite(G, HIGH);
}
void zero(void) {
// Zero Blink G off
//L
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
digitalWrite(G, HIGH);
}
void one(void) {
digitalWrite(A, HIGH); //H
digitalWrite(B, LOW); //L
digitalWrite(C, LOW); //L
digitalWrite(D, HIGH); //H
digitalWrite(E, HIGH); //H
digitalWrite(F, HIGH); //H
digitalWrite(G, HIGH); //H
}
void two(void) {
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, HIGH);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, HIGH);
digitalWrite(G, LOW);
}
void three(void) {
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(E, HIGH);
digitalWrite(F, HIGH);
digitalWrite(G, LOW);
}