#define SW1 4
#define SW2 16
#define A 17
#define B 5
#define C 18
#define D 19
#define E 21
#define F 23
#define G 22
boolean toggle = true;
hw_timer_t *My_timer = NULL;
hw_timer_t *My_timer1 = NULL;
int count = 0;
int KeyPressesSW1 = 0;
bool statusSW1 = false;
int KeyPressesSW2 = 0;
bool statusSW2 = false;
void IRAM_ATTR onTimer() {
digitalWrite(2, !digitalRead(2));
}
void IRAM_ATTR onTimer1() {
if ((count == 0 ) || (count == 1) || (count == 4 ) || (count == 5) || (count == 8 ) || (count == 9) || (count == 14 ) || (count == 16 ) || (count == 18 ) || (count == 20 ) || (count == 22 ) || (count == 24 )) {
if (digitalRead(SW1) == HIGH && digitalRead(SW2) == HIGH && toggle == true) {
zero();
}
if (digitalRead(SW1) == HIGH && digitalRead(SW2) == LOW && toggle == true) {
one();
}
if (digitalRead(SW1) == LOW && digitalRead(SW2) == HIGH && toggle == true) {
two();
}
if (digitalRead(SW1) == LOW && digitalRead(SW2) == LOW && toggle == true) {
three();
}
toggle = !toggle;
}
else if ((count == 2 ) || (count == 3) || (count == 6 ) || (count == 7) || (count == 10 ) || (count == 11) || (count == 12 ) || (count == 13) || (count == 15 ) || (count == 17 ) || (count == 19 ) || (count == 21 ) || (count == 23 ) || (count == 25 ) || (count == 26 ) || (count == 27 ) || (count == 28 )) {
no_blink();
}
count++;
if (count >= 29) {
count = 0 ;
}
}
void IRAM_ATTR isrSW1() {
KeyPressesSW1 += 1;
statusSW1 = true;
}
void IRAM_ATTR isrSW2() {
KeyPressesSW2 += 1;
statusSW2 = true;
}
void setup() {
Serial.begin(115200);
pinMode(SW1, INPUT_PULLUP);
pinMode(SW2, INPUT_PULLUP);
attachInterrupt(SW1, isrSW1, FALLING);
attachInterrupt(SW2, isrSW2, FALLING);
My_timer = timerBegin(0, 80, true);
timerAttachInterrupt(My_timer, &onTimer, true);
timerAlarmWrite(My_timer, 1000000, true);
timerAlarmEnable(My_timer);
My_timer1 = timerBegin(1, 40, true);
timerAttachInterrupt(My_timer1, &onTimer1, true);
timerAlarmWrite(My_timer1, 1000000, true);
timerAlarmEnable(My_timer1);
pinMode(A, OUTPUT);
pinMode(B, OUTPUT);
pinMode(C, OUTPUT);
pinMode(D, OUTPUT);
pinMode(E, OUTPUT);
pinMode(F, OUTPUT);
pinMode(G, OUTPUT);
}
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 no_blink() {
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
}
void zero() {
digitalWrite(A, HIGH);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, HIGH);
digitalWrite(G, LOW);
}
void one() {
digitalWrite(A, LOW);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
}
void two() {
digitalWrite(A, HIGH);
digitalWrite(B, HIGH);
digitalWrite(C, LOW);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, LOW);
digitalWrite(G, HIGH);
}
void three() {
digitalWrite(A, HIGH);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, HIGH);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
digitalWrite(G, HIGH);
}