Boa noite galera,
To bancando o noob aqui, e pelejando em não ter de recorrer ao uso de interrupções.
Tenho o seguinte problema montei um circuito com um Termistor Dallas 18B20, a temperatura tem sido lida corretamente, fiz tambem no código que um cooler seja acionado ao pressionar um botão. Isso tem funcionado corretamente, porem quero que o cooler seja desligado ao chegar a temperatura por volta de 30 graus e ligue automaticamente caso seja superior a 50 graus.
Bem estou morrendo nesta questão.
Agradeço qualquer ajuda da galera.
Código segue abaixo:
#include <OneWire.h>
#include <DallasTemperature.h>
#define buttonPin 2
#define coolerPin 13
#define pinTemp 0
#define ONE_WIRE_BUS 10
float val = 0;
boolean lastButton = LOW;
boolean currentButton = LOW;
boolean coolerLigado = true;
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
void setup()
{
sensors.begin();
pinMode(buttonPin, INPUT);
digitalWrite(buttonPin,HIGH);
pinMode(coolerPin, OUTPUT);
Serial.begin(9600);
}
boolean debounce(boolean last)
{
boolean current = digitalRead(buttonPin);
if (last != current)
{
delay(5);//Tempo de debounce ajuste conforme necessário
current = digitalRead(buttonPin);
}
return current;
}
void loop()
{
currentButton = debounce(lastButton);
if (lastButton == LOW && currentButton == HIGH)
{
coolerLigado = !coolerLigado;
Serial.println("Botao Pressionado");
}
lastButton = currentButton;
digitalWrite(coolerPin, coolerLigado);
sensors.requestTemperatures();
Serial.println(sensors.getTempCByIndex(0));
}
Tags:
if (lastButton == LOW && currentButton == HIGH)
vira
if ((lastButton == LOW && currentButton == HIGH) || (sensors.getTempCByIndex(0) >32 ))
Ou algo assim.
Mas eu colocaria assim:
if (((lastButton == LOW) && (currentButton == HIGH)) || (sensors.getTempCByIndex(0) >32 ))
Acho mais claro, alem de que dependendo do compilador o && é feito primeiro (maior precedencia).
Mas acho que vc poderia chegar a essa conclusão sozinho.. pre não ficar mto fácil pra vc recomendo criar uma variável e colocar nela o valor da temperatura.
Aih vc sempre mostraria e testaria pela variável. Isso elimina a dupla leitura e a possibilidade de mostrar um numero e fazer baseado em outro.
Já fiz desta forma, o problema qua agindo assim se a temperatura estiver alta ele fica a cada nova interação ligando e desligando o motor, ele não simplesmente liga e continua ligado ate a temperatura estabilizar nos padrões definidos.
Por isso creio que terei de fazer o debounce usando interrupções.
Ah, realmente respondi sem nem ver direito a pergunta, desculpe.
Vc quer que ele ligue aos 50 e desligue aos 30.
Então
if (temperatura <= 30) coolerLigado=0;
if (temperatura >= 50) coolerLigado=1;
Se estiver na faixa intermediária mantém o estado anterior.
Veja se é isso...
Grande Eduardo, é por isso que pedi ajuda as vezes a solução simples esta em nossa frente e não vemos, muito obrigado.
Funcionou perfeitamente.
Muito obrigado.
ENTÃO FICARIA ASSIM
sensors.requestTemperatures();
Serial.println(sensors.getTempCByIndex(0));
}
if (temperatura <= 30) coolerLigado=0;
if (temperatura >= 50) coolerLigado=1;
Vou precisa de fazer coisa parecida, mas em que parte entra esse codigo do eduardo?
Amigo pode colocar abaixo desta linha:
sensors.requestTemperatures();
Serial.println(sensors.getTempCByIndex(0));
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por