From 43578872eeae5cfea9b23cea6e47c5f4b99d1329 Mon Sep 17 00:00:00 2001 From: Frederic Aust <frederic.aust@hs-bochum.de> Date: Sat, 18 Apr 2020 17:29:28 +0200 Subject: [PATCH] =?UTF-8?q?Grundeinstellungen=20get=C3=A4tigt=20und=20die?= =?UTF-8?q?=20Initialhelligkeit=20auf=20100=20gesetzt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Adalight_WS2812/Adalight_WS2812.ino | 83 +++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 Adalight_WS2812/Adalight_WS2812.ino diff --git a/Adalight_WS2812/Adalight_WS2812.ino b/Adalight_WS2812/Adalight_WS2812.ino new file mode 100644 index 0000000..39d8a59 --- /dev/null +++ b/Adalight_WS2812/Adalight_WS2812.ino @@ -0,0 +1,83 @@ +/* + * Arduino interface for the use of WS2812 strip LEDs + * Uses Adalight protocol and is compatible with Boblight, Prismatik etc... + * "Magic Word" for synchronisation is 'Ada' followed by LED High, Low and Checksum + * Fork von Wifsimster <wifsimster@gmail.com> + */ + +#include "FastLED.h" +// Number of LEDs +#define NUM_LEDS 112 +#define DATA_PIN 3 + +// Baudrate, higher rate allows faster refresh rate and more LEDs (defined in /etc/boblight.conf) +#define serialRate 115200 + +// Adalight sends a "Magic Word" (defined in /etc/boblight.conf) before sending the pixel data +uint8_t prefix[] = {'A', 'd', 'a'}, hi, lo, chk, i; + +// Initialise LED-array +CRGB leds[NUM_LEDS]; + +void setup() { + // Use NEOPIXEL to keep true colors + FastLED.addLeds<NEOPIXEL, DATA_PIN>(leds, NUM_LEDS); + LEDS.setBrightness(100); + + // Initial RGB flash + LEDS.showColor(CRGB(255, 0, 0)); + delay(500); + LEDS.showColor(CRGB(0, 255, 0)); + delay(500); + LEDS.showColor(CRGB(0, 0, 255)); + delay(500); + LEDS.showColor(CRGB(0, 0, 0)); + + Serial.begin(serialRate); + // Send "Magic Word" string to host + Serial.print("Ada\n"); +} + +void loop() { + // Wait for first byte of Magic Word + for(i = 0; i < sizeof prefix; ++i) { + waitLoop: while (!Serial.available()) ;; + // Check next byte in Magic Word + if(prefix[i] == Serial.read()) continue; + // otherwise, start over + i = 0; + goto waitLoop;0 +} + + // Hi, Lo, Checksum + while (!Serial.available()) ;; + hi=Serial.read(); + while (!Serial.available()) ;; + lo=Serial.read(); + while (!Serial.available()) ;; + chk=Serial.read(); + + // If checksum does not match go back to wait + if (chk != (hi ^ lo ^ 0x55)) { + i=0; + goto waitLoop; + } + + memset(leds, 0, NUM_LEDS * sizeof(struct CRGB)); + // Read the transmission data and set LED values + for (uint8_t i = 0; i < NUM_LEDS; i++) { + byte r, g, b; + while(!Serial.available()); + r = Serial.read(); + while(!Serial.available()); + g = Serial.read(); + while(!Serial.available()); + b = Serial.read(); + leds[i].r = r; + leds[i].g = g; + leds[i].b = b; + } + + // Shows new values + FastLED.show(); +} -- GitLab