Skip to content

Commit 1cbc1cf

Browse files
committed
Get Metadata from header
1 parent 55a3e69 commit 1cbc1cf

File tree

1 file changed

+59
-26
lines changed

1 file changed

+59
-26
lines changed

adalight_ambilight_rp2040.ino

Lines changed: 59 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -34,12 +34,18 @@ volatile uint8_t magicWord[] = {'A', 'd', 'a'};
3434
volatile uint8_t hi, lo, chk, i;
3535
uint32_t last_time = 0;
3636
volatile uint16_t howManyLED = 0;
37-
37+
volatile byte r, g, b;
3838
void setup() {
39-
Serial.begin(115200);
4039
strip.begin();
4140
strip.clear();
4241
strip.show();
42+
pinMode(LED_BUILTIN, OUTPUT);
43+
Serial.begin(230400);
44+
Serial.setTimeout(20);
45+
// while (!Serial) {
46+
// delay(100);
47+
// digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
48+
// }
4349
LED_Demo();
4450
}
4551

@@ -49,74 +55,101 @@ void loop() {
4955
isBufferReady = false;
5056
strip.show();
5157
} else {
52-
if (current_time - last_time >= 1000) {
58+
if (current_time - last_time >= 3000) {
5359
// Send ACK packet every second
5460
Serial.print("Ada\n");
61+
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
5562
last_time = current_time;
5663
}
5764
}
5865
}
5966

6067
void LED_Demo() {
61-
for (int i = 0; i <= 64; i++) {
62-
strip.rainbow();
63-
strip.setBrightness(i);
68+
uint8_t color_pos = 0;
69+
uint32_t tempColor;
70+
uint16_t tempPixel;
71+
strip.setBrightness(100);
72+
randomSeed(analogRead(0));
73+
for (uint32_t i = 0; i < NUMBER_OF_LEDS; i++) {
74+
strip.setPixelColor(i, colorWheel(color_pos));
6475
strip.show();
65-
delay(25);
76+
color_pos += 256 / NUMBER_OF_LEDS;
77+
delayMicroseconds(1500000 / NUMBER_OF_LEDS);
6678
}
67-
delay(1000);
68-
for (int i = 64; i > 0; i--) {
69-
strip.rainbow();
79+
for (int i = 100; i >= 0; i--) {
7080
strip.setBrightness(i);
7181
strip.show();
72-
delay(25);
82+
delay(20);
7383
}
84+
strip.setBrightness(100);
7485
strip.clear();
7586
strip.show();
7687
}
7788

78-
inline uint8_t getByteFromSerial() {
79-
while (!Serial.available()) ;;
80-
return (uint8_t)Serial.read();
81-
}
82-
8389
void serialEvent() {
8490
i = 0;
8591
while (Serial.available()) {
8692
if (magicWord[i] == (uint8_t)Serial.read()) {
8793
i++;
94+
Serial.println("ACKRX");
8895
if (i == 3) {
8996
// Magic packet matched, now buf the header
9097
// ref: https://www.partsnotincluded.com/visualizing-adalight-header-information/
91-
hi = getByteFromSerial();
92-
lo = getByteFromSerial();
93-
chk = getByteFromSerial();
9498

99+
Serial.println("ACKOK");
100+
while (!Serial.available()) ;;
101+
hi = Serial.read();
102+
while (!Serial.available()) ;;
103+
lo = Serial.read();
104+
while (!Serial.available()) ;;
105+
chk = Serial.read();
106+
Serial.println("HEDOK");
107+
// Verify Checksum
95108
if (chk != (hi ^ lo ^ 0x55)) {
96109
break;
97110
}
98111
// Extract metadata from header
99-
howManyLED = (256L * (long)hi + (long)lo + 1L);
100-
for (uint8_t i = 0; i < NUMBER_OF_LEDS; i++) {
112+
howManyLED = ((hi << 8) + lo + 1);
113+
Serial.println("CHKOK");
114+
Serial.print("NUMLED:"); Serial.println(howManyLED);
115+
for (uint16_t i = 0; i < NUMBER_OF_LEDS; i++) {
101116
byte r, g, b;
102117
if (i < howManyLED) {
103-
r = getByteFromSerial();
104-
g = getByteFromSerial();
105-
b = getByteFromSerial();
118+
Serial.print("LED:"); Serial.println(i);
119+
while (!Serial.available());
120+
r = Serial.read();
121+
while (!Serial.available());
122+
g = Serial.read();
123+
while (!Serial.available());
124+
b = Serial.read();
106125
strip.setPixelColor(i, r, g, b);
107126
} else {
108127
strip.setPixelColor(i, 0, 0, 0);
109128
}
110129
}
111130
isBufferReady = true;
131+
Serial.println("ALLOK");
112132
Serial.flush();
113133
}
114134
} else {
115-
strip.clear();
116-
strip.show();
135+
Serial.println("ERR");
136+
// strip.clear();
137+
// strip.show();
117138
Serial.flush();
118139
break;
119140
}
120141
}
142+
}
121143

144+
uint32_t colorWheel(byte WheelPos) {
145+
WheelPos = 255 - WheelPos;
146+
if (WheelPos < 85) {
147+
return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
148+
}
149+
if (WheelPos < 170) {
150+
WheelPos -= 85;
151+
return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
152+
}
153+
WheelPos -= 170;
154+
return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
122155
}

0 commit comments

Comments
 (0)