Skip to content

Commit ead849a

Browse files
authored
Merge pull request #320 from OpenEVSE/jeremypoulter/issue317
Added support for restricting the WiFi status to a single pixel
2 parents cd8c355 + ba2bca1 commit ead849a

File tree

3 files changed

+106
-8
lines changed

3 files changed

+106
-8
lines changed

platformio.ini

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,7 @@ src_build_flags =
133133
-D RAPI_PORT=Serial1
134134
-D NEO_PIXEL_PIN=18
135135
-D NEO_PIXEL_LENGTH=2
136+
-D WIFI_PIXEL_NUMBER=1
136137
-D RED_LED=0
137138
-D GREEN_LED=2
138139
-D BLUE_LED=4
@@ -236,6 +237,7 @@ src_build_flags =
236237
${common.debug_flags}
237238
-D NEO_PIXEL_PIN=17
238239
-D NEO_PIXEL_LENGTH=2
240+
-D WIFI_PIXEL_NUMBER=1
239241
-D WIFI_BUTTON=0
240242
-D WIFI_BUTTON_PRESSED_STATE=LOW
241243
-D RAPI_PORT=Serial

src/LedManagerTask.cpp

Lines changed: 101 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,51 @@ unsigned long LedManagerTask::loop(MicroTasks::WakeReason reason)
180180
setNewState(false);
181181
return TEST_LED_TIME;
182182

183+
#ifdef WIFI_PIXEL_NUMBER
184+
case LedState_Evse_State:
185+
case LedState_WiFi_Access_Point_Waiting:
186+
case LedState_WiFi_Access_Point_Connected:
187+
case LedState_WiFi_Client_Connecting:
188+
case LedState_WiFi_Client_Connected:
189+
{
190+
uint8_t lcdCol = _evse->getStateColour();
191+
DBUGVAR(lcdCol);
192+
uint32_t col = status_colour_map[lcdCol];
193+
DBUGVAR(col, HEX);
194+
uint8_t evseR = (col >> 16) & 0xff;
195+
uint8_t evseG = (col >> 8) & 0xff;
196+
uint8_t evseB = col & 0xff;
197+
198+
switch(state)
199+
{
200+
case LedState_Evse_State:
201+
setAllRGB(evseR, evseG, evseB);
202+
return MicroTask.Infinate;
203+
204+
case LedState_WiFi_Access_Point_Waiting:
205+
setEvseAndWifiRGB(evseR, evseG, evseB, flashState ? 255 : 0, flashState ? 255 : 0, 0);
206+
flashState = !flashState;
207+
return CONNECTING_FLASH_TIME;
208+
209+
case LedState_WiFi_Access_Point_Connected:
210+
setEvseAndWifiRGB(evseR, evseG, evseB, flashState ? 255 : 0, 0, flashState ? 255 : 0);
211+
flashState = !flashState;
212+
return CONNECTED_FLASH_TIME;
213+
214+
case LedState_WiFi_Client_Connecting:
215+
setEvseAndWifiRGB(evseR, evseG, evseB, 0, flashState ? 255 : 0, flashState ? 255 : 0);
216+
flashState = !flashState;
217+
return CONNECTING_FLASH_TIME;
218+
219+
case LedState_WiFi_Client_Connected:
220+
setEvseAndWifiRGB(evseR, evseG, evseB, 0, 255, 0);
221+
return MicroTask.Infinate;
222+
223+
default:
224+
break;
225+
}
226+
}
227+
#else
183228
case LedState_Evse_State:
184229
{
185230
uint8_t lcdCol = _evse->getStateColour();
@@ -193,28 +238,24 @@ unsigned long LedManagerTask::loop(MicroTasks::WakeReason reason)
193238
} return MicroTask.Infinate;
194239

195240
case LedState_WiFi_Access_Point_Waiting:
196-
setAllRGB(flashState ? 255 : 0,
197-
flashState ? 255 : 0,
198-
0);
241+
setAllRGB(flashState ? 255 : 0, flashState ? 255 : 0, 0);
199242
flashState = !flashState;
200243
return CONNECTING_FLASH_TIME;
201244

202245
case LedState_WiFi_Access_Point_Connected:
203-
setAllRGB(0, flashState ? 255 : 0, 0);
246+
setAllRGB(flashState ? 255 : 0, 0, flashState ? 255 : 0);
204247
flashState = !flashState;
205248
return CONNECTED_FLASH_TIME;
206249

