Boa noite! Esta foi a primeira vez que programei um Arduino, é pra fazer um equipamento que vai medir a altitude de um trike, coloquei o display 16x2 com o i2c e um barômetro bmp180, programei e funcionou, a única coisa que está me incomodando ´q que os escritos da 1 tela e a 1 linha da segunda tela estão piscando como se estivesse apagando e reescrevendo rapidamente, já na segunda linha da segunda tela isso não acontece, procurei por algum lcd.clear no inicio dos prints das linhas mas não achei, então não estou conseguindo achar o problema...
alguém faz ideia de como resolvo isso?
// Equipamento básico de voo para trike
// Desenvolvido por Celso Judson T B Ferreira
// === Bibliotecas === //
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <TimerOne.h>
#include <Adafruit_BMP085.h>
// DEFINIÇÕES
#define endereco 0x27 // Endereço do display lcd
#define colunas 16
#define linhas 2
// INSTANCIANDO OBJETOS
LiquidCrystal_I2C lcd(endereco, colunas, linhas);
Adafruit_BMP085 bmp180;
#define botao_MAIS 2 //define o botão no pino 2 (MAIS)
#define botao_ENTER 3 //define o botão no pino 3 (ENTER/VOLTAR)
#define botao_MENOS 4 //define o botão no pino 4 (MENOS)
bool L_botao_MAIS = 1; //variável para fazer a leitura do botão (MAIS)
bool LA_botao_MAIS = 1; //variável para verificar a leitura anterior do botão (MAIS)
bool L_botao_ENTER = 1; //variável para fazer a leitura do botão (ENTER/VOLTAR)
bool LA_botao_ENTER = 1; //variável para verificar a leitura anterior do botão (ENTER/VOLTAR)
bool L_botao_MENOS = 1; //variável para fazer a leitura do botão (MENOS)
bool LA_botao_MENOS = 1; //variável para verificar a leitura anterior do botão (MENOS)
//Variaveis
int tela = 1; //variável para controlar a mudança de tela no menu
int AltCorrige = 0; //variável de correção de altitude em metros
int PressCorrige = 0; //variavel de correção da pressão em pascal
void setup(){
pinMode(botao_MAIS, INPUT_PULLUP); //define o botao (MAIS) como uma entrada pull up
pinMode(botao_ENTER, INPUT_PULLUP); //define o botao (ENTER/VOLTAR) como uma entrada pull up
pinMode(botao_MENOS, INPUT_PULLUP); //define o botao (MENOS) como uma entrada pull up
lcd.init (); //inicia o display 16x2
lcd.backlight();
// lcd.clear(); //limpa todos os caracteres do lcd
lcd.setCursor(0,0); //posiciona o cursor no display (caracter, linha)
lcd.print(F(" Trikes Thor ")); //imprime o texto entre aspas
lcd.setCursor(0,1); //posiciona o cursor no display (caracter, linha)
lcd.print(F(" Open system... ")); //imprime o texto entre aspas
delay (5000); //pausa o programa por 5 segundos
// lcd.clear();
lcd.noBacklight();
delay(1000);
lcd.backlight();
if (!bmp180.begin())
{
lcd.println("Falha no sensor!!!");
while (1) {}
}
}
void loop(){
// === Ações no display LCD === //
if (tela==1){ //se a variável tela for igual a MAIS, faça...
lcd.setCursor(0,0);
lcd.print(" ");
lcd.setCursor(0,0);
lcd.print("Alt: ");
lcd.print(((bmp180.readAltitude() + AltCorrige) * 3,28084));
lcd.print(" Ft");
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print("Press.: ");
lcd.print((bmp180.readPressure() + (PressCorrige * 100)));
lcd.print(" Pa");
}
else if (tela==2){
lcd.setCursor(0,0);
lcd.print(" ");
lcd.setCursor(0,0);
lcd.print("Altit.: ");
lcd.print(bmp180.readAltitude() + AltCorrige);
lcd.print(" m");
lcd.setCursor(0,1);
lcd.print("Temp. : ");
if ( bmp180.readTemperature() < 10)
{
lcd.print(" ");
lcd.print(bmp180.readTemperature());
}
else
{
lcd.print(bmp180.readTemperature(),1);
}
lcd.print(" ");
lcd.print((char)223);
lcd.print("C ");
}
else if (tela==10){
lcd.setCursor(0,0); //posiciona o cursor no display (caracter, linha)
lcd.print(F(" << MENU >> ")); //imprime o texto entre aspas
lcd.setCursor(0,1); //posiciona o cursor no display (caracter, linha)
lcd.print(F("Corrige altitude")); //imprime o texto entre aspas
}
else if (tela==11){
lcd.setCursor(0,0);
lcd.print(F(" << MENU >> "));
lcd.setCursor(0,1);
lcd.print(F("Corrige pressão"));
}
else if (tela==101){
lcd.setCursor(0,0);
lcd.print(F(" Corrige Altitude"));
lcd.setCursor(0,1);
lcd.print(AltCorrige);
lcd.print(F("Mts"));
}
else if (tela==111){
lcd.setCursor(0,0);
lcd.print(F(" Corrige Pressão"));
lcd.setCursor(0,1);
lcd.print(PressCorrige);
lcd.print(F("hPa"));
}
/////////////////////////////////////////////////
// === Ações do Botão MAIS === // ////////////
L_botao_MAIS = digitalRead(botao_MAIS);
if (!L_botao_MAIS && LA_botao_MAIS) {
if (tela==1)tela=2;
else if (tela==2)tela=1;
else if (tela==10)tela=11;
else if (tela==11)tela=10;
else if (tela==101){
AltCorrige = AltCorrige + 1;
}
else if (tela==111){
PressCorrige = PressCorrige + 1;
}
delay(30);}
LA_botao_MAIS = L_botao_MAIS;
/////////////////////////////////////////////////
// === Ações do Botão MENOS === // ////////////
L_botao_MENOS = digitalRead(botao_MENOS);
if (!L_botao_MENOS && LA_botao_MENOS) {
if (tela==1)tela=2;
else if (tela==2)tela=1;
else if (tela==10)tela=11;
else if (tela==11)tela=10;
else if (tela==101){
AltCorrige = AltCorrige - 1;
}
else if (tela==111){
PressCorrige = PressCorrige - 1;
}
delay(30);}
LA_botao_MENOS = L_botao_MENOS;
/////////////////////////////////////////////////
// === Ações do Botão ENTER === // ////////////
L_botao_ENTER = digitalRead(botao_ENTER);
if (!L_botao_ENTER && LA_botao_ENTER) {
if (tela==1)tela=10;
else if (tela==2)tela=10;
else if (tela==10)tela=101;
else if (tela==101)tela=1;
else if (tela==11)tela=111;
else if (tela==111)tela=1;
delay(30);}
LA_botao_ENTER = L_botao_ENTER;
}