From 9996ecea4476ea571c4f9a23cc49af4313f61520 Mon Sep 17 00:00:00 2001 From: Willem Oldemans Date: Mon, 30 May 2022 19:31:54 +0200 Subject: [PATCH] update mqtt --- .vscode/extensions.json | 17 ++-- platformio.ini | 2 - src/led.cpp | 217 +++++++++++++++++++++++++++++----------- src/led.h | 18 +++- src/mqtt.cpp | 2 +- 5 files changed, 183 insertions(+), 73 deletions(-) diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 0f0d740..080e70d 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -1,7 +1,10 @@ -{ - // See http://go.microsoft.com/fwlink/?LinkId=827846 - // for the documentation about the extensions.json format - "recommendations": [ - "platformio.platformio-ide" - ] -} +{ + // See http://go.microsoft.com/fwlink/?LinkId=827846 + // for the documentation about the extensions.json format + "recommendations": [ + "platformio.platformio-ide" + ], + "unwantedRecommendations": [ + "ms-vscode.cpptools-extension-pack" + ] +} diff --git a/platformio.ini b/platformio.ini index 91cf35c..ed11374 100644 --- a/platformio.ini +++ b/platformio.ini @@ -13,8 +13,6 @@ platform = espressif32 board = esp32dev framework = arduino monitor_speed = 115200 - lib_deps = - erropix/ESP32 AnalogWrite@^0.2 Aasim-A/AsyncTimer diff --git a/src/led.cpp b/src/led.cpp index 24cf355..16b954c 100644 --- a/src/led.cpp +++ b/src/led.cpp @@ -5,17 +5,19 @@ uint64_t lastmillis = 0; //_led ledarray[] = { -c_led dimFL(DIM_FL, "dim_FL"); -c_led dimFR(DIM_FR, "dim_FR"); -c_led dimRL(DIM_RL, "dim_RL"); -c_led dimRR(DIM_RR, "dim_RR"); -c_led blinkFL(BLINK_FL, "blink_FL"); -c_led blinkFR(BLINK_FR, "blink_FR"); -c_led interiourLed(INTERIOUR, "interiour"); +c_led dimFL(DIM_FL, "dim_FL", 0); +c_led dimFR(DIM_FR, "dim_FR", 1); +c_led dimRL(DIM_RL, "dim_RL", 2); +c_led dimRR(DIM_RR, "dim_RR", 3); +c_led blinkFL(BLINK_FL, "blink_FL", 4); +c_led blinkFR(BLINK_FR, "blink_FR", 5); +c_led interiourLed(INTERIOUR, "interiour", 6); void c_led::begin(void) { Serial.printf("LED %s begin", _ledName.c_str()); + ledcSetup(_PWMChannel, DIM_FPWM, DIM_RESBITS); + ledcAttachPin(_pin, _PWMChannel); pinMode(_pin, OUTPUT); digitalWrite(_pin, false); _ledstate = false; @@ -30,7 +32,7 @@ void c_led::setState(e_ledstate newstate) _timer = 0; Serial.printf("led %s: setstate %s\n", _ledName.c_str(), ledStateToString(newstate).c_str()); } - if(newstate == led_blink) + if (newstate == led_blink) { _ledstate = false; } @@ -55,58 +57,155 @@ void c_led::init() //_newstate = true; } +void c_led::handle_dim_on(void) +{ + if (_newstate) + { + if (_ledstate) + { + setState(led_on); + } + else + { + _timer = millis(); + _newstate = false; + } + } + uint64_t currentmillis = millis(); + if (currentmillis - _timer > _dimstepms) + { + _timer = currentmillis; + ledcWrite(_PWMChannel, _dimmer); + _dimmer += _dimstep; + } + if (_dimmer > DIM_MAX) + { + setState(led_on); + _dimmer = DIM_MAX; + } +} + +void c_led::handle_dim_off(void) +{ + if (_newstate) + { + if (!_ledstate) + { + setState(led_off); + } + else + { + _timer = millis(); + _newstate = false; + } + _timer = millis(); + _newstate = false; + } + uint64_t currentmillis = millis(); + if (currentmillis - _timer > _dimstepms) + { + _timer = currentmillis; + ledcWrite(_PWMChannel, _dimmer); + _dimmer -= _dimstep; + } + if (_dimmer < _dimstep) + { + setState(led_off); + _dimmer = DIM_MIN; + } +} +void c_led::handle_blink(void) +{ + _newstate = false; + uint64_t currentmillis = millis(); + if (currentmillis - _timer > BLINKSPEED) + { + _ledstate = !_ledstate; + if (_ledstate) + { + _dimmer = DIM_MIN; + } + else + { + _dimmer = DIM_MAX; + } + _timer = currentmillis; + //Serial.printf("led %s update, state = %s\n", _ledName.c_str(), String(_ledstate).c_str()); + } + + if (_ledstate) + { + + if (_dimmer >= DIM_MAX) + { + _dimmer = DIM_MAX; + } + else + { + if (currentmillis - _timer2 > 5) + { + _dimmer += 64; + _timer2 = currentmillis; + } + //Serial.printf("led %s update, dimmer = %u\n", _ledName.c_str(), _dimmer); + } + } + else + { + if (_dimmer <= DIM_STEP) + { + _dimmer = DIM_MIN; + } + else + { + //Serial.printf("led %s update, dimmer = %u\n", _ledName.c_str(), _dimmer); + if (currentmillis - _timer2 > 5) + { + _dimmer -= 64; + _timer2 = currentmillis; + } + } + } + ledcWrite(_PWMChannel, _dimmer); +} + void c_led::update(void) { - //Serial.printf("led %s update, state = %s, newstate = %s\n", _ledName.c_str(), ledStateToString(_state).c_str(), String(_newstate).c_str()); + if (_newstate) + { + Serial.printf("led %s update, state = %s\n", _ledName.c_str(), ledStateToString(_state).c_str()); + } switch (_state) { case led_off: { - digitalWrite(_pin, false); + //digitalWrite(_pin, false); _ledstate = false; + ledcWrite(_PWMChannel, DIM_MIN); + _newstate = false; } break; case led_dim_on: { - if (_newstate) - { - _dimmer = 0; - _timer = millis(); - _newstate = false; - } - uint64_t currentmillis = millis(); - if (currentmillis - _timer > _dimstepms) - { - _timer = currentmillis; - analogWrite(_pin, _dimmer, DIM_RES); - _dimmer += _dimstep; - } - if (_dimmer > DIM_RES) - { - setState(led_on); - } + handle_dim_on(); } break; case led_on: { - digitalWrite(_pin, true); + //digitalWrite(_pin, true); + ledcWrite(_PWMChannel, DIM_MAX); _newstate = false; _ledstate = true; } + break; case led_dim_off: { + handle_dim_off(); } break; case led_blink: { - uint64_t currentmillis = millis(); - if (currentmillis - _timer > BLINKSPEED) - { - //Serial.printf("%s timer expired\n", _ledName.c_str()); - _ledstate = !_ledstate; - digitalWrite(_pin, _ledstate); - _timer = currentmillis; - } + handle_blink(); } break; default: @@ -122,16 +221,16 @@ void c_led::toggle(void) { case led_on: - setState(led_off); + setState(led_dim_off); break; case led_dim_on: - setState(led_off); + setState(led_dim_off); break; case led_off: - setState(led_on); + setState(led_dim_on); break; case led_dim_off: - setState(led_on); + setState(led_dim_on); break; case led_blink: setState(noChange); @@ -145,20 +244,20 @@ void initLeds(void) { Serial.println("InitLeds"); - dimFL.begin(); // - dimFR.begin(); //setState(led_on); - dimRL.begin(); //setState(led_on); - dimRR.begin(); //etState(led_on); - blinkFR.begin(); //setState(led_on); - blinkFL.begin(); //setState(led_on); + dimFL.begin(); // + dimFR.begin(); //setState(led_on); + dimRL.begin(); //setState(led_on); + dimRR.begin(); //etState(led_on); + blinkFR.begin(); //setState(led_on); + blinkFL.begin(); //setState(led_on); interiourLed.begin(); //setState(led_on); analogWriteResolution(10); - - dimFL.setState(led_on); - dimFR.setState(led_on); - dimRL.setState(led_on); - dimRR.setState(led_on); + + dimFL.setState(led_dim_on); + dimFR.setState(led_dim_on); + dimRL.setState(led_dim_on); + dimRR.setState(led_dim_on); blinkFR.setState(led_blink); blinkFL.setState(led_blink); interiourLed.setState(led_on); @@ -202,43 +301,43 @@ void setLedPattern(e_ledpattern setpattern) { case allOff: { - setLeds(led_off, led_off, led_off, led_off, led_off, led_off, led_off); + setLeds(led_dim_off, led_dim_off, led_dim_off, led_dim_off, led_dim_off, led_dim_off, led_dim_off); } break; case allOn: { - setLeds(led_on, led_on, led_on, led_on, led_on, led_on, led_on); + setLeds(led_dim_on, led_dim_on, led_dim_on, led_dim_on, led_dim_on, led_dim_on, led_dim_on); } break; case panic: { //setLeds(noChange, noChange, noChange, noChange, led_off, led_off, noChange); - setLeds(noChange, noChange, noChange, noChange, led_blink, led_blink, noChange); + setLeds(noChange, noChange, led_blink, led_blink, led_blink, led_blink, noChange); } break; case night: { - setLeds(led_on, led_on, led_on, led_on, noChange, noChange, led_on); + setLeds(led_dim_on, led_dim_on, led_dim_on, led_dim_on, noChange, noChange, led_dim_on); } break; case turnLeft: { - setLeds(noChange, noChange, noChange, noChange, led_off, led_blink, noChange); + setLeds(noChange, noChange, noChange, led_blink, led_off, led_blink, noChange); } break; case turnRight: { - setLeds(noChange, noChange, noChange, noChange, led_blink, led_off, noChange); + setLeds(noChange, noChange, led_blink, noChange, led_blink, led_off, noChange); } break; case interiourOn: { - setLeds(noChange, noChange, noChange, noChange, noChange, noChange, led_on); + setLeds(noChange, noChange, noChange, noChange, noChange, noChange, led_dim_on); } break; case interiourOff: { - setLeds(noChange, noChange, noChange, noChange, noChange, noChange, led_off); + setLeds(noChange, noChange, noChange, noChange, noChange, noChange, led_dim_off); } break; default: diff --git a/src/led.h b/src/led.h index 4532997..15aff94 100644 --- a/src/led.h +++ b/src/led.h @@ -12,8 +12,12 @@ #define INTERIOUR 5 // #define NUM_LEDS 7 -#define DIM_TIME 1000 -#define DIM_RES 1024 +#define DIM_TIME 3000 +#define DIM_RESBITS 10 +#define DIM_FPWM 5000 +#define DIM_RES (int)(pow(2, DIM_RESBITS) - 1) +#define DIM_MIN 0 +#define DIM_MAX (DIM_RES - 1) #define DIM_STEP 255 #define DIM_STEPMS (DIM_TIME / DIM_STEP) @@ -59,6 +63,7 @@ class c_led const uint8_t _pin; e_ledstate _state; uint64_t _timer; + uint64_t _timer2; uint32_t _dimmer; bool _newstate; bool _ledstate; @@ -66,12 +71,17 @@ class c_led uint32_t _dimstep; String _ledName; + const int _PWMChannel; + void init(); + void handle_dim_on( void ); + void handle_dim_off(void ); + void handle_blink( void ); + public: - c_led(uint8_t pin, String name) : _pin(pin) + c_led(uint8_t pin, String name, int PWMChannel) : _pin(pin), _PWMChannel(PWMChannel) { - _ledName = name; init(); } diff --git a/src/mqtt.cpp b/src/mqtt.cpp index 2d65355..63257a8 100644 --- a/src/mqtt.cpp +++ b/src/mqtt.cpp @@ -7,7 +7,7 @@ // Update these with values suitable for your network. byte mac[] = {0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xED}; -IPAddress MQTTserver(192, 168, 2, 5); +IPAddress MQTTserver(192, 168, 2, 3); const char *SSID = "poes"; const char *PWD = "Rijnstraat214";