Montag, 8. Juni 2015

LED am Arduino über grafische Oberfläche am PC steuern

Heute wollen wir über Processing eine grafische Oberfläche erstellen, die eine LED am Arduino steuert.


Die Funktionsweise

Wir wollen eine grafische Oberfläche bauen, die einen Button enthält. Wenn dieser Button gedrückt wird, soll die LED an/ausgeschaltet werden, und das PC Programm eine Rückmeldung geben beziehungsweise anzeigen, ob die LED an oder aus ist. Um dem Arduino mitzuteilen, wie er die LED schalten soll, schicken wir ihm eine Nachricht über die serielle Verbindung zum PC durch das USB Kabel. Ausführlich Erklärung der seriellen Verbindung: hier.

Der Processing Sketch

Damit das Processing Programm überhaupt ein Feld erzeugt, indem man Objekte, wie beispielsweise Buttons, platzieren kann, verwendet man die Funktion size() im Setup Teil. Diese erzeugt ein Fenster der in Klammern angegeben Größe(Einheit Pixel). Nun der Button. Die einfachste Möglichkeit in Processing einen Button zu erstellen, ist in das Feld ein Rechteck über die Funktion rect() zu zeichnen. Dieser gibt man erst die x Koordinate der linken oberen Ecke, dann die y Koordinate der linken oberen Ecke und dann die Breite, sowie die Höhe des Rechtecks mit. Um nun zu überprüfen, ob der Knopf gedrückt wurde, also die Maus auf dem Rechteck geklickt wurde, frägt man die aktuelle Position der Maus ab, sobald diese gedrückt wurde. Die Koordinaten der Maus werden über mouseX sowie mouseY abgefragt. Da wir nur die Position überprüfen wollen, wenn die Maus gedrückt ist, müssen wir die Abfrage in void mousePressed() {} einfügen. Void mousePressed ist ein Programmteil, ähnlich wie draw/loop oder setup, der aber nur jedes Mal, wenn die Maus gedrückt wird, einmal ausgeführt wird.
Um nun auch dem Benutzer am PC anzuzeigen, ob die LED gerade an oder aus ist, können wir die Hintergrundfarbe unseres Programmfensters abändern. Dazu verwendet man die Funktion backgroud(rot, grün, blau). Ihr gibt man die Farben im Mischverhältnis aus rot, grün und blau an. So wäre background(0,0,255); ein dunkles blau. 
Zusätzlich geben wir über fill() dem Button eine Farbe, im selben Format, wie bei background().
Natürlich müssen wir, wie gestern gelernt, mit dem Arduino  eine serielle Verbindung herstellen. Über den Befehl seriellesObjekt.write(Zahl oder Text in Anführungszeichen); schicken wir ihm laufend den aktuellen Status der LED. Insgesamt sieht der Processing Sketch so aus:

Der Arduino Sketch

Der Arduino Sketch ist relativ simpel. Man muss die serielle Verbindung, mit der Datenrate 9600, wie bei Processing, starten und einen LED Pin seiner Wahl als OUTPUT definieren. Anschließend wird im LoopTeil laufend überprüft, ob etwas empfangen wurde, über Serial.available() > 0. Wenn das zutrifft wird die Nachricht in die Variable empfangen, vom Typ Zahl, gespeichert. Danach wird überprüft, ob empfangen 1 ist, und die LED angeschaltet wird, oder ob die Zahl 0 ist, und die LED ausgeschaltet wird. Das sieht als Sketch so aus:

Die Verkabelung

Man muss nur das kurze Bein der LED an den Ground anschließen, und das lange Bein der LED an den oben gewählten digitalPin des Arduino.

Das Ergebnis:


Kommentare:

  1. wie kann ich den Button erzeugen?

    AntwortenLöschen
    Antworten
    1. Der Button ist nur ein Rechteck auf der Zeichenfläche und wenn die Maus über dem Rechteck geklickt wurde, wird der Button aktiviert.

      Löschen