|
|
|||
![]() |
Processing ist eine objektorientierte, stark typisierte Programmiersprache mit zugehöriger integrierter
Entwicklungsumgebung. Die Programmiersprache ist auf die Einsatzbereiche Grafik,
Simulation und Animation spezialisiert. Processing wird in einem quelloffenen Projekt entwickelt,
das am Massachusetts Institute of Technology von Ben Fry (Broad Institute) und Casey Reas
(UCLA Design|Media Arts) initiiert wurde. Processing hat den Charakter einer stark vereinfachten
Version der Programmiersprache Java, ermöglicht Interaktionen und visuelle Elemente zu programmieren
und richtet sich vorwiegend an Gestalter, Künstler und Programmieranfänger.
Die Klassenbibliotheken der Programmiersprache zielen vor allem auf das Einsatzgebiet von
Processing ab und berücksichtigen die Themen Video, Grafik, Grafikformate, Sound, Animation,
Typographie, 3D, Simulation, Datenzugriff und -transfer, sowie Netzwerkprotokolle.
Im Jahr 2005 wurde Processing mit einer Goldenen Nica des Prix Ars Electronica in der
Kategorie Net Vision/Net Excellence ausgezeichnet. (Quelle:https://de.wikipedia.org/wiki/Processing) Entwicklung der Versionen Version 1.0 im November 2008 Version 1.5 im April 2011 (Vereinfachte Entwicklungsumgebung für Android-Geräte Version 2.0 im September 2021 (Große Überarbeitung der gesamten Sprache) Version 2.1 im Oktober 2013 Version 3.0 im September 2015 (Große Überarbeitung (u.a. Rendering, Editor, Interface)) Zur Zeit (November 2021) liegt die Beta 2 Version 4.0 vor und zwar nur in der 64-bit Version für Windows, Linux und Mac OS X Internetseite: https://processing.org/de/download/ |
||
|
Quelle: https://blogs.iad.zhdk.ch/physical-computing-hs-12/08-arduino-und-processing/index.html Arduino - Processing Da die Arduino IDE auf Processing basiert, eignen sich die beiden Programmierumgebungen auch perfekt, um Daten untereinander auszutauschen. Auf der Arduino-Seite nutzt man dazu die Funktion Serial.print(), um Daten an Processing zu schicken und Serial.read(), um Daten von Processing zu empfangen. Auf Processing-Seite nutzt man die Serial library, die schon in Processing integriert ist. Um Daten vom Arduino in Processing zu empfangen, nutzt man ebenfalls die read()- Funktion und um Daten an das Arduino zu schicken die write()-Funktion. |
![]() |
||
|
|
|||
|
Als erstes muss man wissen, an welchem Port der Arduino angeschlossen ist. In der Arduino IDE kann man das
leicht ablesen. Benutzt man dagegen Processing, so kann man sich mit folgendem Programm die verfügbaren Ports
anzeigen lassen und den benötigten Port einfügen. import processing.serial.*; Serial myPort; // Serielle Schnittstelle definieren printArray(Serial.list()); |
|||
| Im ersten Beispiel wird ein Text vom Arduino über die Serielle Schnittstelle in Processing ausgegeben. | |||
![]() |
|
||
|
|
|||
| In diesem Beispiel werden die Zahlen 60 bis 120 in Processing ausgegeben. Es sind jeweils 6 Zahlen, dann bleibt das Fenster für 2 Sekunden stehen und die nächsten 6 Zahlen werden ausgegeben. | |||
![]() |
|
||
|
|
|||
| In diesem Beispiel wird die LED aus der Arduino IDE selbstständig an- und ausgeschaltet. Gleichzeitig ändert das Quadrat in Processing seine Farbe von rot nach grau usw. Die LED ist an Pin 11 und GND angeschlossen. | |||
![]() |
|
||
|
|
|||
| In diesem Beispiel wird die LED aus dem Processing-Programm angeschaltet. Dazu führt man den Mauszeiger auf das graue Fenster und drückt die Maustaste. Solange diese gedrückt ist, leuchtet die LED. Die LED ist mit Pin 11 und GND verbunden. | |||
![]() |
|
||
|
|
|||
|
In diesem Beispiel wird die LED aus dem Processing-Programm an- und ausgeschaltet. Dazu führt man den Mauszeiger auf das
farbige Fenster, drückt die linke oder rechte Maustaste. Bei linker Maustaste leuchtet die LED, beim Drücken der rechten Maustaste
erlischt die LED. Mit dem Potentiometer kann die Farbe(im blauen Bereich) des Fensters verändert werden. Dieses Beispiel findet man auch auf folgender Seite: https://maker.pro/arduino/tutorial/how-to-make-arduino-and-processing-ide-communicate | |||
![]() |
|
||
![]() |
|||
|
|
|||
|
Um Buttons, Sliders, RadioButtons, Checkboxes etc. in Processing ohne großen Aufwand in Processing einzufügen, gibt es
die GUI-Library ControlP5. Dies Umgebung wurde von Andreas Schlegel entwickelt, das letzte Update datiert vom 30.07.2015 und
kann von folgender Seite heruntergeladen werden (Version 2.2.5). http://www.sojamo.de/libraries/controlP5/ bzw. von https://github.com/sojamo/controlp5 Installieren der Library: Viele Libraries sind schon mit Namen in einem Menüpunkt aufgelistet. Diese Liste ruft man auf mit Sketch -> Library importieren -> Library hinzufügen... . Dann öffnet sich das sog. Contribution Manager- Fenster. Hier findet man die verfügbaren Libraries alphabetisch geordnet. Man scrollt auf ControlP5 und klickt auf den Button Install. Dann wird diese Library installiert. Mit dem Slider wird der Wert für die LED verändert. Dazu muss die LED mit einem digitalen Eingang verbunden werden, der Signale im sog. PWM (Pulsweitenmodus) aufnimmt. Mit Hilfe dieser Technik kann die Spannung variiert werden. Nähere Informationen darüber findet man auf z.B. https://www.exp-tech.de/blog/arduino-tutorial-pulsweitenmodulation-pwm Beim Arduino sind dies die digitalen Eingänge, die eine Tilde in der Beschriftung haben. | |||
![]() |
|
||
![]() |
|||
|
|
|||
| Mit Hilfe eines Sliders wird ein Servo gesteuert. Das Programm aus Processing, um die LED zu steuern, kann ohne Änderungen übernommen werden. | |||
![]() |
|
||
![]() |
|||
|
|
|||
| Mit Hilfe von zwei Buttons in Processing wird eine LED ein- bzw. ausgeschaltet. Dazu muss ebenfalls wie schon oben beschrieben die Library ControlP5 installiert sein. | |||
![]() |
|
||
![]() |
|||
|
|
|||
|
Zwei Potentiometer werden an den Arduino angeschlossen. Die Werte werden in der Processing-Umgebung als
variables Säulendiagramm angezeigt. Dieses Beispiel stammt von der folgenden Seite: https://www.codeiseverywhere.com/post/reading-analog-input-in-processing-from-arduino | |||
![]() |
|
||
|
// Processing Code - Teil 1 import processing.serial.*; Serial myPort; String data=""; int horizontal, vertical; void setup() { size (600, 600); String portName = Serial.list()[1]; myPort = new Serial(this, "/dev/ttyUSB0", 9600); myPort.bufferUntil('\n'); background(128, 128, 128); } void draw() { background(178, 178, 178); // Title Text textSize(45); textAlign(CENTER); fill(0, 0, 0); text("Werte zweier Potis", width / 2.0, 80); // Left Rectangle fill(80,32,240); stroke(202,18,18); rectMode(CENTER); rect(width / 3.5, (height - ((horizontal * 0.40) / 2) - 75), width / 4, horizontal * 0.40, 20); textSize(40); textAlign(CENTER); fill(0, 0, 0); text("Poti 1 "+String.valueOf(horizontal), width / 3.5, height - 10); |
// Processing Code - Teil 2 // Right Rectangle fill(0,255,0); stroke(0,18,18); rectMode(CENTER); rect(width / 1.5, (height - ((vertical * 0.40) / 2) - 75) , width / 4,vertical * 0.40, 20); textSize(40); textAlign(CENTER); fill(0, 0, 0); text("Poti 2 "+String.valueOf(vertical), width / 1.5, height - 10); } void serialEvent (Serial myPort) { // reads the data from the Serial Port data = myPort.readStringUntil('\n'); // if you got any bytes other than the linefeed: if (data != null) { data = trim(data); // split the string at ":" String items[] = split(data, ':'); if (items.length > 1) { //--- Roll,Pitch in degrees horizontal = int(items[0]); vertical = int(items[1]); } } } |
||
![]() |
|||
|
|
|||
| Die Werte für Temperatur und Luftfeuchtigkeit (DHT11) werden als Säulendiagramm in der Processing-Umgebung variabel angezeigt. Der Code für die Processing-Umgebung kann fast genau so wie beim Potentiometer-Code übernommen werden. Lediglich der Text muss entsprechend geändert werden. Zusätzlich wurde die Erstellung der Säulendiagramme verändert. Diese Lösung sieht einfacher aus als bei der Potentiometerwerte-Darstellung aus. | |||
![]() |
|
||
|
// Processing Code - Teil 1 import processing.serial.*; Serial myPort; String data=""; int horizontal, vertical; void setup() { size (600, 600); String portName = Serial.list()[1]; myPort = new Serial(this, "/dev/ttyUSB0", 9600); myPort.bufferUntil('\n'); background(128, 128, 128); } void draw() { background(178, 178, 178); // Title Text textSize(45); fill(0, 0, 0); text("Luftfeuchtigkeit - Temperatur",50, 80); // Linkes Rechteck fill(80,32,240); stroke(202,18,18); strokeWeight(4); stroke(100,100,1008);strokeWeight(4); line(0,500,width,500); fill(80,32,240); stroke(202,18,18);strokeWeight(4); textSize(30); fill(0, 0, 0); text("Hydro "+String.valueOf(horizontal), 100,550); |
// Processing Code - Teil 2 // Rechtes Rechteck fill(0,255,0); stroke(0,18,18); strokeWeight(4); rect(350,500,150,-vertical*4); textSize(30); fill(0, 0, 0); text("Temp "+String.valueOf(vertical), 350,550); } void serialEvent (Serial myPort) { data = myPort.readStringUntil('\n'); if (data != null) { data = trim(data); // split the string at ":" String items[] = split(data, ':'); if (items.length > 1) { horizontal = int(items[0]); vertical = int(items[1]); println(horizontal); println(vertical); } } } |
||
![]() |
![]() |
||