#include <Arduino.h>
#include <OneWire.h>
#include <DallasTemperature.h>
// Declaração entradas e saidas
// saidas
const int led_aquecimento = 14; // Led indicando o aquecimemnto
const int led_temp_alta = 12; // Led indicando o temperatura alta
const int led_temp_ok = 13; // Led indicando o temperatura indicada
const int rele_emergencia = 16; // Aciona o led de emergencia
// entradas
#define HISTERESE 2
#define SENSOR_TEMP 21 // Pino do sensor de temperaturaconst
int botao_alarme = 4; // Botao para alarmar o sistema
OneWire oneWire(SENSOR_TEMP);
DallasTemperature sensors(&oneWire);
const int pot_setpoint = 0; // Pino potenciometro
// Prototipo Funções
void logicaControleTemp();
void setup() {
Serial.begin(115200);
// Inicializando entradas e saidas
// Saidas
pinMode(led_aquecimento, OUTPUT);
pinMode(led_temp_alta, OUTPUT);
pinMode(led_temp_ok, OUTPUT);
pinMode(rele_emergencia, OUTPUT);
//Entradas
pinMode(botao_alarme, INPUT_PULLUP);
pinMode(pot_setpoint, INPUT);
sensors.begin();
}
void loop() {
logicaControleTemp();
millis();
}
void logicaControleTemp(){
// Leitura das entradas
int valorADC = analogRead(pot_setpoint); // Valor da entrada analogica (ADC)
float valorSetPoint = (valorADC / 4095.0) * 260; /* converte o valor da entrada ADC
do microcontrolador, Min:0 | Max:260 */
bool statusBotaoAlarme = !digitalRead(botao_alarme);
sensors.requestTemperatures(); // adquirir valor do sensor de temperatura
float tempAtual = sensors.getTempCByIndex(0);
Serial.println("====================================");
Serial.print("Status Botao de Alarme: ");
Serial.println(statusBotaoAlarme);
Serial.print("Valor do SetPoint: ");
Serial.println(valorSetPoint);
Serial.print("Temperatura Atual: ");
Serial.println(tempAtual);
Serial.println("====================================");
// Variaveis de estados das entradas
bool statusLedAquecimento = 0;
bool statusLedTempOk = 0;
bool statusLedTempAlta = 0;
bool statusReleEmergencia = 0;
// Logica de ativação dos leds.
if (statusBotaoAlarme){ // Se Botao de alarme pressionado
statusReleEmergencia = 1; // Ligar Led Emergencia
} else{ // se nao esta pressionado
if (tempAtual < valorSetPoint - HISTERESE){ /* Se a Temperatura atual for menor
que dois graus abaixo do valor do SetPoint */
statusLedAquecimento = 1; // Ligar led de aquecimento
} else { // Se nao esta com temperatura abaixo
if (tempAtual > valorSetPoint + HISTERESE){ /*Se a Temperatura atual for maior
que dois graus acima do valor de set point*/
statusLedTempAlta = 1; // liga led de temperatura alta
}else {
statusLedTempOk = 1;
}
}
}
Serial.println("====================================");
Serial.print("Led Emergencia: ");
Serial.println(statusReleEmergencia);
Serial.print("Led Aquecimento: ");
Serial.println(statusLedAquecimento);
Serial.print("Led Temperatura Ok: ");
Serial.println(statusLedTempOk);
Serial.print("Led Temperatura alta: ");
Serial.println(statusLedTempAlta);
Serial.println("====================================");
/* Estruturar saidas no Serial para receber com Python
Serial.print(tempAtual);
Serial.print(",");
Serial.print(valorSetPoint);
Serial.print(",");
Serial.println(statusReleEmergencia);
*/
// escrever saidas
digitalWrite(led_aquecimento, statusLedAquecimento);
digitalWrite(led_temp_alta, statusLedTempAlta);
digitalWrite(led_temp_ok, statusLedTempOk);
digitalWrite(rele_emergencia, statusReleEmergencia);
}