P R O C E S S I N G

55
I.Dezember 2009 www.processing.org P R O C E S S I N G programmierenvironment für visuell orientierte, interaktive applikationen

description

P R O C E S S I N G. programmierenvironment für visuell orientierte, interaktive applikationen. Warum selbst programmieren?. kreativere lösungen ökonomischer politisch korrekt zugänglich mehr verständnis. 2. J a v a b a s i e r t. size(400, 400); background(192, 64, 0); - PowerPoint PPT Presentation

Transcript of P R O C E S S I N G

Page 1: P R O C E S S I N G

I.Dezember 2009 www.processing.org

P R O C E S S I N G

programmierenvironment für visuell orientierte, interaktive applikationen

Page 2: P R O C E S S I N G

I.Dezember 2009 www.processing.org

Warum selbst programmieren?

kreativere lösungen

ökonomischer

politisch korrekt

zugänglich

mehr verständnis

Page 3: P R O C E S S I N G

I.Dezember 2009 www.processing.org

Page 4: P R O C E S S I N G

I.Dezember 2009 www.processing.org

Page 5: P R O C E S S I N G

I.Dezember 2009 www.processing.org

Page 6: P R O C E S S I N G

I.Dezember 2009 www.processing.org

Page 7: P R O C E S S I N G

I.Dezember 2009 www.processing.org

Page 8: P R O C E S S I N G

I.Dezember 2009 www.processing.org

2

Page 9: P R O C E S S I N G

I.Dezember 2009 www.processing.org

J a v a b a s i e r t

size(400, 400);

background(192, 64, 0);

stroke(255);

line(150, 25, 270, 350);

Page 10: P R O C E S S I N G

I.Dezember 2009 www.processing.org

void setup() { size(400, 400); stroke(255); background(192, 64, 0);

}

void draw() { line(150, 25, mouseX, mouseY); }

Page 11: P R O C E S S I N G

I.Dezember 2009 www.processing.org

h i n t e r g r u n d n e u z e i c h n e n

void setup() {

size(400, 400); stroke(255); }

void draw() { line(150, 25, mouseX, mouseY); } void mousePressed() { background(255, 247, 3); }

Page 12: P R O C E S S I N G

I.Dezember 2009 www.processing.org

e x p o r t

File → Export Application

File → Export

Öffne index.html um den sketch im browser zu sehen

saveFrame("output.png")

Page 13: P R O C E S S I N G

I.Dezember 2009 www.processing.org

size(400, 400);

// falsche art die position anzugeben

ellipse(200, 200, 50, 50);

// immer in der mitte, egal wie sich die size() line verändert

ellipse(width/2, height/2, 50, 50);

Page 14: P R O C E S S I N G

I.Dezember 2009 www.processing.org

size(400, 400, JAVA2D);

size(400, 400, P2D);

size(400, 400, P3D);

size(400, 400, OPENGL);

size(400, 400, PDF, "output.pdf");

Page 15: P R O C E S S I N G

I.Dezember 2009 www.processing.org

// JPEGs hineinladen

// daten von einer datei hineinladen

