The title doesn’t help explain my problem so I’ll explain and give my code here.(This is my first project that I’m doing on my own)
I made a clock + Session timer by using an RTC module (DS3231) and I’ve done the basic time and session programs(and they work fine). Then I wanted to make it more “lively” by adding some simple animations. What I wanted was to put a little animation between time change ( Basically I just add two time modes where in one there’s seconds and without seconds (sometimes seeing seconds feel like a stress so ye)), and this animation runs across the whole screen whether the session is running or not(I’m not having any worries abt the way it’s going)
void animation() {
if (doAnimation == true) {
switch (Animation) {
case Animation::Start:
lcdClearAnimation();
if (currentMillis - animationStartMillis >= animationState[0]) {
Animation = Mid1;
}
break;
case Animation::Mid1:
lcd.setCursor(0, 1);
lcd.print("Mid1 Doing");
if (currentMillis - animationStartMillis >= animationState[1]) {
Animation = Mid2;
}
break;
case Animation::Mid2:
lcd.setCursor(0, 1);
lcd.print("Mid2 Doing");
if (currentMillis - animationStartMillis >= animationState[2]) {
Animation = End;
}
break;
case Animation::End:
lcd.setCursor(0, 1);
lcd.print("END. Doing");
if (currentMillis - animationStartMillis >= animationState[3]) {
doAnimation = false;
}
break;
}
}
}
So this is the one that handles the animation. This runs when I change the toggle switch. I’ve already done the “lcdAnimationClear();” one. Now I’ll explain what animation I want. What I have in mind is this,
In the “Mid1” part(I’ll probs remove Mid2 but let’s keep it here for now), The program picks an order from 1-16(I have a 16x2 lcd) and let’s say it picks the number each 50ms (For every time the animation runs the number order should be different), and when the first number is taken, it will go on a sequence of changing symbols on that picked column (kind of like a weird glitch and symbol changing transition but this continues until the time I want it to stop) and while that column is going through the different symbols, the program picks the next column and again puts that column in the symbol changing loop thing. Like this the program will pick all columns in both rows and filling (or doing the animation) .
@@ Then I want to end the columns that stays clear in the LCD in a blank(I think I’ll be able to manage this by getting which states I’m in(switch modes and session running or not)), and the columns that have displaying time and session(if on) will just go to that.
For now I want to ignore the part after “@@” bc I’m still stuck on the main animation thing (Mid1 part). I don’t want any code but I do need some suggestions on how to do this and or I can even get to this type of animation from arduino. I’m thinking like this bc I’ve always saw arduino as a way to tell something to do something like this and stop (not like -> start this, keep doing that and also start this after a few milliseconds, and keep doing all of that until the last part is done)
I also have a few things I’ve been avoiding. I’m not using blocking code in this program, I never used delay on this program(it’s kind of like a learning challenge) I saw from an AI about fisher yates algorithm which need a “for loop” (it kinda goes against my challenge so I’m thinking about looking into some libraries or something that somehow get my randomize problem(I saw on google(AI again) that there is some libraries there))
Thank you for reading all of this and hope someone can give me an idea


Thanks, I’ll look into FreeRTOS next.