Implemented blinking for red LED on error

This commit is contained in:
Gunnar Skjold 2020-02-22 17:23:56 +01:00
parent a63e6962d3
commit e90a30bfde

View File

@ -89,7 +89,6 @@ void setup() {
pinMode(LEDPIN_RGB_RED, OUTPUT);
#endif
// Flash the LED, to indicate we can boot as AP now
pinMode(LED_PIN, OUTPUT);
pinMode(AP_BUTTON_PIN, INPUT_PULLUP);
@ -168,6 +167,9 @@ bool even = true;
unsigned long lastRead = 0;
unsigned long lastSuccessfulRead = 0;
unsigned long lastErrorBlink = 0;
int lastError = 0;
void loop() {
unsigned long now = millis();
if (digitalRead(AP_BUTTON_PIN) == LOW) {
@ -196,6 +198,10 @@ void loop() {
lastTemperatureRead = now;
}
if(now > 10000 && now - lastErrorBlink > 3000) {
errorBlink();
}
// Only do normal stuff if we're not booted as AP
if (WiFi.getMode() != WIFI_AP) {
led_off();
@ -228,7 +234,7 @@ void loop() {
else led_off();
}
if(lastRead-now > 100) {
if(now - lastRead > 150) {
yield();
readHanPort();
lastRead = now;
@ -257,6 +263,34 @@ void led_off()
#endif
}
void errorBlink() {
if(lastError == 3)
lastError = 0;
lastErrorBlink = millis();
for(;lastError < 3;lastError++) {
switch(lastError) {
case 0:
if(lastErrorBlink - lastSuccessfulRead > 30000) {
rgb_led(RGB_RED, 2); // If no message received from AMS in 30 sec, blink once
return;
}
break;
case 1:
if(!config.getMqttHost().isEmpty() && mqtt.lastError() != 0) {
rgb_led(RGB_RED, 3); // If MQTT error, blink twice
return;
}
break;
case 2:
if(WiFi.getMode() != WIFI_AP && WiFi.status() != WL_CONNECTED) {
rgb_led(RGB_RED, 4); // If WiFi not connected, blink three times
return;
}
break;
}
}
}
void swapWifiMode() {
led_on();
WiFiMode_t mode = WiFi.getMode();
@ -529,10 +563,14 @@ void rgb_led(int color, int mode) {
break;
}
break;
case 2: //Blink
rgb_led(color, 1);
delay(blinkduration);
rgb_led(color, 0);
default: // Blink
for(int i = 1; i < mode; i++) {
rgb_led(color, 1);
delay(blinkduration);
rgb_led(color, 0);
if(i != mode)
delay(blinkduration);
}
break;
}
}