Pārlūkot izejas kodu

Support RGBW on PCA9632 (#20455)

Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
Jan Krajdl 4 gadus atpakaļ
vecāks
revīzija
de9c0eda36
Revīzijas autora e-pasta adrese nav piesaistīta nevienam kontam
2 mainītis faili ar 32 papildinājumiem un 18 dzēšanām
  1. 1
    1
      Marlin/src/feature/leds/leds.h
  2. 31
    17
      Marlin/src/feature/leds/pca9632.cpp

+ 1
- 1
Marlin/src/feature/leds/leds.h Parādīt failu

34
 #endif
34
 #endif
35
 
35
 
36
 // A white component can be passed
36
 // A white component can be passed
37
-#if EITHER(RGBW_LED, NEOPIXEL_LED)
37
+#if ANY(RGBW_LED, NEOPIXEL_LED, PCA9632_RGBW)
38
   #define HAS_WHITE_LED 1
38
   #define HAS_WHITE_LED 1
39
 #endif
39
 #endif
40
 
40
 

+ 31
- 17
Marlin/src/feature/leds/pca9632.cpp Parādīt failu

58
 #define PCA9632_AUTOGLO     0xC0
58
 #define PCA9632_AUTOGLO     0xC0
59
 #define PCA9632_AUTOGI      0xE0
59
 #define PCA9632_AUTOGI      0xE0
60
 
60
 
61
-// Red=LED0   Green=LED1   Blue=LED2
61
+// Red=LED0   Green=LED1   Blue=LED2  White=LED3
62
 #ifndef PCA9632_RED
62
 #ifndef PCA9632_RED
63
   #define PCA9632_RED 0x00
63
   #define PCA9632_RED 0x00
64
 #endif
64
 #endif
68
 #ifndef PCA9632_BLU
68
 #ifndef PCA9632_BLU
69
   #define PCA9632_BLU 0x04
69
   #define PCA9632_BLU 0x04
70
 #endif
70
 #endif
71
+#if HAS_WHITE_LED && !defined(PCA9632_WHT)
72
+  #define PCA9632_WHT 0x06
73
+#endif
71
 
74
 
72
 // If any of the color indexes are greater than 0x04 they can't use auto increment
75
 // If any of the color indexes are greater than 0x04 they can't use auto increment
73
-#if !defined(PCA9632_NO_AUTO_INC) && (PCA9632_RED > 0x04 || PCA9632_GRN > 0x04 || PCA9632_BLU > 0x04)
76
+#if !defined(PCA9632_NO_AUTO_INC) && (PCA9632_RED > 0x04 || PCA9632_GRN > 0x04 || PCA9632_BLU > 0x04 || PCA9632_WHT > 0x04)
74
   #define PCA9632_NO_AUTO_INC
77
   #define PCA9632_NO_AUTO_INC
75
 #endif
78
 #endif
76
 
79
 
89
   Wire.endTransmission();
92
   Wire.endTransmission();
90
 }
93
 }
91
 
94
 
92
-static void PCA9632_WriteAllRegisters(const byte addr, const byte regadd, const byte vr, const byte vg, const byte vb) {
95
+static void PCA9632_WriteAllRegisters(const byte addr, const byte regadd, const byte vr, const byte vg, const byte vb
96
+  #if ENABLED(PCA9632_RGBW)
97
+    , const byte vw
98
+  #endif
99
+) {
93
   #if DISABLED(PCA9632_NO_AUTO_INC)
100
   #if DISABLED(PCA9632_NO_AUTO_INC)
94
-    uint8_t data[4], len = 4;
101
+    uint8_t data[4];
95
     data[0] = PCA9632_AUTO_IND | regadd;
102
     data[0] = PCA9632_AUTO_IND | regadd;
96
     data[1 + (PCA9632_RED >> 1)] = vr;
103
     data[1 + (PCA9632_RED >> 1)] = vr;
97
     data[1 + (PCA9632_GRN >> 1)] = vg;
104
     data[1 + (PCA9632_GRN >> 1)] = vg;
98
     data[1 + (PCA9632_BLU >> 1)] = vb;
105
     data[1 + (PCA9632_BLU >> 1)] = vb;
106
+    Wire.beginTransmission(I2C_ADDRESS(addr));
107
+    Wire.write(data, sizeof(data));
108
+    Wire.endTransmission();
99
   #else
109
   #else
100
-    uint8_t data[6], len = 6;
101
-    data[0] = regadd + (PCA9632_RED >> 1);
102
-    data[1] = vr;
103
-    data[2] = regadd + (PCA9632_GRN >> 1);
104
-    data[3] = vg;
105
-    data[4] = regadd + (PCA9632_BLU >> 1);
106
-    data[5] = vb;
110
+    PCA9632_WriteRegister(addr, regadd + (PCA9632_RED >> 1), vr);
111
+    PCA9632_WriteRegister(addr, regadd + (PCA9632_GRN >> 1), vg);
112
+    PCA9632_WriteRegister(addr, regadd + (PCA9632_BLU >> 1), vb);
113
+    #if ENABLED(PCA9632_RGBW)
114
+      PCA9632_WriteRegister(addr, regadd + (PCA9632_WHT >> 1), vw);
115
+    #endif
107
   #endif
116
   #endif
108
-  Wire.beginTransmission(I2C_ADDRESS(addr));
109
-  Wire.write(data, len);
110
-  Wire.endTransmission();
111
 }
117
 }
112
 
118
 
113
 #if 0
119
 #if 0
130
 
136
 
131
   const byte LEDOUT = (color.r ? LED_PWM << PCA9632_RED : 0)
137
   const byte LEDOUT = (color.r ? LED_PWM << PCA9632_RED : 0)
132
                     | (color.g ? LED_PWM << PCA9632_GRN : 0)
138
                     | (color.g ? LED_PWM << PCA9632_GRN : 0)
133
-                    | (color.b ? LED_PWM << PCA9632_BLU : 0);
134
-
135
-  PCA9632_WriteAllRegisters(PCA9632_ADDRESS,PCA9632_PWM0, color.r, color.g, color.b);
139
+                    | (color.b ? LED_PWM << PCA9632_BLU : 0)
140
+                    #if ENABLED(PCA9632_RGBW)
141
+                      | (color.w ? LED_PWM << PCA9632_WHT : 0)
142
+                    #endif
143
+                    ;
144
+
145
+  PCA9632_WriteAllRegisters(PCA9632_ADDRESS,PCA9632_PWM0, color.r, color.g, color.b
146
+    #if ENABLED(PCA9632_RGBW)
147
+      , color.w
148
+    #endif
149
+  );
136
   PCA9632_WriteRegister(PCA9632_ADDRESS,PCA9632_LEDOUT, LEDOUT);
150
   PCA9632_WriteRegister(PCA9632_ADDRESS,PCA9632_LEDOUT, LEDOUT);
137
 }
151
 }
138
 
152
 

Notiek ielāde…
Atcelt
Saglabāt