i'm trying to write a sketch in C and i need to play an animation on my LED Matrix while initializing function for my program. The problem is, because i need to play the animation in loop and because during delays function the board does not do anything else, i dont know how to loop it while keep doing my other functions.
Here is the animation:
void Animation(){
max7219.clr();
if(InternetStatus){ //This is to draw a circle if internet has connected during the animation
max7219.setColumn(0, B11111111);
for(int i=1; i<7; i++){
max7219.setColumn(i, B10000001);
}
AnUp = B10011101;
AnCenter = B10111001;
AnDown = B11110001;
max7219.setColumn(10, B10000001);
max7219.setColumn(11, B10000001);
max7219.setColumn(15, B10000001);
max7219.setColumn(16, B10000001);
max7219.setColumn(20, B10000001);
max7219.setColumn(21, B10000001);
for(int i=25; i<31; i++){
max7219.setColumn(i, B10000001);
}
max7219.setColumn(31, B11111111);
} else {
AnUp = B00011100;
AnCenter = B00111000;
AnDown = B01110000;
}
max7219.setColumn(7, AnCenter);
max7219.setColumn(8, AnCenter);
max7219.setColumn(9, AnCenter);
max7219.setColumn(12, AnCenter);
max7219.setColumn(13, AnCenter);
max7219.setColumn(14, AnCenter);
max7219.setColumn(17, AnCenter);
max7219.setColumn(18, AnCenter);
max7219.setColumn(19, AnCenter);
max7219.setColumn(22, AnCenter);
max7219.setColumn(23, AnCenter);
max7219.setColumn(24, AnCenter);
max7219.refreshAll();
delay(AnDelay); //delays are set between frames
AnIndex = 0;
max7219.setColumn(7+(AnIndex*5), AnUp);
max7219.setColumn(8+(AnIndex*5), AnUp);
max7219.setColumn(9+(AnIndex*5), AnUp);
max7219.refreshAll();
delay(AnDelay);
max7219.setColumn(7+(AnIndex*5), AnCenter);
max7219.setColumn(8+(AnIndex*5), AnCenter);
max7219.setColumn(9+(AnIndex*5), AnCenter);
AnIndex = 1;
max7219.setColumn(7+(AnIndex*5), AnUp);
max7219.setColumn(8+(AnIndex*5), AnUp);
max7219.setColumn(9+(AnIndex*5), AnUp);
max7219.refreshAll();
delay(AnDelay);
AnIndex=0;
max7219.setColumn(7+(AnIndex*5), AnDown);
max7219.setColumn(8+(AnIndex*5), AnDown);
max7219.setColumn(9+(AnIndex*5), AnDown);
AnIndex=1;
max7219.setColumn(7+(AnIndex*5), AnCenter);
max7219.setColumn(8+(AnIndex*5), AnCenter);
max7219.setColumn(9+(AnIndex*5), AnCenter);
AnIndex=2;
max7219.setColumn(7+(AnIndex*5), AnUp);
max7219.setColumn(8+(AnIndex*5), AnUp);
max7219.setColumn(9+(AnIndex*5), AnUp);
max7219.refreshAll();
delay(AnDelay);
AnIndex=0;
max7219.setColumn(7+(AnIndex*5), AnCenter);
max7219.setColumn(8+(AnIndex*5), AnCenter);
max7219.setColumn(9+(AnIndex*5), AnCenter);
AnIndex=1;
max7219.setColumn(7+(AnIndex*5), AnDown);
max7219.setColumn(8+(AnIndex*5), AnDown);
max7219.setColumn(9+(AnIndex*5), AnDown);
AnIndex=2;
max7219.setColumn(7+(AnIndex*5), AnCenter);
max7219.setColumn(8+(AnIndex*5), AnCenter);
max7219.setColumn(9+(AnIndex*5), AnCenter);
AnIndex=3;
max7219.setColumn(7+(AnIndex*5), AnUp);
max7219.setColumn(8+(AnIndex*5), AnUp);
max7219.setColumn(9+(AnIndex*5), AnUp);
max7219.refreshAll();
delay(AnDelay);
AnIndex=1;
max7219.setColumn(7+(AnIndex*5), AnCenter);
max7219.setColumn(8+(AnIndex*5), AnCenter);
max7219.setColumn(9+(AnIndex*5), AnCenter);
AnIndex=2;
max7219.setColumn(7+(AnIndex*5), AnDown);
max7219.setColumn(8+(AnIndex*5), AnDown);
max7219.setColumn(9+(AnIndex*5), AnDown);
AnIndex=3;
max7219.setColumn(7+(AnIndex*5), AnCenter);
max7219.setColumn(8+(AnIndex*5), AnCenter);
max7219.setColumn(9+(AnIndex*5), AnCenter);
max7219.refreshAll();
delay(AnDelay);
AnIndex=2;
max7219.setColumn(7+(AnIndex*5), AnCenter);
max7219.setColumn(8+(AnIndex*5), AnCenter);
max7219.setColumn(9+(AnIndex*5), AnCenter);
AnIndex=3;
max7219.setColumn(7+(AnIndex*5), AnDown);
max7219.setColumn(8+(AnIndex*5), AnDown);
max7219.setColumn(9+(AnIndex*5), AnDown);
max7219.refreshAll();
delay(AnDelay);
max7219.setColumn(7+(AnIndex*5), AnCenter);
max7219.setColumn(8+(AnIndex*5), AnCenter);
max7219.setColumn(9+(AnIndex*5), AnCenter);
max7219.refreshAll();
delay(AnDelay);
}
And i need to run that animation while executing these functions:
void Wait4Connection(){
Serial.println("Waiting for connection.");
InternetStatus = false;
WaitCon:
max7219.clr();
InternetStatus = false;
RetimeTry = 0;
Serial.println("Trying to connect.");
wifiManager.autoConnect("Clock Configuration");
ret = Ping.ping(ip);
if(ret){ //prova connessione internet
Serial.println("Device connected to the internet.");
timeClient.begin();
Retime:
InternetStatus = true;
Serial.println("Clock synchronization.");
timeClient.update();
Hours = timeClient.getHours() + HH + IsDst(day(timeClient.getEpochTime()), month(timeClient.getEpochTime()), weekday(timeClient.getEpochTime()));
Minutes = timeClient.getMinutes() + MM;
Seconds = timeClient.getSeconds();
if(timeClient.getEpochTime() > 1000){
RetimeTry=0;
Serial.println("Starting clock mode.");
tasker.setInterval(Clocking, 1000);
tasker.setInterval(Refresh, 300000);
} else {
if(RetimeTry<10){
Serial.print("No time received. Retrying. x");
Serial.println(RetimeTry+1);
RetimeTry++;
goto Retime;
} else {
Serial.println("Can't obtain time packets. Reconnecting.");
goto WaitCon;
}
RetimeTry++;
}
} else {
Serial.println("Connection failed.");
InternetStatus = false;
Serial.println("Slowing down 30s");
delay(30000);
tasker.cancel(Animation);
goto WaitCon;
}
}
Thanks.