/*
Placa: Arduino Nano w/ ATmega328
Ficheiro: Bombas.ino
Versión: 0.2 beta
Autor: Pablo César Galdo Regueiro ([email protected])
LICENSE - LICENZA
Copyright 2016 Pablo César Galdo Regueiro
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Tradución non oficial:
Este programa é un software libre; vostede pode redistribuilo e/ou
modificalo dentro dos termos da Licenza Pública Xeral GNU
publicada pola Fundación do Software Libre (FSF); na versión 3 da
Licenza, ou (á súa elección) calquera versión posterior.
Este programa é distribuído coa esperanza de que poda ser útil,
mais SEN NINGUNHA GARANTÍA; sen garantia implícita de ADAPTACIÓN
a calquer MERCADO ou APLICACIÓN EN PARTICULAR. Vexa a
Licenza Pública Xeral GNU para maiores detalles.
Vostede debeu recibir unha copia da Licenza Pública Xeral GNU xunto
con este programa. Se non, mire <http://www.gnu.org/licenses/>.
*/
/*
* Librarías necesarias
*/
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Bounce2.h>
/*
* Conexión de pantalla LCD 20x4 en enderezo 0x27 por protocolo I2C
*/
LiquidCrystal_I2C lcd(0x27,20,4);
/*
* Definición de límites de nivel (cm)
*/
int n1i = 3; // Nivel 1 inferior
int n1s2i = 7; // Nivel 1 superior / Nivel 2 inferior
int n2s3i = 15; // Nivel 2 superior / Nivel 3 inferior
int n3s4i = 20; // Nivel 3 superior / Nivel 4 inferior
int n4s5i = 25; // Nivel 4 superior / Nivel 5 inferior
int n5s = 30; // Nivel 5 superior
/*
* Definición de intervalo de lecturas de nivel (s)
*/
long temponivel = 5; // Tempo entre lecturas en segundos
/*
* Definición de entradas analóxicas e factores de conversión
*/
int EA_sensor = A0; // Pin de entrada do sensor analóxico 0-5 V
float valorsensor = 0; // Variable para almacenar o valor do sensor en escala de 0 a 1023
float valornivelfloat = 0; // Variable para almacenar o valor do nivel
int valornivelaint = 0; // Variable para convertir o velor de nivel a número enteiro
int valornivel = 0; // Variable para almacenar o valor de nivel redondeado en centímetros
/*
* Definición de entradas dixitais
*/
int E_rearme = 2; // Pin de rearme do sistema
int E_relet1 = 3; // Pin de salto de relé térmico 1
int E_relet2 = 4; // Pin de salto de relé térmico 2
int E_nivels = 5; // Pin de nivel de seguranza
int E_mmotor1 = 6; // Pin de marcha manual motor 1
int E_mmotor2 = 7; // Pin de marcha manual motor 2
/*
* Debouncing de entradas dixitais
*/
int intervalodb = 500; // Tempo de botón premido
Bounce DB_rearme = Bounce(); // Instancia de debouncing de rearme do sistema
Bounce DB_relet1 = Bounce(); // Instancia de debouncing de relé térmico 1
Bounce DB_relet2 = Bounce(); // Instancia de debouncing de relé térmico 2
Bounce DB_nivels = Bounce(); // Instancia de debouncing de nivel de seguranza
Bounce DB_mmotor1 = Bounce(); // Instancia de debouncing de marcha manual motor 1
Bounce DB_mmotor2 = Bounce(); // Instancia de debouncing de marcha manual motor 2
/*
* Definición de entradas dixitais tras debouncing
*/
bool V_rearme = 0; // Pin de rearme do sistema
bool V_relet1 = 0; // Pin de salto de relé térmico 1
bool V_relet2 = 0; // Pin de salto de relé térmico 2
bool V_nivels = 0; // Pin de nivel de seguranza
bool V_mmotor1 = 0; // Pin de marcha manual motor 1
bool V_mmotor2 = 0; // Pin de marcha manual motor 2
/*
* Definición de saídas dixitais
*/
int S_motor1 = 12; // Pin de marcha/paro motor 1
int S_motor2 = 11; // Pin de marcha/paro motor 2
int S_alarmafe = 10; // Pin de alarma de fallo eléctrico
int S_alarmanivel = 9; // Pin de alarma de nivel
/*
* Definición de etapas do GRAFCET
*/
bool etapa0 = 0; // Etapa 0 (Inicial)
bool etapa1 = 0; // Etapa 1 (Espera nivel analóxico)
bool etapa2 = 0; // Etapa 2 (Nivel 1 - N1)
bool etapa3 = 0; // Etapa 3 (Nivel 2 - N2)
bool etapa4 = 0; // Etapa 4 (Nivel 3 - N3)
bool etapa5 = 0; // Etapa 5 (Nivel 4 - N4)
bool etapa6 = 0; // Etapa 6 (Nivel 5 - N5)
bool etapa7 = 0; // Etapa 7 (Alarma fallo sensor analóxico)
bool etapa8 = 0; // Etapa 8 (Temporización nivel analóxico)
bool etapa9 = 0; // Etapa 9 (Espera nivel de seguranza)
bool etapa10 = 0; // Etapa 10 (Temporización nivel de seguranza)
bool etapa11 = 0; // Etapa 11 (Reset nivel de seguranza)
bool etapa12 = 0; // Etapa 12 (Espera fallo eléctrico)
bool etapa13 = 0; // Etapa 13 (Alarma fallo eléctrico motor 1)
bool etapa14 = 0; // Etapa 14 (Alarma fallo eléctrico motor 2)
bool etapa15 = 0; // Etapa 15 (Alarma fallo eléctrico ambos motores)
bool etapa16 = 0; // Etapa 16 (Espera marcha motores)
bool etapa17 = 0; // Etapa 17 (Nivel baixo)
bool etapa18 = 0; // Etapa 18 (Paro)
bool etapa19 = 0; // Etapa 19 (Temporización Paro-Nivel baixo)
bool etapa20 = 0; // Etapa 20 (Determinación estado de alternancia)
bool etapa21 = 0; // Etapa 21 (Alternancia 0)
bool etapa22 = 0; // Etapa 22 (Alternancia 1)
bool etapa23 = 0; // Etapa 23 (Simultaneidade)
bool etapa24 = 0; // Etapa 24 (Nivel alto)
bool etapa25 = 0; // Etapa 25 (Espera rearme)
bool etapa26 = 0; // Etapa 26 (Espera marcha manual motor 1)
bool etapa27 = 0; // Etapa 27 (Marcha manual motor 1)
bool etapa28 = 0; // Etapa 28 (Espera marcha manual motor 2)
bool etapa29 = 0; // Etapa 29 (Marcha manual motor 2)
/*
* Definición de estado de alternancia
*/
bool alternancia = 0; // Estado de alternancia
/* ------------------------------------------------
* VOID SETUP: Código executado no ciclo de inicio
* ------------------------------------------------*/
void setup() {
/*
* Desactivar saídas a relé durante o inicio
*/
digitalWrite(S_motor1, LOW); // Paro motor 1
digitalWrite(S_motor2, LOW); // Paro motor 2
digitalWrite(S_alarmafe, LOW); // Paro fallo eléctrico
digitalWrite(S_alarmanivel, LOW); // Paro alarma de nivel
/*
* Definición de entradas dixitais
*/
pinMode(E_rearme,INPUT); // Pin de rearme do sistema
// Deboucing (para evitar interferencias e rebotes ao premer os botóns)
DB_rearme.attach(E_rearme);
DB_rearme.interval(intervalodb); // intervalo en ms
pinMode(E_relet1,INPUT); // Pin de salto de relé térmico 1
// Deboucing (para evitar interferencias e rebotes ao premer os botóns)
DB_relet1.attach(E_relet1);
DB_relet1.interval(intervalodb); // intervalo en ms
pinMode(E_relet2,INPUT); // Pin de salto de relé térmico 2
// Deboucing (para evitar interferencias e rebotes ao premer os botóns)
DB_relet2.attach(E_relet2);
DB_relet2.interval(intervalodb); // intervalo en ms
pinMode(E_nivels,INPUT); // Pin de nivel de seguranza
// Deboucing (para evitar interferencias e rebotes ao premer os botóns)
DB_nivels.attach(E_nivels);
DB_nivels.interval(intervalodb); // intervalo en ms
pinMode(E_mmotor1,INPUT); // Pin de marcha manual motor 1
// Deboucing (para evitar interferencias e rebotes ao premer os botóns)
DB_mmotor1.attach(E_mmotor1);
DB_mmotor1.interval(intervalodb); // intervalo en ms
pinMode(E_mmotor2,INPUT); // Pin de marcha manual motor 2
// Deboucing (para evitar interferencias e rebotes ao premer os botóns)
DB_mmotor2.attach(E_mmotor2);
DB_mmotor2.interval(intervalodb); // intervalo en ms
/*
* Definición de saídas dixitais
*/
pinMode(S_motor1,OUTPUT); // Pin de marcha/paro motor 1
pinMode(S_motor2,OUTPUT); // Pin de marcha/paro motor 2
pinMode(S_alarmafe,OUTPUT); // Pin de alarma de fallo eléctrico
pinMode(S_alarmanivel,OUTPUT); // Pin de alarma de fallo eléctrico
/*
* Iniciar comunicación por porto serie para depurar o código
*/
//Serial.begin(9600);
/*
* Iniciar pantalla LCD
*/
lcd.init();
/*
* Amosar unha mensaxe de inicio durante 5 segundos
*/
lcd.backlight();
lcd.setCursor(0,0);
lcd.print("CONTROL DE EFLUENTES");
lcd.setCursor(0,1);
lcd.print("(c) Pablo Galdo 2016");
lcd.setCursor(0,2);
lcd.print("IES Punta Candieira ");
lcd.setCursor(0,3);
lcd.print(" Cedeira ");
delay(5000);
lcd.clear();
/*
* Activación da etapa inicial e desactivación das demais
*/
etapa0 = 1; // Etapa 0 (Inicial)
etapa1 = 0; // Etapa 1 (Espera nivel analóxico)
etapa2 = 0; // Etapa 2 (Nivel 1 - N1)
etapa3 = 0; // Etapa 3 (Nivel 2 - N2)
etapa4 = 0; // Etapa 4 (Nivel 3 - N3)
etapa5 = 0; // Etapa 5 (Nivel 4 - N4)
etapa6 = 0; // Etapa 6 (Nivel 5 - N5)
etapa7 = 0; // Etapa 7 (Alarma fallo sensor analóxico)
etapa8 = 0; // Etapa 8 (Temporización nivel analóxico)
etapa9 = 0; // Etapa 9 (Espera nivel de seguranza)
etapa10 = 0; // Etapa 10 (Temporización nivel de seguranza)
etapa11 = 0; // Etapa 11 (Reset nivel de seguranza)
etapa12 = 0; // Etapa 12 (Espera fallo eléctrico)
etapa13 = 0; // Etapa 13 (Alarma fallo eléctrico motor 1)
etapa14 = 0; // Etapa 14 (Alarma fallo eléctrico motor 2)
etapa15 = 0; // Etapa 15 (Alarma fallo eléctrico ambos motores)
etapa16 = 0; // Etapa 16 (Espera marcha motores)
etapa17 = 0; // Etapa 17 (Nivel baixo)
etapa18 = 0; // Etapa 18 (Paro)
etapa19 = 0; // Etapa 19 (Temporización Paro-Nivel baixo)
etapa20 = 0; // Etapa 20 (Determinación estado de alternancia)
etapa21 = 0; // Etapa 21 (Alternancia 0)
etapa22 = 0; // Etapa 22 (Alternancia 1)
etapa23 = 0; // Etapa 23 (Simultaneidade)
etapa24 = 0; // Etapa 24 (Nivel alto)
etapa25 = 0; // Etapa 25 (Espera rearme)
etapa26 = 0; // Etapa 26 (Espera marcha manual motor 1)
etapa27 = 0; // Etapa 27 (Marcha manual motor 1)
etapa28 = 0; // Etapa 28 (Espera marcha manual motor 2)
etapa29 = 0; // Etapa 29 (Marcha manual motor 2)
/*
* Valor inicial do estado de alternancia
*/
alternancia = 0; // Etapa 0 (Inicial)
}
/* ----------------------------------------
* VOID LOOP: Código repetido ciclicamente
* ----------------------------------------*/
void loop() {
/*
* Actualizar as instancias de debouncing das entradas dixitais
*/
// Actualizar instancias:
DB_rearme.update();
DB_relet1.update();
DB_relet2.update();
DB_nivels.update();
DB_mmotor1.update();
DB_mmotor2.update();
// Ler os valores actualizados:
bool V_rearme = DB_rearme.read();
bool V_relet1 = DB_relet1.read();
bool V_relet2 = DB_relet2.read();
bool V_nivels = DB_nivels.read();
bool V_mmotor1 = DB_mmotor1.read();
bool V_mmotor2 = DB_mmotor2.read();
/*
* Lectura de nivel no intervalo de tempo establecido e conversión a centímetros
*/
const unsigned long contanivel = temponivel * 1000UL;
static unsigned long lastSampleTime = 0 - contanivel;
unsigned long now = millis();
if (now - lastSampleTime >= contanivel)
{
lastSampleTime += contanivel;
valorsensor = analogRead(EA_sensor); // Lectura do valor do sensor
}
valornivelfloat = abs(valorsensor * 30 / 1023); // Conversión a centímetros
valornivelaint = valornivelfloat * 100;
valornivel = valornivelaint / 100;
/* ----------------------------------------
* TRANSICIÓNS ENTRE ETAPAS
* ----------------------------------------*/
/*
* ETAPA 0 (Etapa inicial)
*/
switch (etapa0) {
case 0:
//Espera
break;
case 1:
if (V_rearme == 0){
digitalWrite(S_motor1, LOW);
digitalWrite(S_motor2, LOW);
digitalWrite(S_alarmafe, LOW);
digitalWrite(S_alarmanivel, LOW);
etapa0 = 0;
etapa1 = 1;
etapa9 = 1;
etapa12 = 1;
etapa16 = 1;
etapa25 = 1;
etapa26 = 1;
etapa28 = 1;
}
break;
default:
// Espera
break;
}
/*
* FIN ETAPA 0
*/
/*
* ETAPA 1 (Espera nivel analóxico)
*/
switch (etapa1) {
case 0:
// Espera
break;
case 1:
if (valornivel >= n1i && valornivel < n1s2i){
etapa1 = 0;
etapa2 = 1;
}
else if (valornivel >= n1s2i && valornivel < n2s3i){
etapa1 = 0;
etapa3 = 1;
}
else if (valornivel >= n2s3i && valornivel < n3s4i){
etapa1 = 0;
etapa4 = 1;
}
else if (valornivel >= n3s4i && valornivel < n4s5i){
etapa1 = 0;
etapa5 = 1;
}
else if (valornivel >= n4s5i && valornivel <= n5s){
etapa1 = 0;
etapa6 = 1;
}
else{
etapa1 = 0;
etapa7 = 1;
}
break;
default:
// Espera
break;
}
/*
* FIN ETAPA 1
*/
/*
* ETAPA 2 (Nivel 1 - N1)
*/
switch (etapa2) {
case 0:
// Espera
break;
case 1:
if (valornivel < n1i || valornivel >= n1s2i){
etapa2 = 0;
etapa8 = 1;
}
break;
default:
// Espera
break;
}
/*
* FIN ETAPA 2
*/
/*
* ETAPA 3 (Nivel 2 - N2)
*/
switch (etapa3) {
case 0:
// Espera
break;
case 1:
if (valornivel < n1s2i || valornivel >= n2s3i){
etapa3 = 0;
etapa8 = 1;
}
break;
default:
// Espera
break;
}
/*
* FIN ETAPA 3
*/
/*
* ETAPA 4 (Nivel 3 - N3)
*/
switch (etapa4) {
case 0:
// Espera
break;
case 1:
if (valornivel < n2s3i || valornivel >= n3s4i){
etapa4 = 0;
etapa8 = 1;
}
break;
default:
// Espera
break;
}
/*
* FIN ETAPA 4
*/
/*
* ETAPA 5 (Nivel 4 - N4)
*/
switch (etapa5) {
case 0:
// Espera
break;
case 1:
if (valornivel < n3s4i || valornivel >= n4s5i){
etapa5 = 0;
etapa8 = 1;
}
break;
default:
// Espera
break;
}
/*
* FIN ETAPA 5
*/
/*
* ETAPA 6 (Nivel 5 - N5)
*/
switch (etapa6) {
case 0:
// Espera
break;
case 1:
if (valornivel < n4s5i || valornivel >= n5s){
etapa6 = 0;
etapa8 = 1;
}
break;
default:
// Espera
break;
}
/*
* FIN ETAPA 6
*/
/*
* ETAPA 7 (Alarma fallo sensor analóxico)
*/
switch (etapa7) {
case 0:
// Espera
break;
case 1:
if (valornivel >= n1i && valornivel <= n5s){
etapa7 = 0;
etapa8 = 1;
}
break;
default:
// Espera
break;
}
/*
* FIN ETAPA 7
*/
/*
* ETAPA 8 (Temporización nivel analóxico)
*/
switch (etapa8) {
case 0:
// Espera
break;
case 1:
delay(500);
etapa8 = 0;
etapa1 = 1;
break;
default:
// Espera
break;
}
/*
* FIN ETAPA 8
*/
/*
* ETAPA 9 (Espera nivel de seguranza)
*/
switch (etapa9) {
case 0:
// Espera
break;
case 1:
if (V_nivels == 1){
etapa9 = 0;
etapa10 = 1;
}
break;
default:
// Espera
break;
}
/*
* FIN ETAPA 9
*/
/*
* ETAPA 10 (Temporización nivel de seguranza)
*/
switch (etapa10) {
case 0:
// Espera
break;
case 1:
delay(500);
etapa10 = 0;
etapa11 = 1;
break;
default:
// Espera
break;
}
/*
* FIN ETAPA 10
*/
/*
* ETAPA 11 (Reset nivel de seguranza)
*/
switch (etapa11) {
case 0:
// Espera
break;
case 1:
if (etapa3 == 1 && V_nivels == 0) {
etapa11 = 0;
etapa9 = 1;
}
break;
default:
// Espera
break;
}
/*
* FIN ETAPA 11
*/
/*
* ETAPA 12 (Espera fallo eléctrico)
*/
switch (etapa12) {
case 0:
// Espera
break;
case 1:
if (V_relet1 == 1 && V_relet2 == 0){
etapa12 = 0;
etapa13 = 1;
}
else if (V_relet1 == 0 && V_relet2 == 1){
etapa12 = 0;
etapa14 = 1;
}
else if (V_relet1 == 1 && V_relet2 == 1){
etapa12 = 0;
etapa15 = 1;
}
break;
default:
// Espera
break;
}
/*
* FIN ETAPA 12
*/
/*
* ETAPA 13 (Alarma fallo eléctrico motor 1)
*/
switch (etapa13) {
case 0:
// Espera
break;
case 1:
if (V_relet1 == 1 && V_relet2 == 1){
etapa13 = 0;
etapa15 = 1;
}
else if (V_relet1 == 0 && V_relet2 == 0){
delay(1000);
etapa13 = 0;
etapa12 = 1;
}
break;
default:
// Espera
break;
}
/*
* FIN ETAPA 13
*/
/*
* ETAPA 14 (Alarma fallo eléctrico motor 2)
*/
switch (etapa14) {
case 0:
// Espera
break;
case 1:
if (V_relet1 == 1 && V_relet2 == 1){
etapa14 = 0;
etapa15 = 1;
}
else if (V_relet1 == 0 && V_relet2 == 0){
delay(1000);
etapa14 = 0;
etapa12 = 1;
}
break;
default:
// Espera
break;
}
/*
* FIN ETAPA 14
*/
/*
* ETAPA 15 (Alarma fallo eléctrico ambos motores)
*/
switch (etapa15) {
case 0:
// Espera
break;
case 1:
if (V_relet1 == 0 && V_relet2 == 0){
delay(1000);
etapa15 = 0;
etapa12 = 1;
}
break;
default:
// Espera
break;
}
/*
* FIN ETAPA 15
*/
/*
* ETAPA 16 (Espera marcha)
*/
switch (etapa16) {
case 0:
// Espera
break;
case 1:
if (etapa2 == 1){
etapa16 = 0;
etapa17 = 1;
}
else if (etapa3 == 1){
etapa16 = 0;
etapa18 = 1;
}
else if (etapa4 == 1){
etapa16 = 0;
etapa20 = 1;
}
else if (etapa5 == 1 || etapa13 == 1 || etapa14 == 1 || etapa15 == 1){
etapa16 = 0;
etapa23 = 1;
}
else if (etapa6 == 1){
etapa16 = 0;
etapa24 = 1;
}
break;
default:
// Espera
break;
}
/*
* FIN ETAPA 16
*/
/*
* ETAPA 17 (Nivel baixo)
*/
switch (etapa17) {
case 0:
// Espera
break;
case 1:
if (etapa2 == 0){
etapa17 = 0;
etapa19 = 1;
}
break;
default:
// Espera
break;
}
/*
* FIN ETAPA 17
*/
/*
* ETAPA 18 (Paro)
*/
switch (etapa18) {
case 0:
// Espera
break;
case 1:
if (etapa3 == 0){
etapa18 = 0;
etapa19 = 1;
}
break;
default:
// Espera
break;
}
/*
* FIN ETAPA 18
*/
/*
* ETAPA 19 (Temporización Paro-Nivel baixo)
*/
switch (etapa19) {
case 0:
// Espera
break;
case 1:
delay(500);
etapa19 = 0;
etapa16 = 1;
break;
default:
// Espera
break;
}
/*
* FIN ETAPA 19
*/
/*
* ETAPA 20 (Determinación estado de alternancia)
*/
switch (etapa20) {
case 0:
// Espera
break;
case 1:
if (alternancia == 0){
etapa20 = 0;
etapa21 = 1;
alternancia = 1;
}
else if (alternancia == 1){
etapa20 = 0;
etapa22 = 1;
alternancia = 0;
}
break;
default:
// Espera
break;
}
/*
* FIN ETAPA 20
*/
/*
* ETAPA 21 (Alternancia 0)
*/
switch (etapa21) {
case 0:
// Espera
break;
case 1:
if (etapa4 == 0 && alternancia == 1 && etapa3 == 1){
etapa21 = 0;
etapa16 = 1;
}
if (etapa4 == 0 && alternancia == 1 && etapa5 == 1){
etapa21 = 0;
etapa16 = 1;
}
if (etapa4 == 0 && alternancia == 1 && etapa6 == 1){
etapa21 = 0;
etapa16 = 1;
}
break;
default:
// Espera
break;
}
/*
* FIN ETAPA 21
*/
/*
* ETAPA 22 (Alternancia 1)
*/
switch (etapa22) {
case 0:
// Espera
break;
case 1:
if (etapa4 == 0 && alternancia == 0 && etapa3 == 1){
etapa22 = 0;
etapa16 = 1;
}
if (etapa4 == 0 && alternancia == 0 && etapa5 == 1){
etapa22 = 0;
etapa16 = 1;
}
if (etapa4 == 0 && alternancia == 0 && etapa6 == 1){
etapa22 = 0;
etapa16 = 1;
}
break;
default:
// Espera
break;
}
/*
* FIN ETAPA 22
*/
/*
* ETAPA 23 (Simultaneidade)
*/
switch (etapa23) {
case 0:
// Espera
break;
case 1:
if (etapa5 == 0 && etapa3 == 1){
etapa23 = 0;
etapa16 = 1;
}
if (etapa5 == 0 && etapa6 == 1){
etapa23 = 0;
etapa16 = 1;
}
break;
default:
// Espera
break;
}
/*
* FIN ETAPA 23
*/
/*
* ETAPA 24 (Nivel alto)
*/
switch (etapa24) {
case 0:
// Espera
break;
case 1:
if (etapa6 == 0 && etapa3 == 1){
etapa24 = 0;
etapa16 = 1;
}
break;
default:
// Espera
break;
}
/*
* FIN ETAPA 24
*/
/*
* ETAPA 25 (Espera rearme)
*/
switch (etapa25) {
case 0:
// Espera
break;
case 1:
if (V_rearme == 1){
etapa25 = 0;
etapa0 = 1; // Etapa 0 (Inicial)
etapa1 = 0; // Etapa 1 (Espera nivel analóxico)
etapa2 = 0; // Etapa 2 (Nivel 1 - N1)
etapa3 = 0; // Etapa 3 (Nivel 2 - N2)
etapa4 = 0; // Etapa 4 (Nivel 3 - N3)
etapa5 = 0; // Etapa 5 (Nivel 4 - N4)
etapa6 = 0; // Etapa 6 (Nivel 5 - N5)
etapa7 = 0; // Etapa 7 (Alarma fallo sensor analóxico)
etapa8 = 0; // Etapa 8 (Temporización nivel analóxico)
etapa9 = 0; // Etapa 9 (Espera nivel de seguranza)
etapa10 = 0; // Etapa 10 (Temporización nivel de seguranza)
etapa11 = 0; // Etapa 11 (Reset nivel de seguranza)
etapa12 = 0; // Etapa 12 (Espera fallo eléctrico)
etapa13 = 0; // Etapa 13 (Alarma fallo eléctrico motor 1)
etapa14 = 0; // Etapa 14 (Alarma fallo eléctrico motor 2)
etapa15 = 0; // Etapa 15 (Alarma fallo eléctrico ambos motores)
etapa16 = 0; // Etapa 16 (Espera marcha motores)
etapa17 = 0; // Etapa 17 (Nivel baixo)
etapa18 = 0; // Etapa 18 (Paro)
etapa19 = 0; // Etapa 19 (Temporización Paro-Nivel baixo)
etapa20 = 0; // Etapa 20 (Determinación estado de alternancia)
etapa21 = 0; // Etapa 21 (Alternancia 0)
etapa22 = 0; // Etapa 22 (Alternancia 1)
etapa23 = 0; // Etapa 23 (Simultaneidade)
etapa24 = 0; // Etapa 24 (Nivel alto)
etapa25 = 0; // Etapa 25 (Espera rearme)
etapa26 = 0; // Etapa 26 (Espera marcha manual motor 1)
etapa27 = 0; // Etapa 27 (Marcha manual motor 1)
etapa28 = 0; // Etapa 28 (Espera marcha manual motor 2)
etapa29 = 0; // Etapa 29 (Marcha manual motor 2)
}
break;
default:
// Espera
break;
}
/*
* FIN ETAPA 25
*/
/*
* ETAPA 26 (Espera marcha manual motor 1)
*/
switch (etapa26) {
case 0:
// Espera
break;
case 1:
if (V_mmotor1 == 1){
delay(1500);
etapa26 = 0;
etapa27 = 1;
}
break;
default:
// Espera
break;
}
/*
* FIN ETAPA 26
*/
/*
* ETAPA 27 (Marcha manual motor 1)
*/
switch (etapa27) {
case 0:
// Espera
break;
case 1:
if (V_mmotor1 == 0){
etapa27 = 0;
etapa26 = 1;
}
break;
default:
// Espera
break;
}
/*
* FIN ETAPA 27
*/
/*
* ETAPA 28 (Espera marcha manual motor 2)
*/
switch (etapa28) {
case 0:
// Espera
break;
case 1:
if (V_mmotor2 == 1){
delay(1500);
etapa28 = 0;
etapa29 = 1;
}
break;
default:
// Espera
break;
}
/*
* FIN ETAPA 28
*/
/*
* ETAPA 29 (Marcha manual motor 2)
*/
switch (etapa29) {
case 0:
// Espera
break;
case 1:
if (V_mmotor2 == 0){
etapa29 = 0;
etapa28 = 1;
}
break;
default:
// Espera
break;
}
/*
* FIN ETAPA 29
*/
/* ----------------------------------------
* ACTIVAR/DESACTIVAR SAÍDAS
* ----------------------------------------*/
/*
* BOMBA 1 (S_motor1)
* Saída a relé. HIGH pecha o contacto.
*/
if (etapa11 == 1 || etapa21 == 1 || etapa23 == 1 || etapa24 == 1 || etapa27 == 1){
if (etapa13 == 0 && etapa15 == 0){
digitalWrite(S_motor1,HIGH);
}
else if (etapa13 == 1 || etapa15 == 1){
digitalWrite(S_motor1,LOW);
}
}
else if (etapa13 == 0 && etapa15 == 0 && etapa22 == 1 && etapa14 == 1){
digitalWrite(S_motor1,HIGH);
}
else if (etapa13 == 1 || etapa15 == 1){
digitalWrite(S_motor1,LOW);
}
else if (etapa16 == 1){
//Espera
}
else{
digitalWrite(S_motor1,LOW);
}
/*
* FIN BOMBA1
*/
/*
* BOMBA 2 (S_motor2)
* Saída a relé. LOW pecha o contacto.
*/
if (etapa11 == 1 || etapa22 == 1 || etapa23 == 1 || etapa24 == 1 || etapa29 == 1){
if (etapa14 == 0 && etapa15 == 0){
digitalWrite(S_motor2,HIGH);
}
else if (etapa14 == 1 || etapa15 == 1){
digitalWrite(S_motor2,LOW);
}
}
else if (etapa14 == 0 && etapa15 == 0 && etapa21 == 1 && etapa13 == 1){
digitalWrite(S_motor2,HIGH);
}
else if (etapa14 == 1 || etapa15 == 1){
digitalWrite(S_motor2,LOW);
}
else if (etapa16 == 1){
//Espera
}
else{
digitalWrite(S_motor2,LOW);
}
/*
* FIN BOMBA2
*/
/*
* ALARMA FALLO ELÉCTRICO (S_alarmafe)
* Saída a relé. HIGH pecha o contacto.
*/
if (etapa13 == 1 || etapa14 == 1 || etapa15 == 1){
digitalWrite(S_alarmafe,HIGH);
}
else{
digitalWrite(S_alarmafe,LOW);
}
/*
* FIN ALARMA FALLO ELÉCTRICO
*/
/*
* ALARMA NIVEL (S_alarmanivel)
* Saída a relé. HIGH pecha o contacto.
*/
if (etapa7 == 1 || etapa11 == 1 || etapa17 == 1 || etapa24 == 1){
digitalWrite(S_alarmanivel,HIGH);
}
else{
digitalWrite(S_alarmanivel,LOW);
}
/*
* FIN ALARMA NIVEL
*/
/* ----------------------------------------
* ACTIVAR/DESACTIVAR NOTIFICACIÓNS
* ----------------------------------------*/
//Notificación sen alarmas
lcd.setCursor(0,0);
lcd.print("CONTROL DE EFLUENTES");
if (etapa7 != 1){
lcd.setCursor(0,1);
lcd.print("Nivel: ");
lcd.setCursor(7,1);
if (valornivel < 10){
lcd.print(" ");
}
lcd.print(valornivel);
lcd.setCursor(9,1);
lcd.print(" cm ");
}
if (etapa13 != 1 && etapa14 != 1 && etapa15 != 1){
lcd.setCursor(0,2);
lcd.print(" ");
}
if (etapa11 != 1 && etapa17 != 1 && etapa24 != 1){
lcd.setCursor(0,3);
lcd.print(" ");
}
// Notificación de reinicio desde etapa 0
if (etapa0 == 1){
lcd.clear();
lcd.setCursor(0,1);
lcd.print(" Iniciando... ");
delay(1000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("CONTROL DE EFLUENTES");
}
// Notificación de fallo de sensor (etapa 7)
if (etapa7 == 1){
lcd.setCursor(0,1);
lcd.print("FALLO DE SENSOR ");
}
// Notificación de fallo eléctrico (etapas 13, 14 ou 15)
if (etapa13 == 1 || etapa14 == 1 || etapa15 == 1){
lcd.setCursor(0,0);
lcd.print("CONTROL DE EFLUENTES");
lcd.setCursor(0,1);
lcd.print("Nivel: ");
lcd.setCursor(7,1);
if (valornivel < 10){
lcd.print(" ");
}
lcd.print(valornivel);
lcd.setCursor(9,1);
lcd.print(" cm ");
lcd.setCursor(0,2);
if (etapa13 == 1){
lcd.print(" FALLO ELECTRICO F1 ");
}
else if (etapa14 == 1){
lcd.print(" FALLO ELECTRICO F2 ");
}
else if (etapa15 == 1){
lcd.print("FALLO ELECTRICO F1+2");
}
}
// Notificación de nivel de seguranza (etapa 11)
if (etapa11 == 1){
lcd.setCursor(0,0);
lcd.print("CONTROL DE EFLUENTES");
lcd.setCursor(0,1);
lcd.print("Nivel: ");
lcd.setCursor(7,1);
if (valornivel < 10){
lcd.print(" ");
}
lcd.print(valornivel);
lcd.setCursor(9,1);
lcd.print(" cm ");
lcd.setCursor(0,3);
lcd.print(" NIVEL DE SEGURANZA ");
}
// Notificación de nivel baixo (etapa 17)
if (etapa17 == 1){
lcd.setCursor(0,0);
lcd.print("CONTROL DE EFLUENTES");
lcd.setCursor(0,1);
lcd.print("Nivel: ");
lcd.setCursor(7,1);
if (valornivel < 10){
lcd.print(" ");
}
lcd.print(valornivel);
lcd.setCursor(9,1);
lcd.print(" cm ");
lcd.setCursor(0,3);
lcd.print(" NIVEL BAIXO ");
}
// Notificación de nivel alto (etapa 24)
if (etapa24 == 1 && etapa11 == 0){
lcd.setCursor(0,0);
lcd.print("CONTROL DE EFLUENTES");
lcd.setCursor(0,1);
lcd.print("Nivel: ");
lcd.setCursor(7,1);
if (valornivel < 10){
lcd.print(" ");
}
lcd.print(valornivel);
lcd.setCursor(9,1);
lcd.print(" cm ");
lcd.setCursor(0,3);
lcd.print(" NIVEL ALTO ");
}
// Notificación de marcha de bombas
if (etapa27 == 1 || etapa29 == 1){
if (etapa27 == 1 && etapa29 == 0){
lcd.setCursor(16,1);
lcd.print("M1 ");
}
else if (etapa29 == 1 && etapa27 == 0){
lcd.setCursor(16,1);
lcd.print("M 2");
}
else if (etapa27 == 1 && etapa29 == 1){
lcd.setCursor(16,1);
lcd.print("M1+2");
}
}
else if (etapa15 == 0 && etapa21 == 1 && etapa13 == 0){
lcd.setCursor(16,1);
lcd.print("A1 ");
}
else if (etapa15 == 0 && etapa22 == 1 && etapa14 == 0){
lcd.setCursor(16,1);
lcd.print("A 2");
}
else if (etapa15 == 0 && etapa11 == 1){
lcd.setCursor(16,1);
lcd.print("A1+2");
}
else if (etapa15 == 0 && etapa23 == 1){
lcd.setCursor(16,1);
lcd.print("A1+2");
}
else if (etapa15 == 0 && etapa24 == 1){
lcd.setCursor(16,1);
lcd.print("A1+2");
}
else if (etapa15 == 0 && etapa21 == 1 && etapa13 == 1){
lcd.setCursor(16,1);
lcd.print("A1+2");
}
else if (etapa15 == 0 && etapa22 == 1 && etapa14 == 1){
lcd.setCursor(16,1);
lcd.print("A1+2");
}
else if (etapa15 == 1){
lcd.setCursor(16,1);
lcd.print("OMG!");
}
else{
lcd.setCursor(16,1);
lcd.print("PARO");
}
/* ----------------------------------------
* DEPURACIÓN
* ----------------------------------------*/
/*
if (etapa0 == 1){
Serial.print("E0 ");
}
if (etapa1 == 1){
Serial.print("E1 ");
}
if (etapa2 == 1){
Serial.print("E2 ");
}
if (etapa3 == 1){
Serial.print("E3 ");
}
if (etapa4 == 1){
Serial.print("E4 ");
}
if (etapa5 == 1){
Serial.print("E5 ");
if (etapa6 == 1){
Serial.print("E6 ");
}
if (etapa7 == 1){
Serial.print("E7 ");
}
if (etapa8 == 1){
Serial.print("E8 ");
}
if (etapa9 == 1){
Serial.print("E9 ");
}
if (etapa10 == 1){
Serial.print("E10 ");
}
if (etapa11 == 1){
Serial.print("E11 ");
}
if (etapa12 == 1){
Serial.print("E12 ");
}
if (etapa13 == 1){
Serial.print("E13 ");
}
if (etapa14 == 1){
Serial.print("E14 ");
}
if (etapa15 == 1){
Serial.print("E15 ");
}
if (etapa16 == 1){
Serial.print("E16 ");
}
if (etapa17 == 1){
Serial.print("E17 ");
}
if (etapa18 == 1){
Serial.print("E18 ");
}
if (etapa19 == 1){
Serial.print("E19 ");
}
if (etapa20 == 1){
Serial.print("E20 ");
}
if (etapa21 == 1){
Serial.print("E21 ");
}
if (etapa22 == 1){
Serial.print("E22 ");
}
if (etapa23 == 1){
Serial.print("E23 ");
}
if (etapa24 == 1){
Serial.print("E24 ");
}
if (etapa25 == 1){
Serial.print("E25 ");
}
if (etapa26 == 1){
Serial.print("E26 ");
}
if (etapa27 == 1){
Serial.print("E27 ");
}
if (etapa28 == 1){
Serial.print("E28 ");
}
if (etapa29 == 1){
Serial.print("E29 ");
}
*/
}