Unicorn Shield erweiterte Demo

Unicorn Shield erweiterte Demo Titelbild

Coding Unicorn Shield Demo

Demo Code on Coding Unicorn Shield

Hier findest du ein simples Demo Programm für dein Unicorn Shield und den Raspberry Pi programmiert in Python.

Was brauchst du

  1. Einen laufenden Raspberry Pi mit dem Installierten Einhorn Bibliothek
  2. Ein Shield was mit deine Raspberry Pi Verbunden ist

Das Programm

demo.py

import unicornshield as unicorn
from time import sleep
from random import randint

while True:
    print unicorn.buttonPressed()
    if unicorn.nose() > 0.3:
        unicorn.clear()
        unicorn.leftEyeOn()
        sleep(0.5)
        unicorn.rightEyeOn()
        sleep(0.5)
        unicorn.leftEyeOff()
        sleep(0.5)
        unicorn.rightEyeOff()

        for x in range(9):
            unicorn.setPixel(x,255,0,255)
            unicorn.show()
            sleep(0.2)
        sleep(2)
        for x in range(9):
            unicorn.setPixel(x,0,0,0)
            unicorn.show()
            sleep(0.1)

    elif unicorn.buttonPressed() == True:
        colors = [0,0,0]
        for x in range(3):
            for y in range(255):
                    colors[x] = y
                    unicorn.setAll(colors[0],colors[1],colors[2])
                    unicorn.show()
                    sleep(0.01)
            colors[x] = 0
            sleep(2)
        unicorn.clear()

    else:
        unicorn.setAll(randint(0,255),randint(0,255),randint(0,255))
        unicorn.show()

Das Programm ausführen

Du kannst dein Programm einfach mit dem Befehl sudo python demo.py starten und jederzeit wieder mit Ctrl + C beenden. Wichtig ist das du das sudo nicht vergisst, dann um auf die Hardware zuzugreifen welches das Signal für die Pixel/WS2128B zu erstellen werden root rechte gebraucht.

Schritt für Schritt erklärt

In den ersten drei Zeilen importieren wir alle benötigten Bibliothken. Wir brauchen die unicornshield welche du schon installiert haben solltest und unicornshield schon ein sehr langer begriff ist nutzen wir einen kürzeren mit as unicorn. Das kannst du dir ähnlich wie einen Spitznamen vorstellen. Damit unsere Animationen schöner aussehen importieren wir auch die sleep() Funktion und aus der time Bibliothek auch die randint() Funktion aus der random Bibliothek.

Das Gesammte restliche Programm ist in einer while-Schleife welche in Zeile 5 anfängt und immer wahr ist und solange läuft bis das Programm beendet wird.

In dieser Schleife gibt es in Zeile 6, 26 und 38 eine if-Bedingung mit drei verschiedenen Optionen. Die erste wird in Zeile 6 kontrolliert ist wahr wenn die Funktion .nose() weniger als 0,3 zurück gibt, das ist in der regel dann der Fall wenn in eine hellen Rau jemand den Sensor mit dem Finger oder der Hand verdunkelt. Wenn das der Fall ist, wird der eingerückte Block von Zeile 7 bis 24 ausgeführt.

In Zeile 7 wird zuerst sichergestellt das alle Pixel LEDs ausgeschaltet sind, dafür wird die Funktion .clear() benutzt. Im ersten Teil von Zeile 8 bis 14 werden die LEDs auf den Augen zuerst angeschaltet und dann wieder ausgeschaltet. Für das benutzen wir die funktionen .leftEyeOn() bzw. .leftEyeOff(). Mit der .sleep() Funktion können wir dann Pausen einbauen, damit das Ein und Aus überhaupt für einen Menschen zu sehen ist.

In Zeile 16 bis 24 erstellen wir eine Animation für die Pixel. Dafür erstellen wir zuerst eine for-Schleife mit der wir jede einzelnen Pixel einschalten. Mit der .setPixel() können wir jedem Pixel auf dem Shield eine spezielle Farbe geben. Der erste Parameter und ist dabei die Position und geht von 0 bis 8. Die nächsten 3 Parameter sind für die Farbe. Mit 255,0,255 erzeugen wir die Farbe Pink. Mit der .show() Funktion werden dann die Farben auch auf dem Shield dargestellt. In Zeile 19 gibt es dann noch eine Kurze sleep(0.2) Funktion damit wir auch wirklich sehen das sich die LEDs langsam auffüllen. In Zeile 21 bis 24 machen wir das genaue gegenteil. Wir schalten die Pixel eine nach der anderen aus. Dafür benutzen wir auch wieder die .setPixel() Funktion. Diesmal benutzen wir als Farbparameter aber nur die 0, also 0,0,0. Weil wir kein Schwarzes Licht mit den LEDs anzeigen können werden sind die einfach ausgeschaltet.

