OK, habe das Problem gelöst, es natürlich nicht am RPI. Aktuelle Libreelec installationen kommen mit Bildschirmauflösung 4096x2160p, die Platform Aufnahme ist bei default mit 3840x2160p fixiert(?), das scheint beim Start von libreelec, mit aktiven Hyperion und Dispmanx einen Konflikt zu ergeben. Also Auflösung vor Installation in kodi auf 3840x2160p gestellt, und siehe da alles läuft, ohne error wie geschmiert. ??
Posts by luckyjacks
-
-
Muss dann ja wohl doch am RPI 4 lliegen, werd ich mir wohl doch noch n neuen holen müssen (scheiß Zeitpunkt
), aber irgendjemand eine vage Ahnung was mit meinem nicht stimmt? ist ein Jahr alt von Amazon
-
Danke, aber leider keine Veränderung...
-
Jep, die ist das. Aus der aktuellen Installation, wüsste nicht, woher sonst.
Mir ist noch eingefallen, dass das etwa einem halben Jahr schon mal passiert ist, als mein Strip noch defekt war, und mir jemand einen Clean Install empfahl. Da hatte ich natürlich noch ein anderes Problem, aber genau das, ist da auch passiert.
Vorher hatte ich eine etwa halbe bis ein Jahr alte Installation darauf gehabt und dann immer mit Backup viel wiederhergestellt. Ich weiß sollte keinen Unterschied machen, aber mehr Unterschied sehen zu der Installation, bei der noch alles funktioniert hat, sehe ich nicht.
-
Jo
# SPDX-License-Identifier: GPL-2.0-or-later
# Copyright (C) 2009-2014 Stephan Raue (stephan@openelec.tv)
# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv)
################################################################################
# Bootloader configuration - config.txt
################################################################################
################################################################################
# Memory (System/GPU configuration )
################################################################################
# Default GPU memory split - at least 288M is needed for some 4k HEVC files
gpu_mem=320
################################################################################
# For overclocking and various other settings, see:
# https://www.raspberrypi.org/do…nfiguration/config-txt.md
################################################################################
# Set 'force_turbo=1' to disable dynamic overclocking and enable overclocking always.
force_turbo=0
# Force HDMI even if unplugged or powered off
hdmi_force_hotplug=1
# Doesn't sent initial active source message.
# Avoids bringing CEC (enabled TV) out of standby and channel switch when
# rebooting.
hdmi_ignore_cec_init=1
################################################################################
# End of default configuration
################################################################################
################################################################################
# Include distribution specific config file if it exists.
################################################################################
[all]
include distroconfig.txt
dtparam=spi=on
max_usb_current=1
Danke für die schnelle Antwort!
*also genau genommen, startet LE normal bis der Kodi screen kommen müsste, erst dann geht das Signal zum TV und Fernbedienung, flöten, Der RPI4 bleibt dan aber über ssh etc. noch erreichbar... die console zeigt auch oft noch das dann keine USB oder Bildschirmaufnahme mehr gefunden wird...
-
Also gegenwärtig habe ich eine Fresh insatall Librellec 9.2 Version, auf der nichts, außer frisch hyperion.NG installiert ist. Nichts verändert in der cmdline.txt, und in der config.txt ist dtparam=spi=on, und max_usb_current=1 aktiviert. Mehr nicht, und sobald ich Bildschirmaufnahme Dipmanx akttiviere wird die verbindung getrennt, und die -console schaltet auf auto effect. was kann das sein???
-
Ok, also habe das Problem inzwischen gelöst. Die zweite LED der Kette war locker oder, hatte eine kalte Lötstelle oder so. Habe also die ersten zwei, und letzten zwei, die auch nicht mehr leuchteten, abgeschnitten, und die kette mit dem Arduino Uno erstmal verbunden, und jetzt läuft alles
Jetzt allerdings, habe ich inzwischen ein neues Problem.
Mein RPI3 läuft top, aber der RPI4 leider nicht mehr, da ich den Fehler beging, mal ein Update auf Buillt 10 zu testen.
Da auf LE 10 die Platzformaufnahme immer noch nicht, funktioniert, woraufhin ich ein downgradet gemacht habe.
Was leider damit endete, dass nach dem Downgrade LE 8.2 dann gar nicht mehr startete, und ich den RPI4 neu aufsetzen musste.
Und nun zu dem Problem, seit ich den RPI4 neu aufgesetzt habe, ob clean, oder mit wiederhergestellten Addons etc. lässt sich die Plattform Aufnahme nicht mehr aktivieren. USB Aufnahme etc alles kein Problem, aber sobalt Kodi dazu kommt, oder nur Kodi an ist...
also ich die Bildschirmaufnahme bzw. Dipmanx aktiviere, bricht die Verbindung zu Hyperion ab, und Libreelec lässt sich nicht mal mehr starten.
Wenn ich den Flatbuffer im Netzwerk deaktiviere, wird die Verbindung zwar nicht mehr getrennt, aber funktionieren tut es trotzdem nicht, den Port verändern hat auch nix gebracht. In der config.txt habe ich UART=2 aktiviert, aber UART=1 tut es ma<cht keinen Unterschied.
Hat vielleicht noch jemand eine Idee woran das noch liegen könnte???
Hab ihn jetzt schon hundert mal neu aufgesetzt, Hyperion neu installiert, konfiguriert, und will eigentlich den Rpi4 benutzen..
Weiß wirklich nicht mehr weiter..
-
Yes, that is the reason I put those, for testing... Just left them, lazy after copy and paste, sorry..
Also, for kind of documenting my process I guess,...
-
Mein erster Debugg Code :
2021-02-17T19:21:31.268Z [hyperiond WEBSOCKET] (DEBUG) (JsonAPI.cpp:1054:handleLoggingCommand()) log streaming activated for client ::ffff:192.168.1.41
2021-02-17T19:21:31.325Z [hyperiond WEBSOCKET] (DEBUG) (JsonAPI.cpp:1063:handleLoggingCommand()) log streaming deactivated for client ::ffff:192.168.1.41
2021-02-17T19:25:29.896Z [hyperiond HYPERION] (DEBUG) (PriorityMuxer.cpp:76:setSourceAutoSelectEnabled()) Source auto select is now disabled
2021-02-17T19:25:29.898Z [hyperiond HYPERION] (DEBUG) (PriorityMuxer.cpp:351:setCurrentTime()) Set visible priority to 250
2021-02-17T19:25:29.899Z [hyperiond HYPERION] (DEBUG) (Hyperion.cpp:559:handlePriorityChangedLedDevice()) priority[250], previousPriority[240]
2021-02-17T19:25:59.343Z [hyperiond HYPERION] (DEBUG) (PriorityMuxer.cpp:76:setSourceAutoSelectEnabled()) Source auto select is now enabled
2021-02-17T19:25:59.345Z [hyperiond HYPERION] (DEBUG) (PriorityMuxer.cpp:351:setCurrentTime()) Set visible priority to 240
2021-02-17T19:25:59.347Z [hyperiond HYPERION] (DEBUG) (Hyperion.cpp:559:handlePriorityChangedLedDevice()) priority[240], previousPriority[250]
2021-02-17T19:26:11.569Z [hyperiond HYPERION] (DEBUG) (PriorityMuxer.cpp:76:setSourceAutoSelectEnabled()) Source auto select is now disabled
2021-02-17T19:26:11.569Z [hyperiond HYPERION] (DEBUG) (PriorityMuxer.cpp:351:setCurrentTime()) Set visible priority to 250
2021-02-17T19:26:11.571Z [hyperiond HYPERION] (DEBUG) (Hyperion.cpp:559:handlePriorityChangedLedDevice()) priority[250], previousPriority[240]
2021-02-17T19:30:41.254Z [hyperiond WEBSOCKET] (DEBUG) (JsonAPI.cpp:1054:handleLoggingCommand()) log streaming activated for client ::ffff:192.168.1.41
2021-02-17T19:30:41.357Z [hyperiond WEBSOCKET] (DEBUG) (JsonAPI.cpp:1063:handleLoggingCommand()) log streaming deactivated for client ::ffff:192.168.1.41
2021-02-17T19:51:17.156Z [hyperiond WEBSOCKET] (DEBUG) (WebSocketClient.cpp:30:WebSocketClient()) New connection from ::ffff:192.168.1.41
2021-02-17T19:51:17.158Z [hyperiond WEBSOCKET] (DEBUG) (JsonAPI.cpp:81:handleInstanceSwitch()) Client '::ffff:192.168.1.41' switch to Hyperion instance 0
2021-02-17T21:03:57.849Z [hyperiond WEBSOCKET] (DEBUG) (WebSocketClient.cpp:204:sendClose()) send close: 1000
2021-02-17T21:04:00.624Z [hyperiond WEBSOCKET] (DEBUG) (WebSocketClient.cpp:30:WebSocketClient()) New connection from ::ffff:192.168.1.41
2021-02-17T21:04:00.627Z [hyperiond WEBSOCKET] (DEBUG) (JsonAPI.cpp:81:handleInstanceSwitch()) Client '::ffff:192.168.1.41' switch to Hyperion instance 0
2021-02-17T21:08:10.728Z [hyperiond WEBSOCKET] (DEBUG) (JsonAPI.cpp:1054:handleLoggingCommand()) log streaming activated for client ::ffff:192.168.1.41
-
Hi Leute, ich habe immer noch Probleme mein Ambilight LibreELEC + Arduino Setup zum Laufen zu kriegen, habe schon seit etwa einem Jahr einen Thread offen, der das Problem leider nicht lösen konnte. Habe im Verlauf noch eine Zweite WS2812B-LED Kette und einen Arduino Uno zugelegt. Das Anfangs-Setup, welches ich immer noch gern zum Laufen kriegen würde, ist eher ungewöhnlich, dennoch durchaus geeignet für Hyperion, und kompatibel. Es handelt sich um eine Plug’n’Play Ambibox aus China, und besteht auch aus einer einfachen WS2812B-LED' Kette, welche Strom also auch Daten über >>!! DC Stecker + Buchse !!<< empfängt einem digitalen Arduiono Nano (ohne Pins) der die Signale via DC Kabel ausgibt, all das sowie die RPI’s werden von 5V 3A Netzteilen aus China versorgt.
Setup Bilder:
##################################### Das Grundsätzliche Problem ist:####################################
-Nur die erste oder ersten zwei LEDs leuchten
-Die Kommunikation zwischen dem RPI4, dem Arduino und den LED’s, ist kommplett gestört!!!
########################################## Woran es nicht liegt #######################################
Ich gehe nicht von Hardware Fehlern aus!!! die LEDs haben schon wiederholt, zwar zufällig, aber komplett weiß geleuchtet, bis ich den Stecker gezogen habe.
Hab die ersten ELEDs überbrückt, und inzwischen noch alle mit einem Multimeter getestet, wobei zwischen den Ambibox LED’s allerdings nur Konstant 1,50 Volt fließt <<wichtig??>> Die zweite hat übliche 3 Volt.
Und der Sketchupload beim nano Nano (alles neu) funktioniert auch Problemlos, Test Ergebnisse sind allerdings undefiniert, xx?xx und ähnliches, dies führe ich eher auf „China Klon“ zurück.
>>>> Was ich für wichtig halte <<<<
Was ich wichtig halte, aber worauf bisher keiner eingangen ist, wäre, seid dem ich hyperbian.ng installiert habe, gibt es Probleme wenn ich Lautstärke regle oder vor und zurückspule, wird das Bild schwarz oder verliert Signal, an aus für einpaar Sekunden, beim streamen flieg ich mal gans raus, aus dem Video, und bei Pause komplett kein Signal mehr. Hatte auch eine Zeit Lang Probleme mit dem HDMI Signal schon beim starten, war plötzlich Kodi Signal vertauscht, im TV Receiver steht kodi und andersrum, wenn ich dann auf den TV HDMI gehe ist kodi da aber ohne Sound und mit gestauchtem Menü Screen. Letzteres begann allerdings erst später als ich Probleme mit meinem Grabber bekam, und seid der wieder halbwegs läuft geht das auch wieder..
Gegenwertig funktioniert der der Externe Grabber normal, doch nur, wenn ich das DC Kabel von der digitalen Capture-Card auch an den RPI USB anschließe,
(und die Verbindung zu der Kette wieder über die Pins herstelle?)… Und geben Falls, externe Quellen aktiviere und wieder deaktiviere usw..
-------------------------------------------------------------------Was unter Andrem schon versucht habe ----------------------------------------------------------------
-Ältere bis aktuelle Fast LED + Liquid Crystal Libarry etc. Sketche
-verschiedene Baudraten
-Pin Nummern 1-6 Im Sketch eingetragen
-Und einige Variationen der Uart Aktivierung im cmdline.txt und config.txt, *wo ich eine Hauptproblem Quellen bisher immer vermutet habe…???
Welche gegenwertig wohl etwa so aussehen:
----------------------------------------------------------------------------------------------------------config.txt---------------------------------------------------------------------------------------------------------------------------------
include distroconfig.txt
dtparam=spi=on
max_usb_current=1
hdmi_force_hotplug=1
#dtoverlay=uart2
#dtparam=i2c1=on
#dtoverlay=pi3-disable-bt
#enable_uart=2
enable_uart=1
#enable_uart=0
----------------------------------------------------------------------------------------cmdline.txt-------------------------------------------------------------------------------------------
boot=UUID=2410-0508 disk=UUID=09814adf-0b3e-462b-ad3f-abd8815b9b92 quiet
#Enable Serial Communication port = serial.Serial("/dev/dwc_otg.lpm_enable=0 console=tty1 console=serial0(or ttyAMA0),460800 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repa>
dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes root wait
#dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
--------------------------------------------------------------------------was ich noch versucht habe-----------------------------------------------------------------------
-Desweiteren habe ich mit mäßigen Erfolg Hyperbien und eine Heprion.ng Installation Raspbian versucht. In beiden fällen zeigte zumindest systemctl status den “ vendor preset: enabled“ an, sonst unverändert.
-Am interessantesten war mein Versuch die Kette direkt über die Pins Via Jumperkabel, an DC-Buchsen zu verbinden, mit Ergebnis, dass die ersten 2-3 LED’s auf die Plattform Signale vom Kodi-Stream korrekt ansprachen. Aber eben nur die… und keine Signale vom Externer Quelle…
-Meine Versuche auf herkömmliche Weise mit dem analogen Arduino Uno, über Pins die Zweite LED Kette anzusteuern führte tatsächlich zu einem verirrten endlos-Regenbogeneffekt der mir, in der Hyperion Konsole auch angezeigt wurde als aktiviert etc. sich aber auch nicht ausstellen ließ, geschweige denn das ein anderer Befehl angenommen wurde…^^
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
*!!!Das Grundsätzliche Problem ist das nur die erste oder ersten zwei LEDs leuchten und fundamental die Kommunikation zwischen dem RPI, den Arduinos und den LED’s gestört ist!!!
systemctl status hyperion.service sieht etwa so aus auf LIBREELEC
● hyperion.service - Hyperion ambient light systemd service
Loaded: loaded (/storage/.config/system.d/hyperion.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 2019-04-11 17:28:43 BST; 1 years 9 months ago
Main PID: 520 (hyperiond)
Memory: 57.8M
CGroup: /system.slice/hyperion.service
└─520 /storage/hyperion/bin/hyperiond --userdata /storage/hy>>>perion/
Apr 11 17:28:43 LibreELEC systemd[1]: Started Hyperion ambient light systemd
Ein letzter, zugegebener Maßen offene Punkt ist, an dem ich aber noch dran bin, wäre, dass ich das einfache Ansteuern der Stribes nur Arduino ohne Hiperion / Ambilight/ RPI noch nicht zuwege gebracht habe. Da nicht sicher ist, ob mit dem Amibox Equipment möglich ist, werde ich mich, wenn mein bestellter Resistor da ist, nochmal an den UNO und zweite Kette machen, auch weil ich gern weiter in die Basics checken will.
Es tut mir leid, ich weiß mein Setup besteht nicht gerade aus High Quality Hardware, und ich gehe mit diesem Problem wahrscheinlich schon einigen auf die Nerven, aber ich möchte und kann das nicht aufgeben, diese Geräte haben bei anderen und Tutorials funktioniert, und will das einfach hinkriegen, und verstehen... Es ist mein quer Einstiegs Gerät zu Ambilight, gewesen, ich fange gern einfach und klein an, aber möchte auch weiter daran arbeiten.
Und vielleicht hilft die Lösung hier ja auch anderen mit, die vielleicht nochmal ein ähnliches Problem haben.
-
Wow, werd dann wohl nochmal einen neuen Thread öffnen müssen beizeiten,
trotzdem Danke fürs erste!
-
Ich würde mich ja an ein anderes Forum wenden aber, ich wüsste nicht das ein Forum gäbe, das geeigneter wäre, mehr, andere, oder bessere Expertise hätte. Ist doch eher ein Nischenthema in den meisten Foren, von dem, was ich gesehen hab, vor allem was Hyperion angeht.
Ich gehe nicht von Hardwarefehlern aus. Alle versuchten Kombinationen sollten daher eigentlich zum Erfolg führen, aber keine tut es...
Habe einen Digitalen Arduino, der die Signale via DC Kabel abgibt, und die dazu passende Kette, und Tutoriums die dieses System mit RPI3 zum Laufen gekriegt haben.
Ich zudem noch einen weiteren Standard WS11 Kette, die schon mal das Rainbow Signal abgespielt hat in Dauerschleife beim direkten Pin Anschluss… Und einen Arduino UNO.
Bei der Pin Verbindung mit der DC Kette hatte ich schon eine Reaktion auf die Plattform Videos, aber nur wieder die ersten zwei oder so, aber wie gesagt die funktioniert im Ganzen, auch wenn ich das nur immer durch Zufall erreicht, hab sie war zwei, dreimal über mehrere Tage an bis ich den Stecker gezogen habe, da sie auch nicht reagiert hat, es ist immer die Kommunikation mit den USB …. Verbindungen, die komplett fehlschlägt, egal welches System ich aufsetze, oder welche Kette, Arduino ich benutze. Raspbian, Hyperion ng, Hyperbian…
-
Ähm Entschuldigung, aber seid, wann und wieso ist der Thread jetzt als resolved markiert? Falls ich das nicht versehentlich war..?
Das Problem ist überhaupt nicht gelöst.. !! Bitte Leute ich brauche immer noch Hilfe!!??
-
Und ehrlich gesagt, möchte ich es echt nicht sein lassen, nur allein komm wirklich ich nicht mehr weiter, und selbst wenn mit der Ambibox Kette doch etwas nicht stimmt, die neue Kette funktioniert auch nicht besser… bitte Leute, ich brauch eure Hilfe, es muss doch irgendjemand geben der da noch was machen kann???
-
Vielleicht noch ein paar Infos, die von Interesse sein könnten, wenn sich jemand damit auskennt, alle meine Geräte werden von 5V 3A Netzteilen aus China versorgt, RPI’s als auch LED’s. Und die Externen HDMI Quelle blieb diesmal erst stabil, wenn ich das DC Kabel von der Capture-Card auch an den RPI anschließe, und die Verbindung wieder über die Pins gesetzt habe. Ich hab den Eindruck, das könnte weiter auf Probleme, mit der UART seriell Port Einstellungen deuten.
-
Ok, also meine alte Libreelec Installation lädt wieder, verbindet sich ordentlich mit Hyperion, alles läuft bis auf die LEDs, alles also wie gehabt. Warum das frisch aufgesetzte Hyperion Libreelec SD-Karte, noch schlechter lief kann ich nicht sagen, vielleicht gab es auch nur einen Konflikt mit der Vorgänger Installations-Verbindung, mit derselben IP Adresse, Hyperion war auch eigentlich auf null, dann alles neu eingestellt aber, wie auch immer…
Dann habe ich jetzt also zwei Ketten die meiner Ansicht nach beide funktionieren, zwei Arduino‘s auf die dasselbe zutrifft, oder mit direkt Pin Verbindung versucht, und bis auf leichte Variationen zwischen Pins und Arduino, das eigentliche Problem bleibt bis jetzt unerkannt, und ungelöst… : (
Und ja, das China Plug n Play Setup ist selten ungewöhnlich, aber weder defekt noch inkompatibel...
Wenn die Weisheit des Forums damit erschöpft ist, muss ich es wohl aufgeben, was echt sehr, sehr, sehr schade ist!!!!!!!! :((
-
Ok, now fresh libreelec and fresh Hyperion install via wget -qO- https://git.io/JU4Zx | bash in Puti, on my RPI4, then connected the data Pin direct to pin 18 first Led turns green, an now, after setting the LED strip to WS218x etc, after the boot sreen Lbreelecs, HDM connection is off, stays off, and the Hyperion Dashboard shows but is not accessible, + status hyperion.service shows Vendor dissabled again. Same situation with the new strip, by the way. When it was still online after setting the LED strip to WS218x etc., tried to find single color LED control settings but didn't find such option, though I don't think at this point, it would make any difference. There some really basic error in connections + Hyperion, but definitely not a broken LED stripe or Hardware issue....
-
Thanks, I can do that, but speaking of time consuming, I had those Ambibox LEDs all together light, a cupple of times, where continously white, till I pulled the plug. The start Impuls, was random, I must admit, when testing the connections, but they did it, the new ones even did the start effect. (+ the first LED of Ambibox did react to the platform videos, on direct wire to pin 18 on Librelec, ) And to the arduino clone, I understand the concerns, but as these are are sold together as a setup, I do not expect these to kill each other immediately right away.. Spend the last half year arguing that it's no hardware bug... But then again, I did not have clean librelec install yet, since it's such a pane in the ass, with network ssl add-ons and all that.. , also had a backup running first, and deaktivated or deinstalked the old Jason. File hiperion add-ons... So will give ut a try ?
-
Maybe, only that I did try it with an all different setup too, like I wrote, I had another Arduino, and now got me another stripe WS2812B's, and that did not react as well.......!!!!
-
Yea, WOW...
I did a new raspberry Busta install now, to have a try on Hyperion.ng, with the new LED + OLD AMBIBOX setup Arduino and direct pin Connection. Old showed no reaction, the new one, first and last one lights up, that's it. Only that this time the puti status..service gives no errors, vendor is enabled, and says it's all running .. The external device is found and working on all devices. The start Rainbow does not show up at all anymore.
This is the sketch I'm currently running on my Arduino's
#include "FastLED.h"
#define ANALOG_MODE_AVERAGE 0
#define ANALOG_MODE_LAST_LED 1
/**************************************
S E T U P
set following values to your needs
**************************************/
#define INITIAL_LED_TEST_ENABLED true
#define INITIAL_LED_TEST_BRIGHTNESS 32 // 0..255
#define INITIAL_LED_TEST_TIME_MS 500 // 10..
// Number of leds in your strip. set to "1" and ANALOG_OUTPUT_ENABLED to "true" to activate analog only
// As of 26/1/2017:
// 582 leaves ZERO bytes free and this
// 410 is ok
// tested with 500 leds and is fine (despite the warning)
#define MAX_LEDS 90 // depending on the strip 180
// type of your led controller, possible values, see below
#define LED_TYPE WS2812B
// 3 wire (pwm): NEOPIXEL BTM1829 TM1812 TM1809 TM1804 TM1803 UCS1903 UCS1903B UCS1904 UCS2903 WS2812 WS2852
// S2812B SK6812 SK6822 APA106 PL9823 WS2811 WS2813 APA104 WS2811_40 GW6205 GW6205_40 LPD1886 LPD1886_8BIT
// 4 wire (spi): LPD8806 WS2801 WS2803 SM16716 P9813 APA102 SK9822 DOTSTAR
// For 3 wire led stripes line Neopixel/Ws2812, which have a data line, ground, and power, you just need to define DATA_PIN.
// For led chipsets that are SPI based (four wires - data, clock, ground, and power), both defines DATA_PIN and CLOCK_PIN are needed
// DATA_PIN, or DATA_PIN, CLOCK_PIN
#define LED_PINS 6 // 3 wire leds
//#define LED_PINS 6, 13 // 4 wire leds
#define COLOR_ORDER GRB // colororder of the stripe, set RGB in hyperion
#define OFF_TIMEOUT 15000 // ms to switch off after no data was received, set 0 to deactivate
// analog rgb uni color led stripe - using of hyperion smoothing is recommended
// ATTENTION this pin config is default for atmega328 based arduinos, others might work to
// if you have flickering analog leds this might be caused by unsynced pwm signals
// try other pins is more or less the only thing that helps
#define ANALOG_OUTPUT_ENABLED false
#define ANALOG_MODE ANALOG_MODE_LAST_LED // use ANALOG_MODE_AVERAGE or ANALOG_MODE_LAST_LED
#define ANALOG_GROUND_PIN 8 // additional ground pin to make wiring a bit easier
#define ANALOG_RED_PIN 9
#define ANALOG_GREEN_PIN 10
#define ANALOG_BLUE_PIN 11
// overall color adjustments
#define ANALOG_BRIGHTNESS_RED 255 // maximum brightness for analog 0-255
#define ANALOG_BRIGHTNESS_GREEN 255 // maximum brightness for analog 0-255
#define ANALOG_BRIGHTNESS_BLUE 255 // maximum brightness for analog 0-255
#define BRIGHTNESS 255 // maximum brightness 0-255
#define DITHER_MODE BINARY_DITHER // BINARY_DITHER or DISABLE_DITHER
#define COLOR_TEMPERATURE CRGB(255,255,255) // RGB value describing the color temperature
#define COLOR_CORRECTION TypicalLEDStrip // predefined fastled color correction
//#define COLOR_CORRECTION CRGB(255,255,255) // or RGB value describing the color correction
// Baudrate, higher rate allows faster refresh rate and more LEDs
#define serialRate 460800 // use 115200 for ftdi based boards
//#define serialRate 115200 // use 115200 for ftdi based boards
//#define serialRate 500000 // use 115200 for ftdi based boards
/**************************************
A D A L I G H T C O D E
no user changes needed
**************************************/
// 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;
unsigned long endTime;
// Define the array of leds
CRGB leds[MAX_LEDS];
// set rgb to analog led stripe
void showAnalogRGB(const CRGB& led) {
if (ANALOG_OUTPUT_ENABLED) {
byte r = map(led.r, 0,255,0,ANALOG_BRIGHTNESS_RED);
byte g = map(led.g, 0,255,0,ANALOG_BRIGHTNESS_GREEN);
byte b = map(led.b, 0,255,0,ANALOG_BRIGHTNESS_BLUE);
analogWrite(ANALOG_RED_PIN , r);
analogWrite(ANALOG_GREEN_PIN, g);
analogWrite(ANALOG_BLUE_PIN , b);
}
}
// set color to all leds
void showColor(const CRGB& led) {
#if MAX_LEDS > 1
ANALOG_OUTPUT_ENABLED == false
LEDS.showColor(led);
#endif
showAnalogRGB(led);
}
// switch of digital and analog leds
void switchOff() {
#if MAX_LEDS > 1
ANALOG_OUTPUT_ENABLED == false
memset(leds, 0, MAX_LEDS * sizeof(struct CRGB));
FastLED.show();
#endif
showAnalogRGB(leds[0]);
}
// function to check if serial data is available
// if timeout occured leds switch of, if configured
bool checkIncommingData() {
boolean dataAvailable = true;
while (!Serial.available()) {
if ( OFF_TIMEOUT > 0 && endTime < millis()) {
switchOff();
dataAvailable = false;
endTime = millis() + OFF_TIMEOUT;
}
}
return dataAvailable;
}
// main function that setups and runs the code
void setup() {
Serial.begin(serialRate);
// analog output
if (ANALOG_OUTPUT_ENABLED) {
// additional ground pin to make wiring a bit easier
pinMode(ANALOG_GROUND_PIN, OUTPUT);
digitalWrite(ANALOG_GROUND_PIN, LOW);
pinMode(ANALOG_BLUE_PIN , OUTPUT);
pinMode(ANALOG_RED_PIN , OUTPUT);
pinMode(ANALOG_GREEN_PIN, OUTPUT);
}
int ledCount = MAX_LEDS;
if (ANALOG_MODE == ANALOG_MODE_LAST_LED) {
ledCount--;
}
#if MAX_LEDS > 1
ANALOG_OUTPUT_ENABLED == false
FastLED.addLeds<LED_TYPE, LED_PINS, COLOR_ORDER>(leds, ledCount);
#endif
// color adjustments
FastLED.setBrightness ( BRIGHTNESS );
FastLED.setTemperature( COLOR_TEMPERATURE );
FastLED.setCorrection ( COLOR_CORRECTION );
FastLED.setDither ( DITHER_MODE );
// initial RGB flash
#if INITIAL_LED_TEST_ENABLED == true
for (int v=0;v<INITIAL_LED_TEST_BRIGHTNESS;v++)
{
showColor(CRGB(v,v,v));
delay(INITIAL_LED_TEST_TIME_MS/2/INITIAL_LED_TEST_BRIGHTNESS);
}
for (int v=0;v<INITIAL_LED_TEST_BRIGHTNESS;v++)
{
showColor(CRGB(v,v,v));
delay(INITIAL_LED_TEST_TIME_MS/2/INITIAL_LED_TEST_BRIGHTNESS);
}
#endif
showColor(CRGB(0, 0, 0));
Serial.print("Ada\n"); // Send "Magic Word" string to host
boolean transmissionSuccess;
unsigned long sum_r, sum_g, sum_b;
// loop() is avoided as even that small bit of function overhead
// has a measurable impact on this code's overall throughput.
for(;;) {
// wait for first byte of Magic Word
for (i = 0; i < sizeof prefix; ++i) {
// If next byte is not in Magic Word, the start over
if (!checkIncommingData()
prefix[i] != Serial.read()) {
i = 0;
}
}
// Hi, Lo, Checksum
if (!checkIncommingData()) continue;
hi = Serial.read();
if (!checkIncommingData()) continue;
lo = Serial.read();
if (!checkIncommingData()) continue;
chk = Serial.read();
// if checksum does not match go back to wait
if (chk != (hi ^ lo ^ 0x55)) continue;
memset(leds, 0, MAX_LEDS * sizeof(struct CRGB));
transmissionSuccess = true;
sum_r = 0;
sum_g = 0;
sum_b = 0;
int num_leds = min ( MAX_LEDS, (hi<<8) + lo + 1 );
// read the transmission data and set LED values
for (int idx = 0; idx < num_leds; idx++) {
byte r, g, b;
if (!checkIncommingData()) {
transmissionSuccess = false;
break;
}
r = Serial.read();
if (!checkIncommingData()) {
transmissionSuccess = false;
break;
}
g = Serial.read();
if (!checkIncommingData()) {
transmissionSuccess = false;
break;
}
b = Serial.read();
leds[idx].r = r;
leds[idx].g = g;
leds[idx].b = b;
#if ANALOG_OUTPUT_ENABLED == true && ANALOG_MODE == ANALOG_MODE_AVERAGE
sum_r += r;
sum_g += g;
sum_b += b;
#endif
}
// shows new values
if (transmissionSuccess) {
endTime = millis() + OFF_TIMEOUT;
#if MAX_LEDS > 1
ANALOG_OUTPUT_ENABLED == false
FastLED.show();
#endif
#if ANALOG_OUTPUT_ENABLED == true
#if ANALOG_MODE == ANALOG_MODE_LAST_LED
showAnalogRGB(leds[MAX_LEDS-1]);
#else
showAnalogRGB(CRGB(sum_r/MAX_LEDS, sum_g/MAX_LEDS, sum_b/MAX_LEDS));
#endif
#endif
}
}
} // end of setup
void loop() {
// Not used. See note in setup() function.
}