Atualização do código da tampa do aquário

Mudança de planos.

Quero usar o botão para ligar o timer, quando passar o tempo de 5 horas ele ira desligar o led, e só após pressionar o botão novamente ira acender e se caso eu precisar apagar o led pressionar o botão , e assim, sucessivamente, no código abaixo o led está piscando.

E também adicionei um código de um sensor de temperatura para acionar um cooler para resfriar o a agua do aquário, este está funcionando corretamente.

Só preciso de ajuda no caso do timer...

Se puderem ajudar, ficarei grato!

#include <Thermistor.h> //INCLUSÃO DA BIBLIOTECA
#define pinBotao 2
#define pinLED 4
#define cooler 6
boolean estadoBotao = true;
boolean estAntBotao = true;
boolean estadoPisca = false;
Thermistor temp(2); //VARIÁVEL DO TIPO THERMISTOR, INDICANDO O PINO ANALÓGICO (A2) EM QUE O TERMISTOR ESTÁ CONECTADO

unsigned long delay1 = 0;

void setup() {
  pinMode(pinBotao, INPUT_PULLUP);
  pinMode(pinLED, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  estadoBotao = digitalRead(pinBotao);
  if (!estadoBotao && estAntBotao) {
    estadoPisca = !estadoPisca;
  }
  estAntBotao = estadoBotao;
  if (estadoPisca) {
  
    if ((millis() - delay1) >= 5000) {
      digitalWrite( pinLED, LOW);
    }

    if ((millis() - delay1) < 10000) {
      digitalWrite( pinLED, HIGH);
    }

    if ((millis() - delay1) >= 15000) {
      delay1 = millis();
    }
  } else {
    digitalWrite( pinLED, LOW);
  }

  

  int temperature = temp.getTemp(); //VARIÁVEL DO TIPO INTEIRO QUE RECEBE O VALOR DE TEMPERATURA CALCULADO PELA BIBLIOTECA
  /*Serial.print("Temperatura: "); //IMPRIME O TEXTO NO MONITOR SERIAL
  Serial.print(temperature); //IMPRIME NO MONITOR SERIAL A TEMPERATURA MEDIDA
  Serial.println("*C"); //IMPRIME O TEXTO NO MONITOR SERIAL
  */
  if (temperature >= 28) {
    digitalWrite(cooler, HIGH);
  } else {
    digitalWrite(cooler, LOW);
  }
}

Boa tarde @brenobozolla
gosto de usar o sketch o mais simples possivel.
Veja se esta modificação no seu sketch atende sua necessidade.

O tempo de LED ligado você ajusta na variável "tempo".

RV mineirin

#include <Thermistor.h> //INCLUSÃO DA BIBLIOTECA
#define pinBotao 2
#define pinLED 4
#define cooler 6
boolean estadoBotao = false;
Thermistor temp(2); //VARIÁVEL DO TIPO THERMISTOR, INDICANDO O PINO ANALÓGICO (A2) EM QUE O TERMISTOR ESTÁ CONECTADO
unsigned long delay1 = 0;
unsigned long tempo = 5000;
//-----------------------------------------------------------------
void setup() {
  pinMode(pinBotao, INPUT_PULLUP);
  pinMode(pinLED, OUTPUT);
  Serial.begin(9600);
}
//-----------------------------------------------------------------
void loop() {
  if (digitalRead(pinBotao) == LOW)           //  Se botao foi pressionado
  {
    while (digitalRead(pinBotao) == LOW) {}   // Enquanto botao pressionado
    delay(30);                                // Debouncing
    estadoBotao = !estadoBotao;               // Inverte status do botão
    delay1 = millis();                        // Atualiza delay1
  }
  if (estadoBotao)                            // Se status do botao for true
  {
    digitalWrite( pinLED, HIGH);              // Liga LED
    if ((delay1 + tempo) < millis())          // Fica ligado por tempo mseg
    {
      estadoBotao = false;                    // Depois de tempo mseg status LED false
    }
  }
  else                                        // Se status botao for false
  {
    digitalWrite( pinLED, LOW);               // Desliga LED
  }
  //  int temperature = temp.getTemp(); //VARIÁVEL DO TIPO INTEIRO QUE RECEBE O VALOR DE TEMPERATURA CALCULADO PELA BIBLIOTECA
  /*Serial.print("Temperatura: "); //IMPRIME O TEXTO NO MONITOR SERIAL
    Serial.print(temperature); //IMPRIME NO MONITOR SERIAL A TEMPERATURA MEDIDA
    Serial.println("*C"); //IMPRIME O TEXTO NO MONITOR SERIAL
  */
  if (temperature >= 28)
  {
    digitalWrite(cooler, HIGH);
  }
  else
  {
    digitalWrite(cooler, LOW);
  }
}

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.