Excuse my ignorance, but I ran into a problem that turned out to be challenging for my current knowledge in programming with Processing, even though the idea is quite simple. You see, I need to add 1 unit to a variable every 10 seconds. This is the code:
int i = 0;
void setup()
{
frameRate(60);
}
void draw()
{
int time = (millis() % 10000) / 1000;
if (time == 9)
{
i++;
} else {}
System.out.println("-------------------------------\n" +
"Timer: " + time + "\n"
+ "Adding 1 every 10 seconds: : " + i + "\n"
+ "-------------------------------");
}
The problem is that because draw() loops 60 times per second, as soon as time reaches 9 the second it last makes the if statement to be executed 60 times and it ends adding 60 to i every 10 seconds and I just need to be adding 1.
I tried to apply some kind of algorithm that subtracts the unnecessary numbers as they increase like so:
int i = 1;
int toSubstract = 0; //Variable for algorithm
void setup()
{
frameRate(60);
}
void draw()
{
int time = (millis() % 10000) / 1000;
if (time == 9)
{
i++;
algToSubstract();
} else {}
System.out.println("-------------------------------\n" +
"Timer: " + time + "\n"
+ "Adding 1 every 10 seconds: : " + i + "\n"
+ "-------------------------------");
}
void algToSubstract() //<--- This is the algorithm
{
i = i - toSubstract;
toSubstract++;
if (toSubstract > 59)
{
toSubstract = 0;
} else {}
}
...but I couldn't make it work. The idea was something like this:
time reaches 9, if statement executes, i = 1 and toSubstract = 0.
i increases 1 so i = 2.
i = i - toSusbract (i = 2 - 0 so i = 2).
toSusbract increases 1 so toSusbract = 1.
i increases 1 so i = 3.
i = i - toSusbract (i = 3 - 1 so i = 2).
toSusbract increases 1 so toSusbract = 2.
... Process continues...
toSubstract gets bigger than 59 so it is restarted to 0.
time stops being 9.
Ringo has a solution that's perfectly fine.
Another way you can do this easily is:
As long as
time == 9, we'll only get throughif(!addOnce)one time.After it changes, we reset the flag.