hw_timer_t *My_timer = NULL;
bool statusSW1 = false;
bool statusSW2 = false;
void IRAM_ATTR onTimer() {
digitalWrite(2, !digitalRead(2));
}
void IRAM_ATTR isrSW1() {
statusSW1 = !statusSW1;
}
void IRAM_ATTR isrSW2() {
statusSW2 = !statusSW2;
}
void setup() {
Serial.begin(9600);
Serial.println("Hello, ESP32!");
pinMode(17, OUTPUT);
pinMode(5, OUTPUT);
pinMode(18, OUTPUT);
pinMode(19, OUTPUT);
pinMode(21, OUTPUT);
pinMode(22, OUTPUT);
pinMode(23, OUTPUT);
pinMode(16, INPUT_PULLUP);
pinMode(4, INPUT_PULLUP);
attachInterrupt(16, isrSW1, CHANGE);
attachInterrupt(4, isrSW2, CHANGE);
pinMode(2, OUTPUT);
My_timer = timerBegin(0, 40000, true);
timerAttachInterrupt(My_timer, &onTimer, true);
timerAlarmWrite(My_timer, 1000, true);
timerAlarmEnable(My_timer);
}
long currentTime = 0;
long LastSaveTime = 0;
bool toogle7Segment = true;
int count = 0;
void loop() {
currentTime = millis();
if(statusSW1==false && statusSW2==false){
if(currentTime-LastSaveTime>=500){
LastSaveTime = currentTime;
if(count<12){
if(count%2==0){
showSevenSegment(0, toogle7Segment);
toogle7Segment = !toogle7Segment;
}
count += 1;
} else if(count>=12 && count<16){
count += 1;
toogle7Segment = false;
showSevenSegment(0, toogle7Segment);
} else if(count>=16 && count<=26){
count += 1;
toogle7Segment = !toogle7Segment;
showSevenSegment(0, toogle7Segment);
} else if(count>=27 && count<=30){
count += 1;
toogle7Segment = false;
showSevenSegment(0, toogle7Segment);
} else {
count = 0;
}
}
} else if(statusSW1==false && statusSW2==true){
if(currentTime-LastSaveTime>=500){
LastSaveTime = currentTime;
if(count<12){
if(count%2==0){
showSevenSegment(1, toogle7Segment);
toogle7Segment = !toogle7Segment;
}
count += 1;
} else if(count>=12 && count<16){
count += 1;
toogle7Segment = false;
showSevenSegment(1, toogle7Segment);
} else if(count>=16 && count<=26){
count += 1;
toogle7Segment = !toogle7Segment;
showSevenSegment(1, toogle7Segment);
} else if(count>=27 && count<=30){
count += 1;
toogle7Segment = false;
showSevenSegment(1, toogle7Segment);
} else {
count = 0;
}
}
} else if(statusSW1==true && statusSW2==false){
if(currentTime-LastSaveTime>=500){
LastSaveTime = currentTime;
if(count<12){
if(count%2==0){
showSevenSegment(2, toogle7Segment);
toogle7Segment = !toogle7Segment;
}
count += 1;
} else if(count>=12 && count<16){
count += 1;
toogle7Segment = false;
showSevenSegment(2, toogle7Segment);
} else if(count>=16 && count<=26){
count += 1;
toogle7Segment = !toogle7Segment;
showSevenSegment(2, toogle7Segment);
} else if(count>=27 && count<=30){
count += 1;
toogle7Segment = false;
showSevenSegment(2, toogle7Segment);
} else {
count = 0;
}
}
} else if(statusSW1==true && statusSW2==true){
if(currentTime-LastSaveTime>=500){
LastSaveTime = currentTime;
if(count<12){
if(count%2==0){
showSevenSegment(3, toogle7Segment);
toogle7Segment = !toogle7Segment;
}
count += 1;
} else if(count>=12 && count<16){
count += 1;
toogle7Segment = false;
showSevenSegment(3, toogle7Segment);
} else if(count>=16 && count<=26){
count += 1;
toogle7Segment = !toogle7Segment;
showSevenSegment(3, toogle7Segment);
} else if(count>=27 && count<=30){
count += 1;
toogle7Segment = false;
showSevenSegment(3, toogle7Segment);
} else {
count = 0;
}
}
}
}
void showSevenSegment(int num, bool status) {
if(num == 0){
if(status == true){
digitalWrite(17, HIGH); //A
digitalWrite(5, HIGH); //B
digitalWrite(18, HIGH); //C
digitalWrite(19, HIGH); //D
digitalWrite(21, HIGH); //E
digitalWrite(22, LOW); //G
digitalWrite(23, HIGH); //F
}else{
digitalWrite(17, LOW); //A
digitalWrite(5, LOW); //B
digitalWrite(18, LOW); //C
digitalWrite(19, LOW); //D
digitalWrite(21, LOW); //E
digitalWrite(22, LOW); //G
digitalWrite(23, LOW); //F
}
}else if(num == 1){
if(status == true){
digitalWrite(17, LOW); //A
digitalWrite(5, HIGH); //B
digitalWrite(18, HIGH); //C
digitalWrite(19, LOW); //D
digitalWrite(21, LOW); //E
digitalWrite(22, LOW); //G
digitalWrite(23, LOW); //F
}else{
digitalWrite(17, LOW); //A
digitalWrite(5, LOW); //B
digitalWrite(18, LOW); //C
digitalWrite(19, LOW); //D
digitalWrite(21, LOW); //E
digitalWrite(22, LOW); //G
digitalWrite(23, LOW); //F
}
}else if(num == 2){
if(status == true){
digitalWrite(17, HIGH); //A
digitalWrite(5, HIGH); //B
digitalWrite(18, LOW); //C
digitalWrite(19, HIGH); //D
digitalWrite(21, HIGH); //E
digitalWrite(22, HIGH); //G
digitalWrite(23, LOW); //F
}else{
digitalWrite(17, LOW); //A
digitalWrite(5, LOW); //B
digitalWrite(18, LOW); //C
digitalWrite(19, LOW); //D
digitalWrite(21, LOW); //E
digitalWrite(22, LOW); //G
digitalWrite(23, LOW); //F
}
}else if(num == 3){
if(status == true){
digitalWrite(17, HIGH); //A
digitalWrite(5, HIGH); //B
digitalWrite(18, HIGH); //C
digitalWrite(19, HIGH); //D
digitalWrite(21, LOW); //E
digitalWrite(22, HIGH); //G
digitalWrite(23, LOW); //F
}else{
digitalWrite(17, LOW); //A
digitalWrite(5, LOW); //B
digitalWrite(18, LOW); //C
digitalWrite(19, LOW); //D
digitalWrite(21, LOW); //E
digitalWrite(22, LOW); //G
digitalWrite(23, LOW); //F
}
}
}