#include <LiquidCrystal.h> // Inclui a biblioteca do LCD
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2; // Pinos do LCD
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
#define Y1 13
#define Y2 A5
#define buzzer A3
#define bt_esq 6
#define bt_ent 7
#define bt_dir 8
#define motor 10
#define sensorcaixa 9
void setup() {
Serial.begin(9600);
lcd.begin(16, 2);
pinMode(bt_esq, INPUT_PULLUP); //botão esquerdo
pinMode(bt_ent, INPUT_PULLUP); //botão enter
pinMode(bt_dir, INPUT_PULLUP); //botão direito
pinMode(Y1, OUTPUT); //Valvula Y1
pinMode(Y2, OUTPUT); //Válvula Y2
pinMode(buzzer, OUTPUT); //Buzzer
pinMode(sensorcaixa, INPUT); //sensor de caixas
//inicialização das variáveis
digitalWrite(Y1, LOW);
digitalWrite(Y2, LOW);
digitalWrite(buzzer, LOW);
lcd.clear();
lcd.setCursor(1,0);
lcd.print("INICIO PJTECH");
lcd.setCursor(4,1);
lcd.print("HANTONY");
delay(4000);
lcd.clear();
for(int n=0;n<5;n++){
digitalWrite(buzzer, HIGH);
delay(300);
digitalWrite(buzzer, LOW);
delay(300);
}
}
bool screen2=0;
int posicao=0; //posição do cursor
int rt_BotaoD=1; //variável auxiliar para borda do botão direito
int rt_BotaoE=1; //variavel auxiliar para borda do botão esquerdo
int rt_BotaoEnter=1; //variavel auxiliar para borda do botão enter
int velocidade=0; //velocidade do motor
int adc=0;
float sensortemperatura=0; //sensor de temperatura
int rt_bordaalerta=0; //variavel auxiliar para enviar mensagem apenas uma vez
int rt_sensor=0;
//Função para comando das esteiras
void esteira(int valvula1,int valvula2){
digitalWrite(valvula1, HIGH);
delay(1800);
digitalWrite(valvula2, HIGH);
delay(1800);
digitalWrite(valvula1, LOW);
digitalWrite(valvula2, LOW);
rt_sensor=1;
}
void loop() {
adc = analogRead(A0); //potenciometro sensor
sensortemperatura = 95.0*(adc/1023.0); //queria ter usado a função map, mas não achei como aparecer numero quebrado
if (digitalRead(bt_dir)==0 && rt_BotaoD==1){
posicao = posicao +1;
rt_BotaoD=0;
}
if (digitalRead(bt_esq)==0 && rt_BotaoE==1){
posicao = posicao -1;
rt_BotaoE=0;
}
if (digitalRead(sensorcaixa)==1 && rt_sensor==0){
rt_sensor=1;
}
//lógica de posicionamento do cursor
if (posicao ==0 && sensortemperatura <=40) {
lcd.clear();
lcd.setCursor(0,0);
lcd.print("ESTEIRA 0123 T");
lcd.setCursor(8,1);
lcd.print("^");
delay(200);
}
if (posicao == 1 && sensortemperatura <=40){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("ESTEIRA 0123 T");
lcd.setCursor(9,1);
lcd.print("^");
delay(200);
}
if (posicao == 2 && sensortemperatura <=40){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("ESTEIRA 0123 T");
lcd.setCursor(10,1);
lcd.print("^");
delay(200);
}
if (posicao == 3 && sensortemperatura <=40){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("ESTEIRA 0123 T");
lcd.setCursor(11,1);
lcd.print("^");
delay(200);
}
if (posicao == 4 && screen2==0 && sensortemperatura <=40){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("ESTEIRA 0123 T");
lcd.setCursor(13,1);
lcd.print("^");
delay(200);
}
//limita valor máximo
if (posicao >= 5){
posicao =0;
}
//limita valor mínimo
if (posicao < 0){
posicao =4;
}
//Bordas dos botões
if (digitalRead(bt_dir)==HIGH){
rt_BotaoD=1;
}
if (digitalRead(bt_esq)==HIGH){
rt_BotaoE=1;
}
if (digitalRead(bt_ent)==HIGH){
rt_BotaoEnter=1;
}
if (digitalRead(sensorcaixa)==LOW){
rt_sensor=0;
}
//Seta a velocidade do motor
if (posicao ==0 && digitalRead(bt_ent)==0){
velocidade = 0;
analogWrite(motor,velocidade);
}
if (posicao ==1 && digitalRead(bt_ent)==0){
velocidade = 85;
analogWrite(motor,velocidade);
}
if (posicao == 2 && digitalRead(bt_ent)==0){
velocidade = 170;
analogWrite(motor,velocidade);
}
if (posicao == 3 && digitalRead(bt_ent)==0){
velocidade = 255;
analogWrite(motor,velocidade);
}
if (posicao == 4 && digitalRead(bt_ent)==0 && rt_BotaoEnter==1){
screen2 = 1;
rt_BotaoEnter=0;
}
//Ativa tela 2 apenas uma vez, mesmo se botão ficar pressionado
if (screen2 == 1){
if (sensortemperatura<40){
lcd.clear();
lcd.setCursor(1,0);
lcd.print("TEMPERATURA");
lcd.setCursor(1,1);
lcd.print(sensortemperatura);
lcd.setCursor(7,1);
lcd.print("CELSIUS");
delay(200);
}
}
//retorna para tela anterior
if (screen2 == 1 && (digitalRead(bt_dir)==0 || digitalRead(bt_ent)==0 || digitalRead(bt_esq)==0) && rt_BotaoEnter==1){
screen2 = 0;
posicao = 4;
rt_BotaoEnter=0;
}
//Ativa tela 3 em caso de alerta de temperatura, desativa tela assim que temperatura baixar de 40.
if (sensortemperatura >= 40){
rt_bordaalerta=rt_bordaalerta +1;
lcd.clear();
lcd.setCursor(1,0);
lcd.print("ALERTA");
lcd.setCursor(1,1);
lcd.print("AQUECIMENTO!");
delay(200);
velocidade=0;
analogWrite(motor,velocidade);
//limita valor da borda para não estourar a variável
if (rt_bordaalerta > 10){
rt_bordaalerta = 2;
}
//Mostra mensagem apenas uma vez
if (rt_bordaalerta==1){
Serial.print("Alerta de aquecimento");
digitalWrite(buzzer, HIGH);
delay(1000);
digitalWrite(buzzer, LOW);
}
}
if (sensortemperatura <40){
rt_bordaalerta=0;
}
//lógica das esteiras de caixa
if (digitalRead(sensorcaixa)==1 && rt_sensor==0) esteira(Y1,Y2);
}