# Timed events

This is how to use time functions (you also have day(), month(), year()).
This sketch prints 3 bars proportional to seconds minutes and hours.

[js]
function setup() {
createCanvas(250, 250);
}

function draw() {
background(0);

//update variables with time and date
s = second();
m = minute();
h = hour();

//change fill
fill(255, 0, 0);
//map the lenght of my bar according to my seconds
var sWidth = map(s, 0, 60, 0, 200);
//draw a rectangle
rect(0, 0, sWidth, 50);

//do the same for minutes and hours
fill(0, 255, 0);
var mWidth = map(m, 0, 60, 0, 200);
rect(0,100, mWidth, 50);

fill(0, 0, 255);
var hWidth = map(h, 0, 23, 0, 200);
rect(0,200, hWidth, 50);

}
[/js]

How to make something happen every second

[js]
var s;
var lastSecond;

function setup()
{
createCanvas(200, 200);
}

//this function is called 60 times per second
function draw()
{
s = second();

//if the second was updated then do something once
if (s != lastSecond)
{
println(“A second elapsed”);
background(random(255), random(255), random(255));
//update the last second
lastSecond = s;
//this variables will be the same until
//the next second change in the clock
}
}
[/js]

millis: how to make something happen between seconds

Common problem: second() is related to the system clock but millis() count starts as you run the applet. Sometimes you need them to be in sync, for example if you want an analog clock with a second arm moving smoothly:

[js]
//the function millis() returns the time elapsed since
//the launch of the sketch in milliseconds

//millisRolloverTime is the time elapsed since
//the last time a second changed in milliseconds
var millisRolloverTime;
var prevSec;

function setup()
{
createCanvas(600, 600);
millisRolloverTime = 0;
}

function draw()
{
background(0);
fill(255);

//second just changed
if (prevSec != second () ) {
//save the current time
millisRolloverTime = millis();
}

//update the value of seconds
prevSec = second();

//the current second milliseconds is the current time (in ms)
//MINUS the last time (in ms) a second changed.
//I round it because I don’t need tiny fractions of milliseconds
var milliseconds = round(millis() – millisRolloverTime);

//write it
text(second() + ” ” + milliseconds, 10, 20);

//draw a bar based on it
var bar = map(milliseconds, 0, 999, 0, width);
rect(0, 50, bar, 30);
}
[/js]

Posted in