# How to count how long a key is pressed

I’ve been trying to make a program that counts how long you’ve pressed a key. Is this possible in Processing Java?

Here’s my code so far:

``````int frames;
void keyPressed() {
frames++;
}

void keyReleased() {
println(frames);
frames = 0;
}
``````

You need an active sketch, not a static one which is as simple as adding a draw function

``````int frames;

void draw(){
}

void keyPressed() {
frames++;
}

void keyReleased() {
println(frames);
frames = 0;
}
``````

Hi

Welcome to our community you need kind of timer

Heres a quick example, used a boolean to only detect the key pressed once, that way you get the exact seconds its held down, millis is a reference to milliseconds, hence the division in the print statement

``````float millis;
boolean pressed;

void draw() {
}

void keyPressed() {
if (pressed == false) {
millis = millis();
pressed = true;
}
}

void keyReleased() {
println((millis()-millis)/1000);
pressed = false;
}
``````
1 Like

And here is other example

``````
int d = 0;

void setup() {
size(640, 320);
}

void draw() {
}

void keyPressed() {
if (key == 'j') {
d = millis();
}
}

void keyReleased() {
if (key == 'j') {
d = millis() - d/1000;
println("j key pressed " + d + " milliseconds");
}
}

``````

Or this

``````
int d = 0;

void setup() {
size(640, 320);
}

void draw() {
}

void keyPressed() {

d = millis();
}

void keyReleased() {
d = millis() - d;
println(" key pressed " + d + " milliseconds");
}

``````

That way doesnt work, was my initial try aswell, keyPressed keeps overriding the variable d, thats why i used a boolean to only set d once

1 Like

Hi
I didn’t test mine because I am using my tablet

1 Like

Its alright, my initial thought was, keyPressed would only detect once per press aswell, turns out no, it detects once per frame which is odd, a boolean always comes in handy for things like that though

1 Like

Yes you are true Sir

Maybe you can do it that way …

``````int d = -1;
int dd = 0;

void setup() {
size(640, 320);
}

void draw() {
background(0);
if (keyPressed) {
if (d==-1) {
d = millis();
}
else {
dd = millis() - d;
}
}
else {
d=-1;
}
fill(255);
text(dd + "ms",width/2,height/2);
}

``````

Cheers
— mnse

2 Likes