Ausnutzung der Standardbefehle und Standardlibraries von Processing für mechatronische Anwendungen
(EN google-translate)
(PL google-translate)
x-y-Plot erstellen
int x = 0; //quasi globale Variablen int y = 0; int y_alt = 0; int ROT = 255; int BLAU = 0; void setup() { size(600,400); //Fensterbreite und -höhe background(0,0,200); //Fensterhintergrund RGB stroke(200,0,0); smooth(); //Pixelglättung frameRate(50); //draw wird fünfmal pro Sekunde aufgerufen } void draw() { stroke(ROT,0,BLAU); line(x,0,x,399); if(x>0) { stroke(0,255,0); line(x-1,y_alt,x,y); } y_alt =y; x++; if(x==600) { x=0; ROT = 255 - ROT; BLAU = 255 - BLAU; } y++; y%=100; }
Code 0-1: Testweise Zackenlinie plotten.

Bild 0-1: Testweise Zackenlinie plotten.
Serielle Verbindung
Hereinkommende serielle Daten werden als ein Plot dargestellt.
Es ist möglich ziemlich rasch herauszufinden, wie bestimmte Funktionen und Bibliotheken arbeiten: Die Bibliotheken zu Processing werden typischerweise mit Beispielen ausgeliefert. Diese sind über File -> Examples abrufbar.
In dieser Weise wurde recherchiert, wie die serial-Bibliothek zu benutzen ist.
int x = 0; //quasi globale Variablen int y = 0; int y_alt = 0; int ROT = 255; int BLAU = 0; Serial myPort; // Objekt für serielle Kommunikation void setup() { // String portName = Serial.list()[0]; String portName = "/dev/ttyUSB0"; myPort = new Serial(this, portName, 115200); size(600,400); //Fensterbreite und -höhe background(0,0,200); //Fensterhintergrund RGB stroke(200,0,0); smooth(); //Pixelglättung // frameRate(50); //draw wird fünfmal pro Sekunde aufgerufen } import processing.serial.*; void draw() { if ( myPort.available() > 0) //wenn Daten vorhanden sind. { y = myPort.read(); //Daten lesen } stroke(ROT,0,BLAU); line(x,0,x,399); if(x>0) { stroke(0,255,0); line(x-1,y_alt,x,y); } y_alt =y; x++; if(x==600) { x=0; ROT = 255 - ROT; BLAU = 255 - BLAU; } y++; y%=100; }
Code 0-2: Hereinkommende binäre serielle Daten als Plot darstellen.
#include<avr/io.h> //Definition von Taktfrequenz und Bausrate als Konstanten #define TAKTFREQUENZ 9216000 #define BAUDRATE 115200 int main() { unsigned char akku=0; unsigned long pause; DDRA = 0b00000000; DDRB = 0b00000000; DDRD = 0b00000000; DDRC = 0b11111111; //über RS232 gesendete Zahlen sollen auch an //zweiten Mikrocontroller geschickt //und angezeigt werden. //Aktivieren der RS232-Schnittstelle des Mikrocontrollers: //Merken des in UBRR zu speichernden Wertes. unsigned int baudregister = TAKTFREQUENZ/8/BAUDRATE-1; //setzen der Baudrate UBRRH = (unsigned char) (baudregister>>8); //Setzen des HIGH-Bytes des Baudraten-Registers UBRRL = (unsigned char) baudregister; //Setzen des LOW -Bytes des Baudraten-Registers //Einschalten des Senders und des Empfängers UCSRB = (1<<TXEN) | (1<<RXEN); //Setzen des Nachrichtenformats: 8 Datenbits, 1 Stopbits UCSRC = (1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ1); UCSRA = (1<<U2X); //Es soll wiederholt von 0 bis 255 durchgezählt werden und //der aktuelle Wert im Hyperterminal zu sehen sein. while(1) { while( !(UCSRA & (1<<UDRE)) ); //Warten bis der Uebertragungspuffer leer ist UDR = akku; //Daten in den Puffer schreiben und übertragen //Zahl außerdem wie gewohnt nach Port C schicken: PORTC = akku; for(pause=0;pause<20000;pause++) DDRB|=0; //Weiterzählen: akku++; } }
Code 0-3: Mikrocontroller-Testprogramm.

Bild 0-2: Ergebnis.
USB-Kamera
Bei Verwendung der Standard-Library "processing.video" konnte bisher keine USB-Kamera angesprochen werden, jedoch existiert die Processing-Zusatzlibrary "GSVideo", die Processing hinzugefügt werden kann.
import codeanticode.gsvideo.*; GSCapture cam; void setup() { size(640, 480); cam = new GSCapture(this, 640, 480); cam.start(); } void draw() { if (cam.available() == true) { cam.read(); image(cam, 0, 0); // The following does the same, and is faster when just drawing the image // without any additional resizing, transformations, or tint. //set(0, 0, cam); } }
Code 0-4: GettingStartedCaptureLinux aus der Zusatz-Library "GSVideo".
3D-Animation
void setup() { size(600, 600, P3D); // 600 x 600 im 3D (P3D) Modus frameRate(24); // Bildwiederholrate 24 } void draw() { lights(); background(0); pushMatrix(); translate(width/2, height/2, 0); rotateY(radians(frameCount)); fill(0,255,0); box(100); popMatrix(); }
Code 0-5: Einfaches Beispiel zu 3D-Animation.