kramann.info
© Guido Kramann

Login: Passwort:










3 Ausnutzung der Standardbefehle und Standardlibraries von Processing für mechatronische Anwendungen

3 Exploitation of Processing's standard commands and standard libraries for mechatronic applications (EN google-translate)

3 Eksploatacja standardowych poleceń i standardowych bibliotek Processing dla aplikacji mechatronicznych (PL google-translate)

x-y-Plot erstellen

Create an x-y plot

Utwórz wykres x-y

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 3-1: Testweise Zackenlinie plotten.

Testweise Zackenlinie plotten.

Bild 3-1: Testweise Zackenlinie plotten.

Serielle Verbindung

Serial connection

Połączenie szeregowe

Hereinkommende serielle Daten werden als ein Plot dargestellt.

Incoming serial data is displayed as a plot.

Przychodzące dane szeregowe są wyświetlane jako wykres.


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.

In this way it was researched how to use the serial library.

W ten sposób zbadano, jak korzystać z biblioteki szeregowej.

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 3-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 3-3: Mikrocontroller-Testprogramm.

Ergebnis.

Bild 3-2: Ergebnis.

USB-Kamera

USB-Camera

Kamera USB

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.

When using the standard library processing.video so far no USB camera are addressed, however, there is the processing additional library GSVideo, the processing can be added.

Podczas korzystania ze standardowej biblioteki processing.video do tej pory nie Kamera USB jest adresowana, jednak istnieje dodatkowa biblioteka GSVideo do przetwarzania, przetwarzanie można dodać.

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 3-4: GettingStartedCaptureLinux aus der Zusatz-Library "GSVideo".

3D-Animation

3D-Animation

Animacja 3D

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 3-5: Einfaches Beispiel zu 3D-Animation.