Amigos, estou não consigo alterar o valor da variável depois de instancia-la.
No código abaixo nas primeiras 73 linhas crio uma classe que usa a biblioteca LiquidCrystal_I2C para apresentar no monitor alguma mensagem.
Na linha 71 (Monitor contador(String(contar), 2, 10); // Valor contar Recebe zero) crio uma instância chamada contador que recebe zero, até ai sem problemas.
No entanto, quando jogo ela dentro de um loop o valor é acrescido todas as vezes que aperto um botão e me apresenta o valor, mas ao sair do loop o valor apresentado volta a ser zero.
Percebi que instanciei o objeto varias vezes, mas foi a forma que funcionou mais perto do jeito que eu queria.
#include <LiquidCrystal_I2C.h>
#define botaoDoCachorro 4
#define botaoMais 7
#define botaoMenos 5
#define botaoEnter 6
#define ledSemCredito 10
#define ledTemCredito 9
#define motorComida 8
class Monitor{
public:
Monitor(String texto, byte linha=0, byte coluna=0);
void inicio();
void loop();
void limparTela();
void blink();
unsigned long tempoAgora;
bool status = false;
private:
String _texto;
byte _linha;
byte _coluna;
};
LiquidCrystal_I2C lcd(0x27, 20, 4);
Monitor::Monitor(String texto, byte linha=0, byte coluna=0){
_texto = texto;
_linha = linha;
_coluna = coluna;
}
void Monitor::inicio(){
lcd.begin(4, 20);
lcd.init();
lcd.backlight();
}
void Monitor::loop(){
lcd.setCursor(_coluna, _linha);
lcd.print(_texto);
}
void Monitor::limparTela(){
lcd.clear();
}
void Monitor::blink(){ // tem que estar dentro de um loop para funcionar!
byte tamanhoTexto = _texto.length();
String vazio;
for (int inicio = 1; inicio <= tamanhoTexto; inicio++){
vazio = vazio + " ";
}
if(status && millis() - tempoAgora > 200){
lcd.setCursor(_coluna, _linha);
lcd.print(_texto);
tempoAgora = millis();
status = !status;
}else if(!status && millis() - tempoAgora > 700){
lcd.setCursor(_coluna, _linha);
lcd.print(vazio);
tempoAgora = millis();
status = !status;
}
}
Monitor Teste("Irra!");
int contar = 0;
Monitor contador(String(contar), 2, 10); // Valor contar Recebe zero
bool lido;
void setup() {
Teste.inicio();
pinMode(botaoMais, INPUT_PULLUP);
pinMode(botaoDoCachorro, INPUT_PULLUP);
pinMode(ledTemCredito, OUTPUT);
}
unsigned long marcaHora;
Monitor mostrar(String(contar), 3, 0);
void loop() {
lido = !digitalRead(botaoMais);
if(lido){
marcaHora = millis();
contar ++;
while(true){
Monitor mostrar(String(contar), 3, 0); //Aqui o valor é alterado
mostrar.loop(); //Aqui exibe o valor corretamente
digitalWrite(ledTemCredito, HIGH);
if(lido){
contar ++;
}
if(millis() - marcaHora > 1000) break;
if(!digitalRead(botaoDoCachorro)) break;
}
}
digitalWrite(ledTemCredito, LOW);
mostrar.blink(); //Aqui o valor volta a ser zero
}