From d0e77d7cac468339a4cae36626c19d3e9d806fbb Mon Sep 17 00:00:00 2001 From: Fisch Date: Fri, 27 Dec 2019 13:05:52 +0100 Subject: [PATCH] simpler version with cube control for 36c3 --- .../speedshow/Blackout Midnight Umlauts.ttf | Bin 0 -> 26280 bytes .../speedshow/Blackout Zwo Uhr Nachts.ttf | Bin 0 -> 29248 bytes lichtschranke/speedshow/speedshow.pde | 203 ------------- .../Blackout Midnight Umlauts.ttf | Bin 0 -> 26280 bytes .../Blackout Zwo Uhr Nachts.ttf | Bin 0 -> 29248 bytes .../speedshowSimple/speedshowSimple.pde | 280 ++++++++++++++++++ 6 files changed, 280 insertions(+), 203 deletions(-) create mode 100644 lichtschranke/speedshow/Blackout Midnight Umlauts.ttf create mode 100644 lichtschranke/speedshow/Blackout Zwo Uhr Nachts.ttf delete mode 100644 lichtschranke/speedshow/speedshow.pde create mode 100644 lichtschranke/speedshowSimple/Blackout Midnight Umlauts.ttf create mode 100644 lichtschranke/speedshowSimple/Blackout Zwo Uhr Nachts.ttf create mode 100644 lichtschranke/speedshowSimple/speedshowSimple.pde diff --git a/lichtschranke/speedshow/Blackout Midnight Umlauts.ttf b/lichtschranke/speedshow/Blackout Midnight Umlauts.ttf new file mode 100644 index 0000000000000000000000000000000000000000..cced628f48fd53fd19f247fb0a3bd3a9d24f48f7 GIT binary patch literal 26280 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 literal 0 HcmV?d00001 diff --git a/lichtschranke/speedshow/speedshow.pde b/lichtschranke/speedshow/speedshow.pde deleted file mode 100644 index 156d04c..0000000 --- a/lichtschranke/speedshow/speedshow.pde +++ /dev/null @@ -1,203 +0,0 @@ -import processing.serial.*; -import processing.net.*; -import java.io.FileWriter; -import java.io.*; -import java.util.*; -import spout.*; - -boolean spoutactive=true; -Spout spout; -PFont fontregular; -PImage image_line; -Serial myPort; -Server myServer; -String val = "0.0"; -int speeds_show=10; -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; - -void setup() { - size(800, 600, P3D); - frameRate(30); - - fontregular=createFont("Montserrat-Regular.ttf",64); - textFont(fontregular); - - 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[speeds_index]=speedfloat; - speeds_index++; - speeds_index%=speeds_show; - - 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); - fill(0,132,176); - - textSize(100); - - - int xtext=xtextstart; - int ytext=100; - switch(unitdisplay){ - case 0: - text(nf(speedfloat,1,2) + " km/h" , xtext, ytext); - break; - case 1: - text(nf(speedfloat*0.621371,1,2) + " mph" , xtext, ytext); - break; - case 2: - text(nf(speedfloat*0.000809848,1,6) + " Mach" , xtext, ytext); - break; - case 3: - text(nf(speedfloat*0.911344,1,2) + " ft/s" , xtext, ytext); - break; - case 4: - text(nf(speedfloat*0.277778,1,2) + " m/s" , xtext, ytext); - break; - case 5: - text(nf(speedfloat*0.539957,1,2) + " knots" , xtext, ytext); - break; - case 6: - text(nf(speedfloat*0.000000000926567,1,9) + " c" , xtext, ytext); - break; - case 7: - text(nf(speedfloat*54.67469,1,0) + " ft/min" , xtext, ytext); - break; - case 8: - text(nf(pow((speedfloat*0.277778/0.836), 2.0/3),1,0) + " Bft" , xtext, ytext); - break; - - - } - - - //Line - image(image_line, 10, 100); - - int reducesizefactor=40; - int lastytextpos=200; - - for (int i=speeds_show;i>0;i--){ - float colorpercentage=i*1.0/speeds_show; - fill(0,132*colorpercentage+163*(1-colorpercentage),176*colorpercentage+86*(1-colorpercentage)); - textSize(50-(1-colorpercentage)*reducesizefactor); - text( nf(speeds[(speeds_show+speeds_index-1+i)%speeds_show], 1,2) + " km/h", xtextstart, lastytextpos); - lastytextpos+=50-(1-colorpercentage)*reducesizefactor; - } - - textSize(40); - text( "speed trap: "+nf(triggerspeedmin,1,1) +" km/h", 10, height-50); - - - if (spoutactive){ - spout.sendTexture(); - } - -} - -float getTimesMax(){ - float speedmax=0; - for (int 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 literal 0 HcmV?d00001 diff --git a/lichtschranke/speedshowSimple/speedshowSimple.pde b/lichtschranke/speedshowSimple/speedshowSimple.pde new file mode 100644 index 0000000..7f266f0 --- /dev/null +++ b/lichtschranke/speedshowSimple/speedshowSimple.pde @@ -0,0 +1,280 @@ +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