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