207250
case LedState_WiFi_Client_Connecting:
208-
setAllRGB(flashState ? 255 : 0,
209-
flashState ? 255 : 0,
210-
0);
251+
setAllRGB(0, flashState ? 255 : 0, flashState ? 255 : 0);
211252
flashState = !flashState;
212253
return CONNECTING_FLASH_TIME;
213254

214255
case LedState_WiFi_Client_Connected:
215256
setAllRGB(0, 255, 0);
216257
return MicroTask.Infinate;
217-
258+
#endif
218259
}
219260
#endif
220261

@@ -317,6 +358,58 @@ void LedManagerTask::setAllRGB(uint8_t red, uint8_t green, uint8_t blue)
317358
}
318359
#endif
319360

361+
#if WIFI_PIXEL_NUMBER
362+
void LedManagerTask::setEvseAndWifiRGB(uint8_t evseRed, uint8_t evseGreen, uint8_t evseBlue, uint8_t wifiRed, uint8_t wifiGreen, uint8_t wifiBlue)
363+
{
364+
DBUG("EVSE LED R:");
365+
DBUG(evseRed);
366+
DBUG(" G:");
367+
DBUG(evseGreen);
368+
DBUG(" B:");
369+
DBUGLN(evseBlue);
370+
371+
DBUG("WiFi LED R:");
372+
DBUG(wifiRed);
373+
DBUG(" G:");
374+
DBUG(wifiGreen);
375+
DBUG(" B:");
376+
DBUGLN(wifiBlue);
377+
378+
if(brightness) { // See notes in setBrightness()
379+
evseRed = (evseRed * brightness) >> 8;
380+
evseGreen = (evseGreen * brightness) >> 8;
381+
evseBlue = (evseBlue * brightness) >> 8;
382+
wifiRed = (wifiRed * brightness) >> 8;
383+
wifiGreen = (wifiGreen * brightness) >> 8;
384+
wifiBlue = (wifiBlue * brightness) >> 8;
385+
}
386+
387+
#if defined(NEO_PIXEL_PIN) && defined(NEO_PIXEL_LENGTH)
388+
uint32_t col = strip.gamma32(strip.Color(evseRed, evseGreen, evseBlue));
389+
DBUGVAR(col, HEX);
390+
strip.fill(col);
391+
strip.setPixelColor(WIFI_PIXEL_NUMBER, wifiRed, wifiGreen, wifiBlue);
392+
strip.show();
393+
#endif
394+
395+
#if defined(RED_LED) && defined(GREEN_LED) && defined(BLUE_LED)
396+
analogWrite(RED_LED, pgm_read_byte(&gamma8[wifiRed]));
397+
analogWrite(GREEN_LED, pgm_read_byte(&gamma8[wifiGreen]));
398+
analogWrite(BLUE_LED, pgm_read_byte(&gamma8[wifiBlue]));
399+
400+
#ifdef WIFI_BUTTON_SHARE_LED
401+
#if RED_LED == WIFI_BUTTON_SHARE_LED
402+
buttonShareState = wifiRed;
403+
#elif GREEN_LED == WIFI_BUTTON_SHARE_LED
404+
buttonShareState = wifiGreen;
405+
#elif BLUE_LED == WIFI_BUTTON_SHARE_LED
406+
buttonShareState = wifiBlue;
407+
#endif
408+
#endif
409+
#endif
410+
}
411+
#endif
412+
320413
#ifdef WIFI_LED
321414
void LedManagerTask::setWiFiLed(uint8_t state)
322415
{

src/LedManagerTask.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,9 @@ class LedManagerTask : public MicroTasks::Task
4646
#if RGB_LED
4747
void setAllRGB(uint8_t red, uint8_t green, uint8_t blue);
4848
#endif
49+
#if RGB_LED
50+
void setEvseAndWifiRGB(uint8_t evseRed, uint8_t evseGreen, uint8_t evseBlue, uint8_t wifiRed, uint8_t wifiGreen, uint8_t wifiBlue);
51+
#endif
4952

5053
#ifdef WIFI_LED
5154
void setWiFiLed(uint8_t state);

0 commit comments

Comments
 (0)