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?

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

#define I2C_ADDR    0x3F
#define DS1307_ADDRESS 0x68
byte zero = 0x00;
LiquidCrystal_I2C lcd(I2C_ADDR, 16, 2);  // set the LCD address to 0x27 for a 16 chars and 2 line display

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();
    }
}

//!!!! DAQUI pra frente eu ja verifiquei individualmente o código e tá certo, aparece certinho
//no display, eu ñ usei o lcd.clear, pq como vai ficar rodando em loop ele fica piscando o display
//ai ao invés de piscar o display inteiro eu usei espaços em brancos onde fosse necessário. %Gambiarra%
void screenHome()
{
  // Le os valores (data e hora) do modulo DS1307
  Wire.beginTransmission(DS1307_ADDRESS);
  Wire.write(zero);
  Wire.endTransmission();
  Wire.requestFrom(DS1307_ADDRESS, 7);
  int segundos = ConverteparaDecimal(Wire.read());
  int minutos = ConverteparaDecimal(Wire.read());
  int horas = ConverteparaDecimal(Wire.read() & 0b111111);

  // Mostra os dados no display
  lcd.setCursor(3, 0);
  lcd.print("EcoShower");
  lcd.setCursor(2, 1);
  lcd.print("   ");
  lcd.setCursor(5, 1);
  // Acrescenta o 0 (zero) se a hora for menor do que 10
  if (horas <10)
    lcd.print("0");
  lcd.print(horas);
  lcd.print(":");
  // Acrescenta o 0 (zero) se minutos for menor do que 10
  if (minutos < 10)
    lcd.print("0");
  lcd.print(minutos);
  lcd.print("     ");
  returningHome1 = HIGH;
}

Exibições: 320

Responder esta

Respostas a este tópico

Bom dia ZGFB.

Só ajudo amigos que não colam sketch na área de texto do tópico.


Se removerem o code, e anexarem como arquivo, posso reconsiderar minha decisão.

Leia: http://labdegaragem.com/forum/topics/sugest-o-de-como-postar

Rui

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço