Blinkencontrol beta | |
---|---|
generischer Blinkenlightfoo | |
Ort | Laptop Lounge |
Beteiligt | derf |
Quelltext | github |
Eine Instanz hängt in der Laptop Lounge und steuert den RGB-Streifen im Schaufenster. Angeschlossen per GPIO an donationprint, Ansteuerung wie gewohnt per dorfmap (siehe auch Lichtsteuerung).
Protokoll
Vier Byte: mode red green blue. Zuerst wird mode übertragen, danach die Farben. Jeweils most significant bit first.
red, green und blue sind PWM-Level von 0 (aus) bis 255 (maximale Helligkeit). Beachten: Es findet derzeit keine Helligkeitsanpassung statt, d.h. es wird linear gefadet, während das menschliche Auge Helligkeit logarithmisch wahrnimmt.
mode == MMMS SSSS setzt sich aus dem Betriebsmodus (MMM) und der Fade- / Blinkgeschwindigkeit (SSSSS) zusammen. Geschwindigkeit 0 ist am schnellsten, Geschwindigkeit 31 am Langsamsten. Wenn ein anderer Modus als 000 übertragen wird, müssen red, green und blue Null sein. Modi:
Modus (Bits) | Wat |
---|---|
000 | steady (Dauerleuchten) |
001 | RGB, kein Fading |
010 | Zufallsfarbe, kein Fading |
011 | none |
100 | none |
101 | RGB Fading |
110 | Zufallsfarbe Fading |
111 | none |
netcat-API
Obiges Protokoll kann zur Ansteuerung der Lounge-RGB-Leiste direkt auf donationprint:25465 genutzt werden. Die erste Zeile wählt das Blinkendevice aus (d.h. aktuell immer "blinkencontrol1"), danach kommen (jeweils durch newline getrennt) die Werte für mode, red, green, blue als Zahlen (ASCII) von 0 bis 255. Die Werte werden entweder durch "push" oder Beenden der Verbindung übernommen.
Zu beachten: Der Zugriff ist nicht-exklusiv, d.h. wenn mehrere Clients gleichzeitig Daten reinwerfen, kommt Müll raus. Auch: Bei Eingabe von Zahlen, die nicht innerhalb von 0 bis 255 sind, kann irgendwas undefiniertes passieren.
Beispiel für Strobo mit Zufallsfarben:
(
echo blinkencontrol1
while sleep 0.01; do
echo "0\n0\n0\n0\npush"
sleep 0.01
echo "0\n$((RANDOM%256))\n$((RANDOM%256))\n$((RANDOM%256))\npush"
done
) | nc donationprint 25465