import processing.serial.*; import processing.net.*; import java.io.FileWriter; import java.io.*; import java.util.*; import spout.*; boolean useSerial=true; boolean useCubes=true; Serial myCubes; boolean updateCubes=false; int cubecounter=0; boolean spoutactive=false; Spout spout; PFont fontregular; PFont font2am; PFont font2amBig; PImage image_line; Serial myPort; Server myServer; String val = "0.0"; int speeds_show=3; float[] speeds=new float[speeds_show]; int speeds_index=0; //points to next array index float speedfloat=0; float triggerspeedmin=15; //current triggerspeed int unitdisplay=0; int unitdisplay_count=9; //how much different units available int xtextstart=10; int[] randPosX=new int[speeds_show]; int[] randPosY=new int[speeds_show]; float[] randRot=new float[speeds_show]; long[] showTime=new long[speeds_show]; void setup() { //size(800, 600, P3D); size(1280, 800, P3D); frameRate(30); //fullScreen(); randPosX[0]=int(width/2+width*-0.1); randPosX[1]=int(width/2+width*0.05); randPosX[2]=int(width/2+width*-0.05); randPosY[0]=int(height/2+height*-0.25); randPosY[1]=int(height/2+height*0); randPosY[2]=int(height/2+height*0.27); fontregular=createFont("Blackout Midnight Umlauts.ttf",64); //textFont(fontregular); font2am=createFont("Blackout Zwo Uhr Nachts.ttf",64); textFont(font2am); font2amBig=createFont("Blackout Zwo Uhr Nachts.ttf",150); myServer = new Server(this, 2323); image_line = loadImage("bleeptrackline.png"); //String portName = "COM5"; //String portName = "/dev/ttyUSB0"; int useportID=-1; println("Serialports:"); for(int i=0;i 0) { String sread = myPort.readString(); println("serialRead: " + sread); if (sread.length()>=7 && sread.substring(0,6).equals("speed=")){ //new speed measurement val = sread.substring(6,sread.length()-1); speedfloat=float(val); speeds_index++; speeds_index%=speeds_show; showTime[speeds_index] = millis(); speeds[speeds_index]=speedfloat; randRot[speeds_index] = random(-PI/10,PI/10); randPosX[speeds_index] = int(width/2+width*random(-0.18,0.18)); updateCubes=true; Date d=new Date(); println(d.getTime()+";"+speedfloat); //pw.println(d.getTime()+";"+speedfloat); //pw.flush(); appendTextToFile("speeds.txt",d.getTime()+";"+speedfloat); unitdisplay=int(random(0,unitdisplay_count)); println("unitdisplay: "+unitdisplay); triggerspeedmin=getTimesPercentile(0.8); //triggerspeedmin=getTimesMax(); sendSpeedTrapValue(int(triggerspeedmin)); myServer.write(str(speedfloat)); } } background(0); colorMode(RGB, 255,255,255); //fill(0,132,176); //35c3 fill(254,80,0); //36c3 //textSize(100); for (int i=speeds_show;i>0;i--){ //text( nf(speeds[(speeds_show+speeds_index-1+i)%speeds_show], 1,2) + " km/h", xtextstart, lastytextpos); int _speedIndex=(speeds_show+speeds_index-1+i)%speeds_show; long _cshowTime=millis()-showTime[_speedIndex]; float _dim=1-constrain(_cshowTime/3000.0,0.0,1.0); //start at 1, goes down to 0 and stays there fill(254*_dim,80*_dim,0); //36c3 textFont(font2amBig); textAlign(CENTER, CENTER); //text(nf(speeds[_speedIndex], 1,2) + " km/h" ,randPosX[_speedIndex],randPosY[_speedIndex]); translate(randPosX[_speedIndex],randPosY[_speedIndex]); rotate(randRot[_speedIndex]); text(nf(speeds[_speedIndex], 1,2) + " km/h" ,0,0); rotate(-randRot[_speedIndex]); //rotate back translate(-randPosX[_speedIndex],-randPosY[_speedIndex]); //translate back } /* textSize(40); text( "speed trap: "+nf(triggerspeedmin,1,1) +" km/h", 10, height-50); */ if (spoutactive){ spout.sendTexture(); } if (updateCubes) { if (useCubes) { colorMode(HSB, 360, 100, 100); color col = color(random(0,360), 50, 50); /*int _r=int(random(0,255)); int _g=int(random(0,255)); int _b=int(random(0,255));*/ //colorMode(RGB, 255,255,255); int _r=int(red(col)); int _g=int(green(col)); int _b=int(blue(col)); myCubes.write("B,"+cubecounter+",10,"+_r+","+_g+","+_b+ 'X'); println("B,"+cubecounter+",10,"+_r+","+_g+","+_b+ 'X'); cubecounter++; if (cubecounter>50){ updateCubes=false; cubecounter=30; } } } } void keyPressed() { //for testing if (key == 't') { println("t"); speedfloat=random(50); speeds_index++; speeds_index%=speeds_show; showTime[speeds_index] = millis(); speeds[speeds_index]=speedfloat; randRot[speeds_index] = random(-PI/10,PI/10); randPosX[speeds_index] = int(width/2+width*random(-0.18,0.18)); updateCubes=true; } } float getTimesMax(){ float speedmax=0; for (int i=0;i