Skip to content

Instantly share code, notes, and snippets.

@tomoyo-kousaka
Created May 31, 2011 11:39
Show Gist options
  • Select an option

  • Save tomoyo-kousaka/1000359 to your computer and use it in GitHub Desktop.

Select an option

Save tomoyo-kousaka/1000359 to your computer and use it in GitHub Desktop.
tokeiEx(Processing
import processing.serial.*;
Serial myPort;
int i = 0; //counter for dummyClock
int j = 0; //counter for dummyTIme
int p_j = 0;
float r = 25;//chushinsen no hankei
int setm = 15; //target minute
int value = 0; //starting flag
float span = 0; //continued time
int wid = 300; int hei = 300; //projecrion area
int nuri_r = 150;//nuri
int nuri_g = 0;
int nuri_b = 0;
int nuri_a = 255;//nuri
int nanbyouCounter = 1;
float[] startTime = { 1, 1 }; //start time, 0=second, 1=minute
float[] tmpTime = new float[3];
void setup(){
size( 800, 600 );
stroke(255);
smooth();
tmpTime[0] = second(); tmpTime[1] = minute(); tmpTime[2] = hour()%12;
String portName = Serial.list()[0];
myPort = new Serial(this, portName, 9600);
myPort.clear();
frameRate(360);
}
static public void main(String args[]) {
PApplet.main(new String[] { "--present", "--bgcolor=#000000", "--stop-color=#000000", "tokeiKirei" });
}
void whatTime(int t){ //count up timer
tmpTime[t]++;
if((tmpTime[t] >= 12)&&(t == 2)){
tmpTime[t] -= 12;
}else if(tmpTime[t] >= 60){
tmpTime[t] = 0;
if((t == 0)||(t == 1)){
whatTime(t+1);
}
}
}
void drawHari(float ss, char smh){
pushMatrix();
translate(wid/2, hei/2);
switch(smh){
case '1'://byou
rotate(radians(ss*(360/60)));
strokeWeight(1);
line(0,0,0,-hei*3/5);
break;
case '2'://fun
strokeWeight(2);
rotate(radians(ss*(360/60)));
line(0,0,0,-hei*3/5);
break;
case '3'://jikan
strokeWeight(4);
rotate(radians(ss*(360/12)));
line(0,0,0,-hei*4/10);
break;
case '4'://fun nuri
strokeWeight(50);
stroke(nuri_r,nuri_g,nuri_b,nuri_a);
rotate(radians(ss*(360/60)));
line(0,0,0,-hei*3/5);
break;
}
popMatrix();
}
void dummyTime(int t){ //culculate ksk
tmpTime[t] = startTime[0] + span + sqrt(abs( nanbyouCounter*nanbyouCounter - 2*nanbyouCounter*span )); //gensoku
// tmpTime[t] = startTime[0] + span - sqrt(abs( nanbyouCounter*nanbyouCounter - span*span )); //ksk
nanbyouCounter++;//kaishi shite nan byou tatta ka
println(nanbyouCounter);
println(tmpTime[t]);
j = round((tmpTime[0]-tmpTime[0]%60)/60);
if(j != p_j){
whatTime(t + 1);//check
}
p_j = j;
tmpTime[t] = tmpTime[t]%60;
}
void nuri(float n){//kasokutyuuwo nuru
float spanCount = tmpTime[1] - n;
if(spanCount < 0) spanCount += 60;
println(spanCount);
while(spanCount >= 0){
drawHari(n,'4');
n++;
spanCount--;
}
}
void dummyClock(){
if(i == 0){ //decide "span" first time
startTime[1] = tmpTime[1];//minute(); //reserve start minute
span = setm - startTime[1]; //decide continue span
if(span < 0){
span += 60;
}
span = span*60;
i++;
}
dummyTime(0);
nuri(startTime[1]);
if(setm == tmpTime[1]){
tmpTime[0] = 0; //0 byou kara futsuuni ugokasu
value = 0;
startTime[0] = 1;
nanbyouCounter = 1;
}
}
void mousePressed(){
if(value == 0){
value = 1; //button mi setsuzoku ji start suru you
}else{
value = 0;
tmpTime[0] = second();
tmpTime[1] = minute();
tmpTime[2] = hour()%12;
}
}
void serialEvent(Serial p){
setm = myPort.read();
if((setm == 100)&&(value == 0)){
value = 1; //button
}else if((setm == 100)&&(value == 1)){
value = 0;
tmpTime[0] = second();
tmpTime[1] = minute();
tmpTime[2] = hour()%12;
}else if(setm == 0){
setm = 0;
}else{
setm = 60 - setm;
}
println(setm); //serial kakunin you
}
void draw(){
background(0);
translate((width-wid)/2, (height-hei)/2);
if(value == 0){
whatTime(0);
i = 0;
j = 0;
}else{
dummyClock();
}
noFill();
stroke(255);
drawHari(tmpTime[0],'1');
drawHari(tmpTime[1],'2');
drawHari(tmpTime[2],'3');
fill(0);
ellipse(wid/2,hei/2,2*r,2*r);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment