/*============================
TCC Hidroponia Automatizada
by: losr
==============================*/
// Inclusão de Bibliotecas
// ===== Mapeamento de Hardware ===== //
// Controle
#define btu 4 // Up
#define btd 0 // Down
#define bte 2 // Enter
#define btb 15 // Back
// Sensores
#define pin_sph 39 // pH e temperatua d'água
#define pin_tds 35 // Condutividade
#define pin_dht 32 // Temperatura e umidade do ar
#define pin_hcsr 33 // Ultrassônico para nível
#define pin_mag 25 // Magnético (opcional)
#define pin_ldr 26 // Luz (opcional)
// Atuadores
#define pin_yfill 27 // Válvula Solenóide de Enchimento
#define pin_ydrain 14 // Válvula Solenóide de Escoamento
#define pin_mixer 12 // Motor do Tanquinho
#define pin_pump 13 // Bomba d'água
// ===== Constantes ===== //
bool btu_f, btd_f, bte_f, btb_f;
const int dht = 3;
int teste;
// ===== Variáveis Globais ===== //
// ===== Declaração das Funções ===== //
void bootProcess(); // Inicialização da interface do menu
void factoryReset(); // Reseta todas as configurações
void keyboard(); // Interface dos Botões
void irrigate(); // Rega
void readSensor(char sensor);
// ===== Definição das classes ===== //
class atuador {
int pin;
public:
void anexar(int in) {
pin = in;
pinMode(pin, OUTPUT);
}
void on() {
digitalWrite(pin, HIGH);
}
void off() {
digitalWrite(pin, LOW);
}
};
// ===== Declaração de Objetos da Classe ===== //
atuador yfill, ydrain, mixer, pump;
void setup() {
bootProcess();
do{
yfill.on();
} while (!keyboard('f'));
if(keyboard('f') == 1) Serial.println("ENTER");
else if(keyboard('f') == 2) Serial.println("CANCEL");
yfill.off();
}
void loop() {
switch(teste){
case dht:
break;
}
}
// Definição das Funções
int keyboard(char a)
{
/*
a = f : executar função/ação
a = n : contagem númerica
a = m : navegar no menu
*/
if(!digitalRead(bte)) bte_f = 0x01;
if(!digitalRead(btb)) btb_f = 0x01;
if(!digitalRead(btu)) btu_f = 0x01;
if(!digitalRead(btd)) btd_f = 0x01;
// Botão Enter Pressionado
if(digitalRead(bte) && bte_f){
bte_f = 0x00;
switch(a){
case 'f':
// Realizar Ação
return 1;
break;
case 'm':
// Entrar menu
return 0;
break;
}
}
// Botão Back Pressionado
if(digitalRead(btb) && btb_f){
bte_f = 0x00;
switch(a){
case 'f':
// Cancelar Ação
return 2;
break;
case 'm':
// Voltar menu
return 0;
break;
}
}
// Botão Up Pressionado
if(digitalRead(btu) && btu_f){
bte_f = 0x00;
switch(a){
case 'n':
// Permitir acréscimo
return 1;
break;
case 'm':
// Subir menu
return 0;
break;
}
}
// Botão Down Pressionado
if(digitalRead(btd) && btd_f){
bte_f = 0x00;
switch(a){
case 'n':
// Permitir decréscimo
return 1;
break;
case 'm':
// Descer menu
return 0;
break;
}
}
return 0;
}
void bootProcess()
{
Serial.begin(115200);
pinMode(btu, INPUT_PULLUP);
pinMode(btd, INPUT_PULLUP);
pinMode(bte, INPUT_PULLUP);
pinMode(btb, INPUT_PULLUP);
yfill.anexar(pin_yfill);
ydrain.anexar(pin_ydrain);
mixer.anexar(pin_mixer);
pump.anexar(pin_pump);
}