m (changed pre to source) |
mNo edit summary |
||
Line 170: | Line 170: | ||
*/ | */ | ||
</source> | </source> | ||
[[Category:Software]] | |||
[[Category:Processing]] |
Revision as of 20:01, 10 January 2010
/**
* Funktionsweise wie Beispiel 2, aber diesmal wird der Poti zum drehen genutzt
*/
import processing.serial.*;
Serial myPort; // Create object from Serial class
int val; // Data received from the serial port
float[] inNumber;
Invader bob;
int bobsize = 280;
int bobparts = 11;
void setup()
{
size(500, 500);
smooth();
String portName = Serial.list()[1];
myPort = new Serial(this, portName, 9600);
myPort.bufferUntil('\n');
bob = new Invader(bobparts);
}
void draw(){
background(255);
if(inNumber != null) {
bob.col = int(map(inNumber[1],570,919,0,255)); // set fill to light gray
pushMatrix();
translate(width/2,height/2);
rotate(map(inNumber[0],0,1023,0,TWO_PI));
bob.render(-bobsize/2,-bobsize/2,bobsize);
popMatrix();
}
}
void serialEvent(Serial myPort) {
String inString = myPort.readStringUntil('\n');
if(inString != null) {
inString = trim(inString);
inNumber = float(split(inString, ' '));
}
}
class Invader {
int[] invaders;
int invader = 5;
int invaderDiv = getInvaderDiv(invader);
int invaderCount = getInvaderCount(invader);
int recursive = 0;
color col = color(0);
Invader() {
init();
}
Invader(int i) {
invader = i;
invaderDiv = getInvaderDiv(invader);
invaderCount = getInvaderCount(invader);
init();
}
Invader(int i, int r) {
recursive = r;
invader = i;
invaderDiv = getInvaderDiv(invader);
invaderCount = getInvaderCount(invader);
init();
}
Invader(int i, color c, int r) {
recursive = r;
col = c;
invader = i;
invaderDiv = getInvaderDiv(invader);
invaderCount = getInvaderCount(invader);
init();
}
void init() {
invaders = new int[invaderCount];
for(int i = 0;i<invaderCount;i++) {
invaders[i] = floor(random(2));
}
}
void render(float x, float y, float s) {
float blocksize = s / invader;
int y2 = 0;
int x2 = 0;
noStroke();
fill(col);
pushMatrix();
translate(x+blocksize*(invaderDiv-1),y);
for(int i = 0;i<invaderCount;i++) {
if(invaders[i] == 1) {
if(recursive > 0) {
Invader in = new Invader(invader-2,recursive-1);
in.render(x2*blocksize,y2*blocksize,blocksize);
} else {
rect(x2*blocksize,y2*blocksize,blocksize,blocksize);
}
}
y2++;
if((i+1)%invader==0) {
x2++;
y2 = 0;
}
}
x2 = -1;
y2 = 0;
for(int i = invader;i<invaderCount;i++) {
if(invaders[i] == 1) {
if(recursive > 0) {
Invader in = new Invader(invader-2,recursive-1);
in.render(x2*blocksize,y2*blocksize,blocksize);
} else {
rect(x2*blocksize,y2*blocksize,blocksize,blocksize);
}
}
y2++;
if((i+1)%invader==0) {
x2--;
y2 = 0;
}
}
popMatrix();
}
int getInvaderDiv(float i) {
return ceil(i/2);
}
int getInvaderCount(int i) {
return i*invaderDiv;
}
}
/* Arduino Code
int potPin = 0;
int photoPin = 1;
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.print(analogRead(potPin));
Serial.print(" ");
Serial.print(analogRead(photoPin));
Serial.println();
delay(100);
}
*/