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;
}
Tags:
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
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por