Merge pull request #38 from ArnieO/dev-v1.1.0

Added code for optional RGB LED
This commit is contained in:
Gunnar Skjold 2020-02-22 16:42:19 +01:00 committed by GitHub
commit a63e6962d3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 66 additions and 4 deletions

View File

@ -33,7 +33,7 @@ AmsConfiguration config;
AmsWebServer ws;
WiFiClient *client;
MQTTClient mqtt(512);
MQTTClient mqtt(384);
Stream* debugger = NULL;
@ -83,6 +83,12 @@ void setup() {
ESP.deepSleep(10000000); //Deep sleep to allow output cap to charge up
}
#if HAS_RGB_LED
// Initialize RGB LED pins
pinMode(LEDPIN_RGB_GREEN, OUTPUT);
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);
@ -137,6 +143,15 @@ void setup() {
}
ws.setup(&config, debugger, &mqtt);
#if HAS_RGB_LED
//Signal startup by blinking red / green / yellow
rgb_led(RGB_RED, 2);
delay(250);
rgb_led(RGB_GREEN, 2);
delay(250);
rgb_led(RGB_YELLOW, 2);
#endif
}
int buttonTimer = 0;
@ -286,7 +301,11 @@ void readHanPort() {
lastSuccessfulRead = millis();
if(config.getMeterType() > 0) {
led_on();
#if HAS_RGB_LED
rgb_led(RGB_GREEN, 1);
#else
led_on();
#endif
AmsData data(config.getMeterType(), hanReader);
ws.setData(data);
@ -306,7 +325,12 @@ void readHanPort() {
mqtt.loop();
delay(10);
}
led_off();
#if HAS_RGB_LED
rgb_led(RGB_GREEN, 0);
#else
led_off();
#endif
} else {
// Auto detect meter if not set
for(int i = 1; i <= 3; i++) {
@ -475,4 +499,40 @@ void sendMqttData(String data)
if (debugger) debugger->println(data);
}
void rgb_led(int color, int mode) {
// Activate red and green LEDs
// color: 1=red, 2=green, 3=yellow
// mode: 0=OFF, 1=ON, 2=Short blink
#ifndef HAS_RGB_LED
#define LEDPIN_RGB_RED LED_PIN
#define LEDPIN_RGB_GREEN LED_PIN
#endif
int blinkduration = 50; // milliseconds
switch (mode) {
case 0: //OFF
digitalWrite(LEDPIN_RGB_RED, HIGH);
digitalWrite(LEDPIN_RGB_GREEN, HIGH);
break;
case 1: //ON
switch (color) {
case 1: //Red
digitalWrite(LEDPIN_RGB_RED, LOW);
digitalWrite(LEDPIN_RGB_GREEN, HIGH);
break;
case 2: //Green
digitalWrite(LEDPIN_RGB_RED, HIGH);
digitalWrite(LEDPIN_RGB_GREEN, LOW);
break;
case 3: //Yellow
digitalWrite(LEDPIN_RGB_RED, LOW);
digitalWrite(LEDPIN_RGB_GREEN, LOW);
break;
}
break;
case 2: //Blink
rgb_led(color, 1);
delay(blinkduration);
rgb_led(color, 0);
break;
}
}

View File

@ -35,6 +35,7 @@ void AmsWebServer::loop() {
server.handleClient();
}
void AmsWebServer::setData(AmsData& data) {
this->data.apply(data);

View File

@ -29,6 +29,7 @@ class AmsWebServer {
public:
void setup(AmsConfiguration* config, Stream* debugger, MQTTClient* mqtt);
void loop();
void setData(AmsData& data);
private: