mirror of
https://github.com/MarlinFirmware/Marlin.git
synced 2025-01-18 15:39:31 +00:00
Use NEOPIXEL as case light
Add an option to use the NEOPIXEL LED as case light.
This commit is contained in:
parent
428fbe8228
commit
4a40cf268d
5 changed files with 54 additions and 13 deletions
|
@ -94,7 +94,7 @@ script:
|
||||||
- opt_enable REPRAP_DISCOUNT_SMART_CONTROLLER SDSUPPORT EEPROM_SETTINGS
|
- opt_enable REPRAP_DISCOUNT_SMART_CONTROLLER SDSUPPORT EEPROM_SETTINGS
|
||||||
- opt_enable BLINKM PCA9632 RGB_LED NEOPIXEL_LED
|
- opt_enable BLINKM PCA9632 RGB_LED NEOPIXEL_LED
|
||||||
- opt_enable AUTO_BED_LEVELING_LINEAR Z_MIN_PROBE_REPEATABILITY_TEST DEBUG_LEVELING_FEATURE SKEW_CORRECTION SKEW_CORRECTION_FOR_Z SKEW_CORRECTION_GCODE
|
- opt_enable AUTO_BED_LEVELING_LINEAR Z_MIN_PROBE_REPEATABILITY_TEST DEBUG_LEVELING_FEATURE SKEW_CORRECTION SKEW_CORRECTION_FOR_Z SKEW_CORRECTION_GCODE
|
||||||
- opt_enable_adv FWRETRACT MAX7219_DEBUG LED_CONTROL_MENU
|
- opt_enable_adv FWRETRACT MAX7219_DEBUG LED_CONTROL_MENU CASE_LIGHT_ENABLE CASE_LIGHT_USE_NEOPIXEL
|
||||||
- opt_set ABL_GRID_POINTS_X 16
|
- opt_set ABL_GRID_POINTS_X 16
|
||||||
- opt_set ABL_GRID_POINTS_Y 16
|
- opt_set ABL_GRID_POINTS_Y 16
|
||||||
- opt_set_adv FANMUX0_PIN 53
|
- opt_set_adv FANMUX0_PIN 53
|
||||||
|
|
|
@ -243,6 +243,10 @@
|
||||||
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
|
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
|
||||||
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
|
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
|
||||||
//#define MENU_ITEM_CASE_LIGHT // Add a Case Light option to the LCD main menu
|
//#define MENU_ITEM_CASE_LIGHT // Add a Case Light option to the LCD main menu
|
||||||
|
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
|
||||||
|
#if ENABLED(CASE_LIGHT_USE_NEOPIXEL)
|
||||||
|
#define CASE_LIGHT_NEOPIXEL_COLOR { 255, 255, 255, 255 } // { Red, Green, Blue, White }
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
|
|
|
@ -10608,26 +10608,44 @@ inline void gcode_M907() {
|
||||||
#endif // HAS_MICROSTEPS
|
#endif // HAS_MICROSTEPS
|
||||||
|
|
||||||
#if HAS_CASE_LIGHT
|
#if HAS_CASE_LIGHT
|
||||||
|
|
||||||
#ifndef INVERT_CASE_LIGHT
|
#ifndef INVERT_CASE_LIGHT
|
||||||
#define INVERT_CASE_LIGHT false
|
#define INVERT_CASE_LIGHT false
|
||||||
#endif
|
#endif
|
||||||
uint8_t case_light_brightness; // LCD routine wants INT
|
uint8_t case_light_brightness; // LCD routine wants INT
|
||||||
bool case_light_on;
|
bool case_light_on;
|
||||||
|
|
||||||
|
#if ENABLED(CASE_LIGHT_USE_NEOPIXEL)
|
||||||
|
LEDColor case_light_color =
|
||||||
|
#ifdef CASE_LIGHT_NEOPIXEL_COLOR
|
||||||
|
CASE_LIGHT_NEOPIXEL_COLOR
|
||||||
|
#else
|
||||||
|
{ 255, 255, 255, 255 }
|
||||||
|
#endif
|
||||||
|
;
|
||||||
|
#endif
|
||||||
|
|
||||||
void update_case_light() {
|
void update_case_light() {
|
||||||
pinMode(CASE_LIGHT_PIN, OUTPUT); // digitalWrite doesn't set the port mode
|
const uint8_t i = case_light_on ? case_light_brightness : 0, n10ct = INVERT_CASE_LIGHT ? 255 - i : i;
|
||||||
if (case_light_on) {
|
|
||||||
|
#if ENABLED(CASE_LIGHT_USE_NEOPIXEL)
|
||||||
|
|
||||||
|
leds.set_color(
|
||||||
|
MakeLEDColor(case_light_color.r, case_light_color.g, case_light_color.b, case_light_color.w, n10ct),
|
||||||
|
false
|
||||||
|
);
|
||||||
|
|
||||||
|
#else // !CASE_LIGHT_USE_NEOPIXEL
|
||||||
|
|
||||||
|
SET_OUTPUT(CASE_LIGHT_PIN);
|
||||||
if (USEABLE_HARDWARE_PWM(CASE_LIGHT_PIN))
|
if (USEABLE_HARDWARE_PWM(CASE_LIGHT_PIN))
|
||||||
analogWrite(CASE_LIGHT_PIN, INVERT_CASE_LIGHT ? 255 - case_light_brightness : case_light_brightness);
|
analogWrite(CASE_LIGHT_PIN, n10ct);
|
||||||
else
|
else {
|
||||||
WRITE(CASE_LIGHT_PIN, INVERT_CASE_LIGHT ? LOW : HIGH);
|
const bool s = case_light_on ? !INVERT_CASE_LIGHT : INVERT_CASE_LIGHT;
|
||||||
}
|
WRITE(CASE_LIGHT_PIN, s ? HIGH : LOW);
|
||||||
else {
|
}
|
||||||
if (USEABLE_HARDWARE_PWM(CASE_LIGHT_PIN))
|
|
||||||
analogWrite(CASE_LIGHT_PIN, INVERT_CASE_LIGHT ? 255 : 0);
|
#endif // !CASE_LIGHT_USE_NEOPIXEL
|
||||||
else
|
|
||||||
WRITE(CASE_LIGHT_PIN, INVERT_CASE_LIGHT ? HIGH : LOW);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
#endif // HAS_CASE_LIGHT
|
#endif // HAS_CASE_LIGHT
|
||||||
|
|
||||||
|
|
|
@ -1621,6 +1621,10 @@ static_assert(COUNT(sanity_arr_3) <= XYZE_N, "DEFAULT_MAX_ACCELERATION has too m
|
||||||
#error "LED_CONTROL_MENU requires an LCD controller."
|
#error "LED_CONTROL_MENU requires an LCD controller."
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if ENABLED(CASE_LIGHT_USE_NEOPIXEL) && DISABLED(NEOPIXEL_LED)
|
||||||
|
#error "CASE_LIGHT_USE_NEOPIXEL requires NEOPIXEL_LED."
|
||||||
|
#endif
|
||||||
|
|
||||||
#if ENABLED(SKEW_CORRECTION)
|
#if ENABLED(SKEW_CORRECTION)
|
||||||
#if !defined(XY_SKEW_FACTOR) && !(defined(XY_DIAG_AC) && defined(XY_DIAG_BD) && defined(XY_SIDE_AD))
|
#if !defined(XY_SKEW_FACTOR) && !(defined(XY_DIAG_AC) && defined(XY_DIAG_BD) && defined(XY_SIDE_AD))
|
||||||
#error "SKEW_CORRECTION requires XY_SKEW_FACTOR or XY_DIAG_AC, XY_DIAG_BD, XY_SIDE_AD."
|
#error "SKEW_CORRECTION requires XY_SKEW_FACTOR or XY_DIAG_AC, XY_DIAG_BD, XY_SIDE_AD."
|
||||||
|
|
|
@ -70,6 +70,21 @@ typedef struct LEDColor {
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
{}
|
{}
|
||||||
|
LEDColor(const uint8_t (&rgbw)[4]) : r(rgbw[0]), g(rgbw[1]), b(rgbw[2])
|
||||||
|
#if HAS_WHITE_LED
|
||||||
|
, w(rgbw[3])
|
||||||
|
#if ENABLED(NEOPIXEL_LED)
|
||||||
|
, i(NEOPIXEL_BRIGHTNESS)
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
{}
|
||||||
|
LEDColor& operator=(const uint8_t (&rgbw)[4]) {
|
||||||
|
r = rgbw[0]; g = rgbw[1]; b = rgbw[2];
|
||||||
|
#if HAS_WHITE_LED
|
||||||
|
w = rgbw[3];
|
||||||
|
#endif
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
LEDColor& operator=(const LEDColor &right) {
|
LEDColor& operator=(const LEDColor &right) {
|
||||||
if (this != &right) memcpy(this, &right, sizeof(LEDColor));
|
if (this != &right) memcpy(this, &right, sizeof(LEDColor));
|
||||||
return *this;
|
return *this;
|
||||||
|
|
Loading…
Reference in a new issue