int blue = 32;
int bluestate = LOW;
int green = 33;
int greenstate = LOW;
int btn = 22;
int grnbtn = 23;
int bluesw = 12;
bool lowbat = false;
int btnpushed = false;
unsigned long previousMillis = 0;
const long ledinterval = 250;
unsigned long bluepreviousMillis = 0;
const long blueledinterval = 3000;
int laststate = HIGH;
int currentstate;
unsigned long btnpressed = 0;
unsigned long btnreleased = 0;
const long btnduration = 500;
const long debounce_interval = 250;
unsigned long dbpreviousMillis = 0;
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println("Hello, ESP32!");
pinMode(blue, OUTPUT);
pinMode(green, OUTPUT);
pinMode(btn, INPUT_PULLUP);
pinMode(grnbtn, INPUT_PULLUP);
pinMode(bluesw, INPUT_PULLUP);
}
void loop() {
// put your main code here, to run repeatedly:
// if (digitalRead(grnbtn) == LOW){
// unsigned long dbcurrentMillis = millis();
// if (dbcurrentMillis - dbpreviousMillis >= debounce_interval){
// dbpreviousMillis = dbcurrentMillis;
currentstate = digitalRead(grnbtn);
if (laststate == HIGH && currentstate == LOW){
btnpressed = millis();
Serial.print("btn pressed: ");
Serial.println(btnpressed);
// btnpushed = true;
}
else if (laststate == LOW && currentstate == HIGH){
btnreleased = millis();
Serial.print("btn released: ");
Serial.println(btnreleased);
long duration = btnreleased - btnpressed;
if(duration > btnduration){
Serial.println("Longpress");
// btnpushed = false;
}
else if(duration < btnduration){
Serial.println("shortpress");
// btnpushed = false;
}
// }
laststate = currentstate;
}
// }
// if (digitalRead(grnbtn) == LOW){
// digitalWrite(green,HIGH);
// delay(50);
// digitalWrite(green,LOW);
// }
if(digitalRead(bluesw) == LOW){
unsigned long bluecurrentmillis = millis();
if(bluecurrentmillis - bluepreviousMillis >= blueledinterval){
digitalWrite(blue,HIGH);
bluepreviousMillis = bluecurrentmillis;
}
}
else{
unsigned long bluecurrentmillis = millis();
if(bluecurrentmillis - bluepreviousMillis >= blueledinterval){
digitalWrite(blue,LOW);
bluepreviousMillis = bluecurrentmillis;
}
}
if (digitalRead(btn) == LOW){
lowbat = true;
}
else{
lowbat = false;
}
if (lowbat == true){
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= ledinterval){
if (bluestate == LOW){
bluestate = HIGH;
greenstate = LOW;
}
else {
greenstate = HIGH;
bluestate = LOW;
}
digitalWrite(blue,bluestate);
digitalWrite(green,greenstate);
previousMillis = currentMillis;
}
else {
digitalWrite(blue,LOW);
digitalWrite(green,LOW);
}
}
}