#include <EEPROM.h>
#include <LiquidCrystal.h> // inclui a biblioteca liquid crystal
/*
* UNIUBE POLO QUIRONOPOLIS - GO ***********
* PROJETO INTEGRADO 2 *********************
* LUCIO ROGERIO JUNIOR ********************
* FABIO NEMBER DOS SANTOS MIRANDA ****
* RA 1128096 ******************************
* POLO QUIRINÓPOLIS - GO ******************
* LIMPEZA DE FILTRO MANGA ARDUINO MEGA ****
*/
#define sensor_p A0 //definindo nomes para as portas do arduino, para facilitar a programação
#define automatico A1
#define reset A2
#define teste A3
#define select A4
#define led_limpeza A5
#define saida_falha A6
#define saida_buzzer A7
#define valvula1 1
#define valvula2 2
#define valvula3 8
#define valvula4 9
#define valvula5 10
#define valvula6 11
#define valvula7 12
#define valvula8 13
float pressao =0.0; // variavel para armazenar o valor da pressao
int tela = 0; // variavel para controlar o que vai ser exibido na tela e o estagio de partida
int RA = 2700; // soma do RA 1128096
unsigned long tempo = 0; // armazena o tempo do millis para comparar o tempo dos ciclos automaticos
int cont_val = 1; // conta as valvulas para fazer a limpeza manual e automatica
int ciclo = EEPROM.read(0); // faz a leitura da eeprom e salva na variavel
bool cont2s = false; // é ativado quando for contar 2 segundos da valvula ligado no automatico
bool cont5s = false; // é ativado para contar o tempo de espera de 5 segndos para ligar a proxima valvula
bool contciclo = false; //é ativado quando termina a limpeza da valvula 8 no automatico
LiquidCrystal lcd(A8, A9, A10, A11, A12, A13); // cria na variavel lcd atributos para enviar informaçãoes para o display.
void setup() {
// portas de entrada e saida
pinMode(sensor_p,INPUT); // define pino como entrada
pinMode(automatico,INPUT_PULLUP);
pinMode(reset,INPUT_PULLUP); // define pino como entrada em nivel alto (inibe utilizar resistor no circuito)
pinMode(teste,INPUT_PULLUP);
pinMode(select,INPUT_PULLUP);
pinMode(led_limpeza,OUTPUT); // define pino como saida
pinMode(saida_falha,OUTPUT);
pinMode(saida_buzzer,OUTPUT);
pinMode(valvula1,OUTPUT);
pinMode(valvula2,OUTPUT);
pinMode(valvula3,OUTPUT);
pinMode(valvula4,OUTPUT);
pinMode(valvula5,OUTPUT);
pinMode(valvula6,OUTPUT);
pinMode(valvula7,OUTPUT);
pinMode(valvula8,OUTPUT);
//mensagem de introdução
digitalWrite(saida_buzzer,HIGH); //liga o buzzer
tone(saida_buzzer, 500); // gera uma frequencia para ativar o som, pois nesta plataforma o buzzer fica como buzzer passivo
delay(1000);
noTone(saida_buzzer);
digitalWrite(saida_buzzer,LOW); //desliga o buzzer
lcd.display(); // inicia o display
lcd.begin(16, 2); // define o display com 16 colunas e 2 linhas
lcd.setCursor(0,0); // posiciona cursor na linha 1 e coluna 1
lcd.print(" UNIUBE "); // os espacos antes e depois da mensagem é para centralizar
lcd.setCursor(0,1); // posiciona cursor na linha 2 e coluna 1
lcd.print(" PROJ. INTEGR. 2");
delay(3000);
lcd.setCursor(0,0); // posiciona cursor na linha 1 e coluna 1
lcd.print("FABIO NEMBER");
lcd.setCursor(0,1); // posiciona cursor na linha 2 e coluna 1
lcd.print(" RA: 1128096 ");
delay(3000);
lcd.setCursor(0,0); // posiciona cursor na linha 1 e coluna 1
lcd.print("FILTRO LIMPEZA ");
lcd.setCursor(0,1); // posiciona cursor na linha 2 e coluna 1
lcd.print(" TIPO MANGA ");
delay(3000);
lcd.setCursor(0,0); // posiciona cursor na linha 1 e coluna 1
lcd.print(" SEJA BEM ");
lcd.setCursor(0,1); // posiciona cursor na linha 2 e coluna 1
lcd.print(" VINDO(A) ");
delay(2500);
digitalWrite(saida_buzzer,HIGH); //liga o buzzer
tone(saida_buzzer, 500); // gera uma frequencia para ativar o som, pois nesta plataforma o buzzer fica como buzzer passivo
delay(200);
noTone(saida_buzzer);
digitalWrite(saida_buzzer,LOW);
delay(200);
digitalWrite(saida_buzzer,HIGH); //liga o buzzer
tone(saida_buzzer, 500); // gera uma frequencia para ativar o som, pois nesta plataforma o buzzer fica como buzzer passivo
delay(200);
noTone(saida_buzzer);
digitalWrite(saida_buzzer,LOW);
lcd.clear(); // limpa tudo que foi escrito no visor
}
void pressao_valvula(){ // função para leitura da pressao
pressao = analogRead(sensor_p); // faz a leitura da porta
pressao = pressao/1024 * 500; // converte o valor lido em bits para pressao
}
void loop() {
pressao_valvula(); // chama a função que lê a pressao
if(pressao > 300){
tela = 2;
tempo = 0;
digitalWrite(saida_falha,HIGH);
digitalWrite(led_limpeza,LOW);
digitalWrite(cont_val,LOW);
cont2s = false;
cont5s = false;
contciclo = false;
}
else if(digitalRead(saida_falha) == HIGH){
digitalWrite(saida_falha,LOW);
if(digitalRead(automatico) == LOW){
tela = 1;
}
else{
tela = 0;
}
}
switch(tela){ // este switch exibe mensagens do visor
case 0:{ // exibe modo manual
lcd.setCursor(0,0); //cursor coluna 1 e linha 1
lcd.print(" MANUAL | VAL: "); // envia a mensagem para o visor
lcd.print(cont_val);
lcd.setCursor(0,1); // cursor para a coluna 1 e linha 2
lcd.print("Pressao: ");
lcd.print(pressao,0);
lcd.print("mmCA ");
break; // sai do switch
}
case 1: { // exibe modo automatico
lcd.setCursor(0,0); //cursor coluna 1 e linha 1
lcd.print("AUTO | CICLO:"); // envia a mensagem para o visor
lcd.print(ciclo);
lcd.print(" ");
lcd.setCursor(0,1); // cursor para a coluna 1 e linha 2
lcd.print("P:");
lcd.print(pressao,0);
lcd.print("mmCA | V:");
lcd.print(cont_val);
lcd.print(" ");
break;
}
case 2: // exibe a mensagem de erro de pressao
{
lcd.setCursor(0,0); // cursor linha 1 coluna 1
lcd.print(" Erro Valvula: ");
lcd.print(cont_val);
lcd.setCursor(0,1); // cursor linha 2 coluna 1
lcd.print("Pressao: ");
lcd.print(pressao,0);
lcd.print("mmCA ");
break;
}
} // fim switch
if(digitalRead(automatico) == LOW && pressao < 300){ // modo AUTOMATICO
if(tempo == 0){
tela = 1;
cont_val = 1;
digitalWrite(cont_val,HIGH);
digitalWrite(led_limpeza,HIGH);
tempo = millis();
cont2s = true;
}
if (cont2s && (millis() - tempo)>2000){
digitalWrite(cont_val,LOW);
digitalWrite(led_limpeza,LOW);
cont2s = false;
if(cont_val < 8){
cont5s = true;
}
else{
contciclo = true;
}
tempo = millis();
}
if(cont5s && (millis() - tempo)>500){
cont_val += 1;
cont5s = false;
digitalWrite(cont_val,HIGH);
digitalWrite(led_limpeza,HIGH);
tempo = millis();
cont2s = true;
}
if(contciclo && (millis() - tempo)>RA){
contciclo = false;
ciclo += 1;
EEPROM.write(0,ciclo);
tempo = 0;
}
if(digitalRead(reset) == LOW){
ciclo = 0;
EEPROM.write(0,ciclo);
}
} // fim modo AUTO
else { // modo MANUAL
if(tempo != 0 && pressao < 300){
tela = 0;
tempo = 0;
digitalWrite(led_limpeza,LOW);
digitalWrite(cont_val,LOW);
cont2s = false;
cont5s = false;
contciclo = false;
cont_val = 1;
}
if(digitalRead(select) == LOW){ // botao select
cont_val += 1;
while(digitalRead(select) == LOW){} // inibe de incrementar varias vezes a variavel quando clicar 1x
if(cont_val > 8){ // reinicia a contagem se for maior que 8
cont_val = 1;
}
} // fim botao select
if(digitalRead(teste) == LOW){ // botao teste
digitalWrite(cont_val,HIGH);
while(digitalRead(teste) == LOW) {} //enquanto o botão fica pressionado, mantem a valvula ligada
digitalWrite(cont_val,LOW);
} // fim botao teste
if(digitalRead(reset) == LOW){ // botao reset
digitalWrite(valvula1, HIGH);
digitalWrite(valvula2, HIGH);
digitalWrite(valvula3, HIGH);
digitalWrite(valvula4, HIGH);
digitalWrite(valvula5, HIGH);
digitalWrite(valvula6, HIGH);
digitalWrite(valvula7, HIGH);
digitalWrite(valvula8, HIGH);
while(digitalRead(reset) == LOW) {}
digitalWrite(valvula8, LOW);
digitalWrite(valvula7, LOW);
digitalWrite(valvula6, LOW);
digitalWrite(valvula5, LOW);
digitalWrite(valvula4, LOW);
digitalWrite(valvula3, LOW);
digitalWrite(valvula2, LOW);
digitalWrite(valvula1, LOW);
} // fim botão reset
} // fim modo MANUAL
}