Transição de telas no Display 16x2


#1

Bom galera, o problema é o seguinte, eu quero fazer uma transição de telas sem usar o Delay, pq eu vou usar botões, aí pra ñ ter q usar Interrupts pra eles queria usar o metodo millis(), mas o display fica doidao e ñ da certo, alguém tem alguma sugestão, ou solução? :grin:

 unsigned long previousTime = 0;

void setup()
{
lcd.init();
lcd.backlight();
Wire.begin();
Serial.begin(9600);
//SelecionaDataeHora(); //----- utilizar se for definir a data e a hora
}

void loop()
{
screenManager();
}

//Aqui estou tentando fazer a transição das telas sem usar o delay, porque lá na frente vai atrapalhar
//ja que eu vou utilizar botões e nao quero usar Interrupt para eles.
//MAS é aqui que o display fica lokão… faço a minima idéia do que está errado.

void screenManager()
{
if ((millis() - previousTime) < 3000 )
{
screenHome();
}

if ((millis() - previousTime) > 3000 && (millis() - previousTime) <= 6000)
{
  screenHome2();
}
// aqui é onde atualiza o previousTime, após a transição das telas. Isso serve pra renovar as condicionais acima
if ((millis() - previousTime) > 6000)
{
  previousTime = millis();
}

}`


#2

O que você quer é fazer a transição de telas sem usar botões e delay, certo?
Use um intervalo fixo e depois auxilares para mudar a tela:

long intervalo = 3000; unsigned long currentMillis = millis(); int dispState = 1;

void screenManager()
{
if ((currentMillis - previousTime) > intervalo )
{
currentMillis = millis();

    if (dispState == 1)
    {
    screenHome2();
    dispState = 2;
else
      {
  screenHome();
  dispState = 1;
      }
    }
 }

{