// https://forum.arduino.cc/t/como-alterar-o-valor-de-uma-propriedade-instanciada/1247267
#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(int contarx);
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!
void Monitor::blink(int contarx) {
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(contarx);
tempoAgora = millis();
status = !status;
} else if (!status && millis() - tempoAgora > 700) {
lcd.setCursor(_coluna, _linha);
lcd.print(" ");
tempoAgora = millis();
status = !status;
}
}
Monitor Teste("Irra!");
int contar = 0;
Monitor contador(String(contar), 2, 10); // Valor contar Recebe zero
bool lido;
void setup() {
Serial.begin(115200);
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(contar); //Aqui o valor volta a ser zero
}