In Zeile 26 haben wir eine weitere elif Bedingung. Diese Bedingung wird nur dann geprüft wenn die erste Bedingung in Zeile 6 falsch gewesen ist. Die elif Bedingung ist dann wahr wenn .buttonPressed() gleich True ist und alles eingerückte von Zeile 27 bis 36 wird ausgeführt. Das bedeutet das der Taster welcher sich auf dem Linken Ohr des Einhorns befindet gedrückt wird. In den nächsten Code Zeilen werden wir uns noch weiter mit den Pixel LEDs und dem RGB Farbsystem beschäftigen. RGB steht für Rot, Grün und Blau und mit diesen drei Farben lassen sich die meisten sichtbaren Farben mischen. Wenn du Online nach einem RGB Color Picker suchst wirst du auch diverse Graphische Anzeigen dafür finden. Die Verschidenen Werte kannst du deswegen zusammen mischen weil du als Parameter eine Zahl zwischen 0 und 255 angeben kannst. Unser Grün ist z.B.: 0,255,150 aber in diesem Beispiel wollen wir nicht nur einfach Farben Mischen sondern auch die verschiedenen Helligkeiten und Möglichkeiten Zeigen. Dafür erstellen wir zuerst eine Liste mit denm colors in Zeile 27. In der nächsten Zeile erstellen wir eine Schleife die uns dabei hilft den eingerückten Code genau 3 mal hintereinander auszuführen. Das ist wirklich praktisch weil wir für einen RGB Farb Code auch immer drei unterschiedliche Farben brauchen. In der Schleife befindet sich eine weitere Schleife, aber diese Schleife zählt von 0 bis 255. Den 255 ist auch der Maximal Wert welcher für eine Farbwert angezeigt werden kann. Weil wir Code sparen wollen, das sollte immer dein Ziel sein bei deinem Programm, speichen wir den aktuellen Wert von y in der Liste für die Farbe. (colors[1] speichert den Farbwert für Grün). Im nächsten Schritt benutzen wir die .setAll() Funktion. Diese Funktion unterscheidet sich von der .setPixel() Funktion weil für diese nur 3 Parameter übergeben werden müssen. Wir müssen nicht die Position von einem Pixel angeben weil wir mit dieser Funktion einen Farbwert für alle Pixel festlegen. Für die Übergabe der 3 Parameter benutzen wir wieder die colors liste. Mit .show() stellen wir sicher das die Farbänderungen auch wirklich angezeigt werden. Mit einem wirklich kurzen Kurzen Pause dem sleep(0.01) sorgen wir dafür das diese kleinen Änderungen auch wirklich zu sehen sind. In Zeile 33 ist das ende der Schleife, diese fängt wenn sie durchgelaufen ist wieder in Zeile 30 an bis y ganz bis nach 255 gezählt ist.

Der letzte Schritt ist der else also sonst teil. Dieser teil ist nur wahr und der eingerückte Code wir nur dann ausgeführt wenn die beiden vorherigen Bedingungen in Zeile 6 und Zeile 26 nicht wahr gewesen sind. In diesem Fall wollen wir ein wenig zufällige Kunst erschaffen. Dafür benutzen wir wieder die .setAll() Funktion definieren aber diesmal die Farbwerte nicht selber. Das lassen wir ganz dem Computer und dem Zufall entscheiden. Mit der randint() Funktion können wir zufällige Zahlen erzeugen. randint(0,255) heißt übersetzt erzeuge eine zufällige Zahl zwischen 0 und 255. So erzeugen wir einen Farbwert der jedesmal anders ist. Jetzt brauchen wir nur noch .show() Funktion aufrufen damit diese Kunst auch auf dem Shield zusehen ist.

Zusammenfassung

Mit diesem kleinen Demo Programm haben wir die verschiedenen Aspekte des Einhorn Shields beleuchtet. Gerade die Kombination aus den Eingabe Möglichkeiten über den Taster und den Helligkeitssensor und den vielen Möglichkeiten mit den Pixel und WS2812B lassen sich viele Projekte umsetzen.

Noch Fragen oder Feedback?

Bevor du eine Frage stellen kannst musst du dich zuerst Anmelden oder Regestrieren!