#include "include.h"
#include <DallasTemperature.h>
#include <OneWire.h>
/*===============================================================================================================================================================================================================================================================*/
/*======= VARIÁVEIS AUXILIARES =======*/
#define SSR 2 // RELÉ DE ESTADO SÓLIDO
#define MTR 3 // MOTOR COOLER
// DS18B20
#define DS 4
OneWire bus(DS);
DallasTemperature sensor(&bus);
uint8_t adress[8];
float tmp;
// BOTÕES
BUTTONS buttons;
int pins_buttons[3] = {5,6,7};
// LEDS
LED_RGB rgb;
int pins_leds[3] = {8,9,10};
CONTROL control; // função PID
/*===============================================================================================================================================================================================================================================================*/
/*======= VARIÁVEIS =======*/
float hs, HS;
int modo[2] = {0,0}, sp = 10, mv = 0;
bool ajst;
long count[5] = {505,505,505,455,505};
/*===============================================================================================================================================================================================================================================================*/
/*======= SETUP =======*/
void setup() {
Serial.begin(9600);
for (int i = 0; i < 3; i++) {
buttons.pinout(pins_buttons[i],i); // BOTÕES
rgb.pinout(pins_leds[i],i); // LEDS
}
// DS18B20
bus.search(adress);
sensor.begin();
sensor.setResolution(adress, 10);
sensor.requestTemperatures();
tmp = sensor.getTempC(adress);
pinMode(SSR, OUTPUT);
pinMode(MTR, OUTPUT);
digitalWrite(MTR, 60);
}
/*===============================================================================================================================================================================================================================================================*/
/*======= LEITURAS =======*/
void loop () {
// DS18B20
sensor.requestTemperatures();
if (tmp != sensor.getTempC(adress)) {
tmp = sensor.getTempC(adress);
if (modo[0] == 2) {
control.read(tmp);
}
}
// BOTÕES
for (int i = 0; i < 3; i++) {
buttons.read(i,(i == 1) ? false : true);
if (buttons.state[i]) {
if (i == 1) {
// PROCESSAMENTO DA NAVEGAÇÃO
if ((modo[0] == 2 && buttons.time[i] >= 1000) || (ajst && buttons.time[i] >= 1000)) {
ajst = !ajst;
} else {
modo[ajst] = (modo[ajst] + 1) % 3;
}
// CONTAGEM
} else {
if (ajst) {
count[modo[1]] += buttons.state[0] - buttons.state[2];
} else {
count[constrain((4 - modo[0]), 3, 4)] += buttons.state[0] - buttons.state[2];
}
}
buttons.state[i] = 0;
}
}
/*===============================================================================================================================================================================================================================================================*/
/*======= DEFININDO SET POINT =======*/
if (sp != constrain((count[3] % 91) + 10, 10, 100)) {
sp = constrain((count[3] % 91) + 10, 10, 100);
Serial.println(sp);
if (modo[0] == 1) {
hs = float(sp) - 0.5;
HS = float(sp) + 0.5;
} else if (modo[0] == 2) {
control.setpoint = sp;
}
}
switch(modo[0]){
/*===============================================================================================================================================================================================================================================================*/
/*======= MODO MANUAL =======*/
case 0:
// VARIÁVEL MANIPULADA
rgb.setRed();
if (mv != count[4] % 101) {
mv = count[4] % 101;
}
digitalWrite(SSR,pwm(500,map(mv,0,100,0,30)));
display(tmp,mv);
break;
/*===============================================================================================================================================================================================================================================================*/
/*======= MODO ON/OF =======*/
// VARIÁVEL MANIPULADA
case 1:
rgb.setGreen();
if (tmp < hs) {
mv = 100;
digitalWrite(SSR,HIGH);
} else if (tmp > HS) {
mv = 0;
digitalWrite(SSR,LOW);
}
display(tmp,mv,sp,hs,HS);
break;
case 2:
/*===============================================================================================================================================================================================================================================================*/
/*======= MODO AJUSTE DE GANHOS =======*/
if (ajst) {
if (control.k[modo[1]] * 10 != float(count[modo[1]] % 101)){
digitalWrite(SSR,LOW);
control.setK(modo[1],count[modo[1]] % 101);
}
rgb.allBlinkExcept(modo[1]);
/*===============================================================================================================================================================================================================================================================*/
/*======= MODO PID =======*/
} else {
rgb.setBlue();
control.pid();
digitalWrite(SSR,pwm(500,map(constrain(control.signal,0,100),0,100,0,30)));
}
display(tmp,control.signal,sp,control.k[0],control.k[1],control.k[2]);
break;
default:
break;
}
}