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.