String[] lines = loadStrings(„irgendein.txt");

PImage image = loadImage(„meinBild.jpg");

Page 16: P R O C E S S I N G

I.Dezember 2009 www.processing.org

l i b r a r i e s

Sketch → Import Library → PDF Export

Page 17: P R O C E S S I N G

I.Dezember 2009 www.processing.org

PrimitivesFloat (32 bit information)(floating-point numbers: 3.40282347E+38)

Int (32 bit)numbers without a decimal point: -2,147,483,647

Bol (true or flase)

Char (Each char is two bytes (16 bits)(typographic symbols such as A, d, and $)

Page 18: P R O C E S S I N G

I.Dezember 2009 www.processing.org

object-oriented programming (OOP)

: : Objekte haben Eigenschaften und Funktionen

: : sie werden über „Klassen“ “classes“ definiert

: : Die class ist die Keksform, der Keks ist das object

Page 19: P R O C E S S I N G

I.Dezember 2009 www.processing.org

Beispiel „cars“ pseudo code normal

Data (Global Variables):Auto Farbe Auto x Position Auto y Position Auto x Geschwindigkeit

Setup:Initialisiere Auto Farbe. Initialisiere Auto Standort am Anfang. Initialisiere Auto Geschwindigkeit

Draw:Füll den Hintergrund Zeig das Auto am richtigen Ort mit der richtigen Farbe Verändere die Autoposition mit der richitgen Geschwindigkeit

Page 20: P R O C E S S I N G

I.Dezember 2009 www.processing.org

color c = color(0); float x = 0; float y = 100; float speed = 1;

void setup() { size(200,200); }

void draw() { background(255); move(); display();

}

void move() { x = x + speed; if (x > width) { x = 0; }

}

void display() { fill(c); rect(x,y,30,10); }

Page 21: P R O C E S S I N G

I.Dezember 2009 www.processing.org

Pseudo code object orientiert

Data (Global Variables):Auto Objekt.

Setup:Initialisiere Auto Objekt.

Draw:Füll den Hintergrund Zeig das Auto Objekt. Bewege das Auto Objekt.

Page 22: P R O C E S S I N G

http://processing.org/learning/objects/

I.Dezember 2009 www.processing.org

Page 23: P R O C E S S I N G

I.Dezember 2009 www.processing.org

Car myCar;

void setup() { myCar = new Car();

}

void draw() { background(255); myCar.move(); myCar.display();

}

Page 24: P R O C E S S I N G

I.Dezember 2009 www.processing.org

C L A S S - E L E M E N T E

1. name - mach keksform class car {

2. Data - nenne variablen

3. Constructor - mach den keks Car myCar = new Car();"

4. methods definier die funktionen durch methods

Page 25: P R O C E S S I N G

I.Dezember 2009 www.processing.org

Page 26: P R O C E S S I N G

I.Dezember 2009 www.processing.org

Class ist ein block, den du überall hinstellen kannst, solange er außerhalb von setup () und draw () ist

void setup() {

}

void draw() {

}

class Car {

}

Page 27: P R O C E S S I N G

I.Dezember 2009 www.processing.org

// Step 1. Deklariere das ObjektCar myCar; void setup() {

// Step 2. Initialisiere das Objekt. myCar = new Car(); }

void draw() { background(255);

// Step 3. Rufe die Funktionen des Objekts aufmyCar.move(); myCar.display(); }

Page 28: P R O C E S S I N G

I.Dezember 2009 www.processing.org

1. Objekt Variable deklarieren

Car myCar;

Page 29: P R O C E S S I N G

I.Dezember 2009 www.processing.org

Primitives v.s.

compex data types

komplexen Datentypen, weil sie mehrere Informationen beinhalten (die Daten und Funktionalitäten. Primitive speichern nur Daten)

Page 30: P R O C E S S I N G

I.Dezember 2009 www.processing.org

Objekt initialisieren

Wenn man eine normale primitive Variable (zum Beispiel eine integer) initiertgibst du ihr einfach einen Wert:

// Variable Initialization

var = 10; // var equals 10

Um ein Objekt zu initialisieren, muss du etwas mehr tun, nicht nur Wert zu weisen, sondern als ganzes konstruieren„construct“. Du konstruierst ein Objekt mit dem neuen Operator

// Object Initialization myCar = new Car(); // The new operator is used to make a new object.

"myCar" ist der Objektname "=„ zeigt an, dass wir etwas neues kreieren, ein neues Keksobjekt, der constructor ruft eine spezielle Funktion namens Car() auf.

Diese Funktion initialisiert automatisch alle Variablen des Objekts. Sie bekommen den Wert null, der aber überhaupt nicht „0“ heißt, sondern einfach gar nichts. Leere.

Die Fehlermeldung "NullPointerException" kommt meist daher, dass du vergessen hast das Objekt zu initialisieren.

Page 31: P R O C E S S I N G

I.Dezember 2009 www.processing.org

Nützung des Objekts

Autos fahren, Blumen wachsen, Sonnen strahlen: spezielle Objekte haben spezielle Funktionen

syntax:

variableName.objectFunction(Function Arguments);

// Functions are called with the "dot syntax".

myCar.draw();

myCar.display();

Page 32: P R O C E S S I N G

I.Dezember 2009 www.processing.org

constructor für mehere objekte nützen

Car myCar = new Car(color(255,0,0),0,100,2);

Page 33: P R O C E S S I N G

I.Dezember 2009 www.processing.org

ARGUMENTS

Arguments sind lokale Variablen, die nur im Inneren einer Funktion verwendet werden und mit Werten gefüllt werden, wenn die Funktion aufgerufen wird.

Page 34: P R O C E S S I N G

I.Dezember 2009 www.processing.org

Sie haben nur einen Zweck:

Die Variablen in einem Objekt zu initialisieren. Das sind die wichtigen Variablen, die die eigentliche Farbe oder die temporäre Position des Autos beinhalten. Die „Arguments“ des „constructors“ sind nur temporär und existieren nur um den Wert vom Entstehungsort des Objekts zum Objekt selbst weiterzuleiten.

Page 35: P R O C E S S I N G

I.Dezember 2009 www.processing.org

ARGUMENTS

Car(color tempC, float tempXpos, float tempYpos, float tempXspeed) {

c = tempC;

xpos = tempXpos;

ypos = tempYpos;

xspeed = tempXspeed;

}

Page 36: P R O C E S S I N G

I.Dezember 2009 www.processing.org

durch diese „arguments“ kannst du mit dem selben constructor viele verschiedene

objekte herstellen

Page 37: P R O C E S S I N G

I.Dezember 2009 www.processing.org

g a n z e r c o d e :

http://www.learningprocessing.com/examples/chapter-8/example-8-2/

Page 38: P R O C E S S I N G

I.Dezember 2009 www.processing.org

P R O C E S S I N G M I T

A R D U I N O V E R B I N D E N

Page 39: P R O C E S S I N G

I.Dezember 2009 www.processing.org

Beispiel CodeExamples- Libraries- Serial – Serial call and response-

Page 40: P R O C E S S I N G

I.Dezember 2009 www.processing.org

schaltkreis

int firstSensor = 0; // first analog sensor

int secondSensor = 0; // second analog sensor

int thirdSensor = 0; // digital sensor

int inByte = 0; // incoming serial byte

Page 41: P R O C E S S I N G

I.Dezember 2009 www.processing.org

processing code

import processing.serial.*;

int bgcolor; // Background colorint fgcolor; // Fill colorSerial myPort; // The serial portint[] serialInArray = new int[3]; // Where we'll put what we receiveint serialCount = 0; // A count of how many bytes we receiveint xpos, ypos; // Starting position of the ballboolean firstContact = false; // Whether we've heard from the microcontroller

void setup() { size(256, 256); // Stage size noStroke(); // No border on the next thing drawnxpos = width/2; // Set the starting position of the ball (middle of the stage)ypos = height/2; println(Serial.list()); // Print a list of the serial ports, for debugging purposesString portName = Serial.list()[0]; myPort = new Serial(this, portName, 9600);}void draw() { background(bgcolor); fill(fgcolor); // Draw the shape ellipse(xpos, ypos, 20, 20);}void serialEvent(Serial myPort) { // read a byte from the serial port: int inByte = myPort.read(); // if this is the first byte received, and it's an A, // clear the serial buffer and note that you've // had first contact from the microcontroller. // Otherwise, add the incoming byte to the array: if (firstContact == false) { if (inByte == 'A') { myPort.clear(); // clear the serial port buffer firstContact = true; // you've had first contact from the microcontroller myPort.write('A'); // ask for more } } else {serialInArray[serialCount] = inByte; serialCount++;

// If we have 3 bytes: if (serialCount > 2 ) { xpos = serialInArray[0]; ypos = serialInArray[1]; fgcolor = serialInArray[2];

println(xpos + "\t" + ypos + "\t" + fgcolor); myPort.write('A'); serialCount = 0; } }}

Page 42: P R O C E S S I N G

I.Dezember 2009 www.processing.org

int firstSensor = 0; // first analog sensorint secondSensor = 0; // second analog sensorint thirdSensor = 0; // digital sensorint inByte = 0; // incoming serial byte

void setup(){ // start serial port at 9600 bps: Serial.begin(9600); pinMode(2, INPUT); // digital sensor is on digital pin 2 establishContact(); // send a byte to establish contact until Processing responds }

void loop(){ // if we get a valid byte, read analog ins: if (Serial.available() > 0) { // get incoming byte: inByte = Serial.read(); // read first analog input, divide by 4 to make the range 0-255: firstSensor = analogRead(0)/4; // delay 10ms to let the ADC recover: delay(10); // read second analog input, divide by 4 to make the range 0-255: secondSensor = analogRead(1)/4; // read switch, multiply by 155 and add 100

// so that you're sending 100 or 255: thirdSensor = 100 + (155 * digitalRead(2)); // send sensor values: Serial.print(firstSensor, BYTE); Serial.print(secondSensor, BYTE); Serial.print(thirdSensor, BYTE); }}void establishContact() { while (Serial.available() <= 0) { Serial.print('A', BYTE); // send a capital A delay(300); }}

Arduino code

Page 43: P R O C E S S I N G

I.Dezember 2009 www.processing.org

Zur Erinnerung :

Page 44: P R O C E S S I N G

I.Dezember 2009 www.processing.org

Wichtig für selbstgemachte sensoren:

Page 45: P R O C E S S I N G

I.Dezember 2009 www.processing.org

Page 46: P R O C E S S I N G

I.Dezember 2009 www.processing.org

L Ö T E N

Rule #1:

Die beiden zu verbindenen Teile festklemmen (helping hands)

Page 47: P R O C E S S I N G

I.Dezember 2009 www.processing.org

Rule #2:

verwende den lötkolben solange er die richtige temperatur hat

Page 48: P R O C E S S I N G

I.Dezember 2009 www.processing.org

Rule #3:

erhitze den zu lötenden teil, nicht den lötdraht

Page 49: P R O C E S S I N G

I.Dezember 2009 www.processing.org

Rule #4:

überprüfe die verbindung unter einem vergrößerungsglas

Page 50: P R O C E S S I N G

I.Dezember 2009 www.processing.org

Page 51: P R O C E S S I N G

I.Dezember 2009 www.processing.org

cold joints

Page 52: P R O C E S S I N G

I.Dezember 2009 www.processing.org

T u t o r i a l

http://www.learningprocessing.com/

Page 53: P R O C E S S I N G

Arduina und Processing verbinden

Processing sends a byte out the serial port, and reads 3 bytes in.

Sets foregound color, xpos, and ypos of a circle onstage using the values returned from the serial port of the Arduina

I.Dezember 2009 www.processing.org

Page 54: P R O C E S S I N G

I.Dezember 2009 www.processing.org

Page 55: P R O C E S S I N G

Kopiert bitte den Arduino Code, der unter dem Processing Code auskommentiert wurde, ins Arduino Fenster.

I.Dezember 2009 www.processing.org