Ola boa noite!!!

 pessoal gostaria que me ajudasse a solucionar o seguinte problema:

  • queria acionar o cooler de forma automática por meio do DHT22, quando o mesmo atingir temperatura X, até ai tudo bem o código está correto;
  • queria acionar o cooler de forma manual por meio do botão, porém não estou conseguindo, quando separo os códigos tanto a forma manual e ou a forma automática funciona.


//INCLUSÃO DAS BIBLIOTECAS
#include "DHT.h"
#include "Stepper_28BYJ_48.h"


//DEFINIÇÃO DE PINOS
#define BOTAO 5 // botão que liga e desliga o cooler manual;
#define pinSensor 7 // pino do sensor de temperatura DHT;
#define RELE_COOLER 6 // pino do relé que aciona o cooler;
#define DHTTYPE DHT22 // DHT 22 (AM2303)

//------------ Codigo para acionar o cooler por meio do botao-------------------------------

// boolean estadoRELE = 0;
// -----------------------------------------------------------------------------------------

//-----------------controle de temperatura--------------------------------------------------
int maxHum = 60; // Variavel que recebe valor da Humidade
int maxTemp = 30; // Variavel que recebe valor da Temperatura

DHT dht (pinSensor,DHTTYPE);
//------------------------------------------------------------------------------------------

void setup()
{

// INICIANDO MONITOR SERIAL
Serial.begin(9600);
dht.begin();

//declaração dos botões e ativação de seus resistores pullup internos


pinMode(BOTAO, INPUT_PULLUP); //Define pinos que liga o cooler do rele como entrada
pinMode(RELE_COOLER, OUTPUT); //Define pinos para o rele como saida


void loop()
{
// Check if any reads failed and exit early (to try again).

float h = dht.readHumidity();
// Read temperature as Celsius
float t = dht.readTemperature();

// Check if any reads failed and exit early (to try again).
if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from DHT sensor!");
return;
}

if( t >= maxTemp ) {
digitalWrite(RELE_COOLER, LOW);
}
else {
digitalWrite(RELE_COOLER, HIGH);
}

//-----------------------------------------------------------------------------
 if(digitalRead(BOTAO)== LOW)// Define o pino do botao como entrada "INPUT"
 {
 estadoRELE = !estadoRELE; //troca o estado do rele
 digitalWrite(RELE_COOLER, estadoRELE);
 while(digitalRead(BOTAO)== LOW);
 }

//-----------------------------------------------------------------------------
// A temperatura está dentro do desejado
//Mas mesmo assim quero ligar o cooler manualmente
//Por isso, se o botão mudar o estado ou seja mudar de 0 para 1 liga o cooler
Serial.print(" \t");
Serial.print("Umidade: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Temperatura: ");
Serial.print(t);
Serial.println(" ºC ");

delay(1000);



}

Exibições: 240

Responder esta

Respostas a este tópico

A condição do botão pressionado deve sobrepor a condição de acionamento automático, quando pressionar o botão ele não deve mais tratar o sensor de temperatura para ligar o rele.

Coloque dessa forma:

if(digitalRead(BOTAO)== LOW) {

"código para acionar o fan com o botão manualmente"

} else{

"código para acionar o o fan automaticamente"

}

Boa tarde FJS, (se não gosta que te chame pelas iniciais, avise),

gostaria muito de te ajudar, mas para isto recomendo as seguintes ações:


1. Remova seu sketch da área de texto do seu tópico;

2. Clique em : " Deseja carregar arquivos? " e depois em " Escolher arquivo"

    e anexe o arquivo  com o seu sketch;


3. Leia http://labdegaragem.com/forum/topics/sugest-o-de-como-postar
4. Comente as linhas do seu sketch. Fica mais fácil entender o que vc quer fazer com cada
     linha e facilita a ajuda.

RV

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço