hw_timer_t *timer = NULL;
bool ledState = false;
void ARDUINO_ISR_ATTR ledToggle() {
digitalWrite(2, ledState);
ledState = !ledState;
}
int huh = 0;
void IRAM_ATTR isrSW1()
{
if(digitalRead(16) == HIGH && digitalRead(4) == LOW)
{
huh =2;
}
else if(digitalRead(16) == LOW && digitalRead(4) == HIGH)
{
huh =1;
}
else if(digitalRead(16) == LOW && digitalRead(4) == LOW)
{
huh =3;
}
else if(digitalRead(16) == HIGH && digitalRead(4) == HIGH)
{
huh =0;
}
}
void IRAM_ATTR isrSW2()
{
if(digitalRead(16) == HIGH && digitalRead(4) == LOW)
{
huh =2;
}
else if(digitalRead(16) == LOW && digitalRead(4) == HIGH)
{
huh =1;
}
else if(digitalRead(16) == LOW && digitalRead(4) == LOW)
{
huh =3;
}
else if(digitalRead(16) == HIGH && digitalRead(4) == HIGH)
{
huh =0;
}
}
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println("Hello, ESP32!");
pinMode(2, OUTPUT);
pinMode(17, OUTPUT); //A
pinMode(5, OUTPUT); //B
pinMode(18, OUTPUT); //C
pinMode(19, OUTPUT); //D
pinMode(21, OUTPUT); //E
pinMode(22, OUTPUT); //F
pinMode(23, OUTPUT); //G
pinMode(4, INPUT_PULLUP); // SW1
pinMode(16, INPUT_PULLUP); // SW1
timer = timerBegin(1000000); //1Mhz
timerAttachInterrupt(timer, &ledToggle);
timerAlarm(timer, 500000, true, 0);
attachInterrupt(4,isrSW1,FALLING);
attachInterrupt(16,isrSW2,FALLING);
}
void showseg(int num,bool real)
{
if(num == 1)
{
if(real)
{
digitalWrite(17, LOW); //A
digitalWrite(5, HIGH); //B
digitalWrite(18, HIGH); //C
digitalWrite(19, LOW); //D
digitalWrite(21, LOW); //E
digitalWrite(23, LOW); //F
digitalWrite(22, LOW);
}
else
{
digitalWrite(17, LOW); //A
digitalWrite(5, LOW); //B
digitalWrite(18, LOW); //C
digitalWrite(19, LOW); //D
digitalWrite(21, LOW); //E
digitalWrite(23, LOW); //F
digitalWrite(22, LOW);
}
}
else if(num == 3)
{
if(real)
{
digitalWrite(17, HIGH); //A
digitalWrite(5, HIGH); //B
digitalWrite(18, HIGH); //C
digitalWrite(19, HIGH); //D
digitalWrite(21, LOW); //E
digitalWrite(23, LOW); //F
digitalWrite(22, HIGH);
}
else
{
digitalWrite(17, LOW); //A
digitalWrite(5, LOW); //B
digitalWrite(18, LOW); //C
digitalWrite(19, LOW); //D
digitalWrite(21, LOW); //E
digitalWrite(23, LOW); //F
digitalWrite(22, LOW);
}
}
else if(num == 2)
{
if(real)
{
digitalWrite(17, HIGH); //A
digitalWrite(5, HIGH); //B
digitalWrite(18, LOW); //C
digitalWrite(19, HIGH); //D
digitalWrite(21, HIGH); //E
digitalWrite(23, LOW); //F
digitalWrite(22, HIGH);
}
else
{
digitalWrite(17, LOW); //A
digitalWrite(5, LOW); //B
digitalWrite(18, LOW); //C
digitalWrite(19, LOW); //D
digitalWrite(21, LOW); //E
digitalWrite(23, LOW); //F
digitalWrite(22, LOW);
}
}
else if(num == 0)
{
if(real)
{
digitalWrite(17, HIGH); //A
digitalWrite(5, HIGH); //B
digitalWrite(18, HIGH); //C
digitalWrite(19, HIGH); //D
digitalWrite(21, HIGH); //E
digitalWrite(23, HIGH); //F
digitalWrite(22, LOW);
}
else
{
digitalWrite(17, LOW); //A
digitalWrite(5, LOW); //B
digitalWrite(18, LOW); //C
digitalWrite(19, LOW); //D
digitalWrite(21, LOW); //E
digitalWrite(23, LOW); //F
digitalWrite(22, LOW);
}
}
}
int counting = 0;
// int huh = 0;
bool doggle = true;
int start = 1000;
int state =0;
void loop() {
long mtimer = millis();
//loop 5 s
if(mtimer - counting >=500)
{
counting = mtimer;
if((state == 1 ) || (state ==2) || (state ==4) || (state ==5) || (state ==7) || (state ==8))
{
showseg(huh,true);
}
else if((state == 3) || (state ==6))
{
showseg(huh,false);
}
else if((state == 9) || (state == 10) || (state == 11) || (state == 12))
{
showseg(huh,false);
}
else if((state == 13) || (state == 15) || (state == 17) || (state == 19) || (state == 21) || (state == 23))
{
//ON 0.5S
showseg(huh,true);
}
else if((state == 14) || (state == 16) || (state == 18) || (state == 20) || (state == 22) || (state == 24))
{
//OFF 0.5F
showseg(huh,false);
}
else if((state == 25) || (state == 26) || (state == 27) || (state == 28))
{
showseg(huh,false);
}
state++;
if(state>=29)
{
state = 1;
}
}
//Loop 2 s
}