// ====== PINOS ======
#define START 2
#define STOP 3
#define EMERGENCIA 4
#define SENSOR_FRASCO 5
#define SENSOR_NIVEL 6
#define SENSOR_SELAGEM 7
#define MOTOR 8
#define VALVULA 9
#define SELADORA 10
#define ALARME 11
// ====== VARIÁVEIS ======
bool sistemaLigado = false;
bool ciclo = false;
bool falha = false;
unsigned long tempoEnvase = 0;
bool temporizadorAtivo = false;
// ====== SETUP ======
void setup() {
pinMode(START, INPUT_PULLUP);
pinMode(STOP, INPUT_PULLUP);
pinMode(EMERGENCIA, INPUT_PULLUP);
pinMode(SENSOR_FRASCO, INPUT_PULLUP);
pinMode(SENSOR_NIVEL, INPUT_PULLUP);
pinMode(SENSOR_SELAGEM, INPUT_PULLUP);
pinMode(MOTOR, OUTPUT);
pinMode(VALVULA, OUTPUT);
pinMode(SELADORA, OUTPUT);
pinMode(ALARME, OUTPUT);
}
// ====== LOOP ======
void loop() {
// EMERGÊNCIA
if (digitalRead(EMERGENCIA) == LOW) {
sistemaLigado = false;
falha = true;
}
// START
if (digitalRead(START) == LOW) {
sistemaLigado = true;
}
// STOP
if (digitalRead(STOP) == LOW) {
sistemaLigado = false;
ciclo = false;
falha = false;
}
// MOTOR ESTEIRA
digitalWrite(MOTOR, sistemaLigado && !falha);
// DETECÇÃO DE FRASCO
if (sistemaLigado && digitalRead(SENSOR_FRASCO) == LOW) {
ciclo = true;
temporizadorAtivo = true;
tempoEnvase = millis();
}
// ENVASE (5 segundos)
if (temporizadorAtivo) {
if (millis() - tempoEnvase < 5000 && digitalRead(SENSOR_NIVEL) == LOW) {
digitalWrite(VALVULA, HIGH);
} else {
digitalWrite(VALVULA, LOW);
temporizadorAtivo = false;
}
}
// SELAGEM
if (ciclo && digitalRead(SENSOR_SELAGEM) == HIGH) {
digitalWrite(SELADORA, HIGH);
} else {
digitalWrite(SELADORA, LOW);
}
// ❌ FALHA (não selou)
if (ciclo && digitalRead(SENSOR_SELAGEM) == LOW && !temporizadorAtivo) {
falha = true;
}
// 🚨 ALARME
digitalWrite(ALARME, falha);
}