We are about to switch to a new forum software. Until then we have removed the registration on this forum.
I have just begun learning to code. How do I make an event happen for a certain amount of time before the program continues? I have searched for a solution, but haven´t found one yet.
An example:
I have made a program where two bars, one green and one red, are expanding to the left in the frame. I let a random function control how much the bars are expanding, with a probability set to 50 percent for which one of the bars that will expand with one pixel each time through the draw-function. When one of the bars reach the opposite frame border the process starts all over with a white frame. See below.
float x = 0;
float x2 = 0;
void setup() {
size(400, 400);
smooth();
background(255);
noFill();
}
void draw () {
if (random (100) < 50) {
stroke(255, 0, 0);
line (x, 100, x, 200);
x += 1;
} else {
stroke (0, 255, 0);
line (x2, 200, x2, 300);
x2 += 1;
}
if (x == width) {
background(255);
x = 0;
x2 = 0;
}
if (x2 == width) {
background(255);
x = 0;
x2 = 0;
}
}
What I want to do, but haven´t found a solution to, is to display a red frame for one second after the red bar reaches the edge first, or a green frame for one second after the green bar reaches the edge first, and then start all over again with a white frame and increasing bars.
I have tried to understand how the millis() works, but haven´t been able to make it work. I have also tried to make three separate void functions that are called from the draw-function, one displaying and increasing the bars, and two that show either the red or the green frame, and try to time these. That didn´t work either. I´d like to find a solution that is using time, rather than using framerates, if possible.
Can someone point me to a workable solution or how to think about this?
Answers
Well,
millis()
is what you are looking for. You can use %(modulo) to repeat actions each specified period of time or you can create a variable to storemillis()
value at the beginning of your function and check the difference between current time since the program started and stored one. Just play around withmillis()
a little bit more, you should get it.I'm actually going to advocate not using millis() in this situation, because what you're asking for can be done quite simply with a little more additional logic (and less than would be needed for a solution that uses millis()).
Ater:
Ok, thanks, I will try to understand the millis() a bit better then.
TfGuy44:
Ok, I haven´t learned about boolean expressions yet, but I think I understand what it does in your program example. I will look it up.
Yet, your example still doesn´t show how to display the red or green flashes for a certain amount of time, say, 1 second. Now it just makes a single short flash.