@@ -34,12 +34,18 @@ volatile uint8_t magicWord[] = {'A', 'd', 'a'};
3434volatile uint8_t hi, lo, chk, i;
3535uint32_t last_time = 0 ;
3636volatile uint16_t howManyLED = 0 ;
37-
37+ volatile byte r, g, b;
3838void 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
6067void 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-
8389void 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