Skip to content

Commit e7fc32c

Browse files
committed
Add Inverted Status LED support
1 parent ed8c32c commit e7fc32c

File tree

4 files changed

+73
-12
lines changed

4 files changed

+73
-12
lines changed

src/Wippersnapper_Boards.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,7 @@
153153
#define USE_LITTLEFS
154154
#define USE_STATUS_LED
155155
#define STATUS_LED_PIN 0
156+
#define STATUS_LED_INVERTED
156157
#elif defined(ARDUINO_ADAFRUIT_ITSYBITSY_ESP32)
157158
#define BOARD_ID "itsybitsy-esp32"
158159
#define USE_LITTLEFS

src/components/digitalIO/Wippersnapper_DigitalGPIO.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ void Wippersnapper_DigitalGPIO::initDigitalPin(
7676
WS_DEBUG_PRINTLN(pinName);
7777

7878
// Initialize LOW
79-
#if defined(ARDUINO_ESP8266_ADAFRUIT_HUZZAH)
79+
#if defined(ARDUINO_ESP8266_ADAFRUIT_HUZZAH) || defined(STATUS_LED_INVERTED)
8080
// The Adafruit Feather ESP8266's built-in LED is reverse wired so setting
8181
// the pin LOW will turn the LED on.
8282
digitalWrite(STATUS_LED_PIN, !0);

src/components/pwm/ws_pwm.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ void ws_pwm::detach(uint8_t pin) {
8888
void ws_pwm::writeDutyCycle(uint8_t pin, int dutyCycle) {
8989
#if defined(ARDUINO_ARCH_ESP32)
9090
_ledcMgr->analogWrite(pin, dutyCycle);
91-
#elif defined(ARDUINO_ESP8266_ADAFRUIT_HUZZAH) && defined(STATUS_LED_PIN)
91+
#elif (defined(ARDUINO_ESP8266_ADAFRUIT_HUZZAH) || defined(STATUS_LED_INVERTED)) && defined(STATUS_LED_PIN)
9292
// Adafruit Feather ESP8266's analogWrite() is inverted because its LED pin is
9393
// reverse-wired
9494
analogWrite(pin, 255 - dutyCycle);

src/components/statusLED/Wippersnapper_StatusLED.cpp

Lines changed: 70 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -84,11 +84,29 @@ void initStatusLED() {
8484
analogWrite(STATUS_LED_PIN, 255);
8585
#elif defined(ARDUINO_ARCH_ESP32)
8686
WS._pwmComponent->attach(STATUS_LED_PIN, LEDC_BASE_FREQ, LEDC_TIMER_12_BIT);
87-
WS._pwmComponent->writeDutyCycle(STATUS_LED_PIN, 0); // turn OFF
87+
WS._pwmComponent->writeDutyCycle(STATUS_LED_PIN,
88+
#if defined(STATUS_LED_INVERTED)
89+
255
90+
#else
91+
0
92+
#endif
93+
); // turn OFF
8894
#elif defined(ARDUINO_ARCH_RP2040)
89-
digitalWrite(STATUS_LED_PIN, 0);
95+
digitalWrite(STATUS_LED_PIN,
96+
#if defined(STATUS_LED_INVERTED)
97+
255
98+
#else
99+
0
100+
#endif
101+
); // turn OFF
102+
#else
103+
analogWrite(STATUS_LED_PIN,
104+
#if defined(STATUS_LED_INVERTED)
105+
255
90106
#else
91-
analogWrite(STATUS_LED_PIN, 0);
107+
0
108+
#endif
109+
); // turn OFF
92110
#endif
93111

94112
WS.lockStatusLED = true; // set global pin "lock" flag
@@ -116,7 +134,13 @@ void releaseStatusLED() {
116134
#endif
117135

118136
#ifdef USE_STATUS_LED
119-
digitalWrite(STATUS_LED_PIN, 0); // turn off
137+
digitalWrite(STATUS_LED_PIN,
138+
#if defined(STATUS_LED_INVERTED)
139+
255
140+
#else
141+
0
142+
#endif
143+
); // turn OFF
120144
pinMode(STATUS_LED_PIN,
121145
INPUT); // "release" for use by setting to input (hi-z)
122146
WS.lockStatusLED = false; // un-set global pin "lock" flag
@@ -182,13 +206,31 @@ void setStatusLEDColor(uint32_t color) {
182206
if (!WS.lockStatusLED)
183207
return; // status pixel is in-use elsewhere
184208
#ifdef ARDUINO_ARCH_RP2040
185-
digitalWrite(STATUS_LED_PIN, color > 0);
209+
digitalWrite(STATUS_LED_PIN,
210+
#if defined(STATUS_LED_INVERTED)
211+
!(color > 0)
212+
#else
213+
color > 0
214+
#endif
215+
);
186216
#else
187217
if (color != BLACK)
188218
WS._pwmComponent->writeDutyCycle(
189-
STATUS_LED_PIN, map(WS.status_pixel_brightness, 0.0, 1.0, 0, 1023));
219+
STATUS_LED_PIN, map(WS.status_pixel_brightness, 0.0, 1.0,
220+
#if defined(STATUS_LED_INVERTED)
221+
1023, 0
222+
#else
223+
0, 1023
224+
#endif
225+
));
190226
else
191-
WS._pwmComponent->writeDutyCycle(STATUS_LED_PIN, 0);
227+
WS._pwmComponent->writeDutyCycle(STATUS_LED_PIN,
228+
#if defined(STATUS_LED_INVERTED)
229+
1023
230+
#else
231+
0
232+
#endif
233+
);
192234
#endif
193235
#endif
194236
}
@@ -241,14 +283,32 @@ void setStatusLEDColor(uint32_t color, int brightness) {
241283
return;
242284

243285
#ifdef ARDUINO_ARCH_RP2040
244-
digitalWrite(STATUS_LED_PIN, color > 0);
286+
digitalWrite(STATUS_LED_PIN,
287+
#if defined(STATUS_LED_INVERTED)
288+
!(color > 0)
289+
#else
290+
color > 0
291+
#endif
292+
);
245293
#else
246294
if (color != BLACK) {
247295
// re-map for pixel as a LED
248-
int pulseWidth = map(brightness, 0, 255, 0, 1023);
296+
int pulseWidth = map(brightness, 0, 255,
297+
#if defined(STATUS_LED_INVERTED)
298+
1023, 0
299+
#else
300+
0, 1023
301+
#endif
302+
);
249303
WS._pwmComponent->writeDutyCycle(STATUS_LED_PIN, pulseWidth);
250304
} else {
251-
WS._pwmComponent->writeDutyCycle(STATUS_LED_PIN, 0);
305+
WS._pwmComponent->writeDutyCycle(STATUS_LED_PIN,
306+
#if defined(STATUS_LED_INVERTED)
307+
1023
308+
#else
309+
0
310+
#endif
311+
);
252312
}
253313
#endif
254314
#endif

0 commit comments

Comments
 (0)