kramann.info
© Guido Kramann

Login: Passwort:










kramann.info
© Guido Kramann

Login: Passwort:




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.

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.

Ergebnis.

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.