Olá amigos estou fazendo um contador com três sensores, onde a contagem será mostrado em um display 16x2 i2C, fiz um menu para organizar a contagem de cada sensor.
Até que está funcionando bem, único problema é que a contagem não atualiza em tempo real quando estou na tela do sensor selecionado, para atualizar eu preciso retornar ao menu principal e voltar novamente.
Alguém poderia me ajudar, já estou a horas tentando resolver isso.
Agradeço pela atenção
Segue o código:
// BIBLIOTECAS NECESSARIAS PARA RODAR O SCRIPT
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// DEFINIÇÃO DAS PORTAS QUE SERÃO CONECTADOS NO ARDUINO MEGA
#define pinoSensor3 27
#define pinoSensor2 25
#define pinoSensor 23
#define menu 24
#define enter 22
//Armazena estado de leitura do sensor
bool sensor_alto =0;
bool sensor_high =0;
bool sensor_high2 =0;
//Cria variaveis globais
unsigned long contador = 0;
unsigned long counter2 = 0;
unsigned long counter3 = 0;
// TIPOS DE FUNÇÕES QUE SERÃO UTILIZADAS NA INTERFACE
void readButts();
void list_menu();
void menu_select();
// DECLARAÇÃO DO TIPO DE LCD I2C QUE ESTÁ SENDO UTILIZADO
LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7,3, POSITIVE);
// DEFINIÇÃO DAS VAREAVEIS GLOBAIS
int line[3] = {0,1,2},
line_bk[3],
index,
menu_number = 1;
boolean menu_flag = 0,
enter_flag = 0,
sub_menu = 0;
void setup()
{
pinMode(menu, INPUT_PULLUP);
pinMode(enter, INPUT_PULLUP);
pinMode(pinoSensor, INPUT);
pinMode(pinoSensor2, INPUT);
pinMode(pinoSensor3, INPUT);
lcd.begin (16,4);
lcd.setBacklight(HIGH);
lcd.setCursor(0,0);
lcd.print(">");
} //end setup
void loop()
{
// Verifica se o objeto foi detectado pelo sensor
if (digitalRead(pinoSensor)) sensor_alto=1;
if(!digitalRead(pinoSensor) && sensor_alto);
if(digitalRead(pinoSensor2)) sensor_high=1;
if(!digitalRead(pinoSensor2) && sensor_high);
if(digitalRead(pinoSensor3)) sensor_high2=1;
if(!digitalRead(pinoSensor3) && sensor_high2)
{
// Incrementa o valor do contador
sensor_alto =0;
contador +=1;
sensor_high =0;
counter2 +=1;
sensor_high2 =0;
counter3 +=1;
}
if(!sub_menu)
{
lcd.setCursor(1,line[0]);
lcd.print("1)SENSOR GERAL ");
lcd.setCursor(1,line[1]);
lcd.print("2)SENSOR RAMPA1 ");
lcd.setCursor(1,line[2]);
lcd.print("3)SENSOR RAMPA2 ");
}
readButts();
} //end loop
void readButts()
{
if(!digitalRead(menu)) menu_flag = 0x01;
if(!digitalRead(enter)) enter_flag = 0x01;
if(digitalRead(menu) && menu_flag)
{
menu_flag = 0x00;
list_menu();
menu_number+=1;
if(menu_number > 3) menu_number = 1;
} //end if menu
if(digitalRead(enter) && enter_flag)
{
enter_flag = 0x00;
sub_menu = !sub_menu;
menu_select();
} //end if menu
} //end readButts
void list_menu()
{
for(int i=2; i>-1; i--)
{
index = i-1;
line_bk[i] = line[i];
if(index < 0) line[i] = line_bk[i+2];
else line[i] = line[i-1];
}
} //end list_menu
void menu_select()
{
switch(menu_number)
{
case 1:
lcd.setCursor(1,0);
lcd.print(" SENSOR GERAL ");
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(7,1);
lcd.print(contador);
break;
case 2:
lcd.setCursor(1,0);
lcd.print(" SENSOR RAMPA1 ");
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(7,1);
lcd.print(" ");
lcd.setCursor(7,1);
lcd.print(counter2);
break;
case 3:
lcd.setCursor(1,0);
lcd.print(" SENSOR RAMPA2 ");
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(7,1);
lcd.print(" ");
lcd.setCursor(7,1);
lcd.print(counter3);
break;
} //end switch
} //end menu_select