From 3420a1f9da1e17f57e388f938cd7d00ab698fbe1 Mon Sep 17 00:00:00 2001 From: Marc Sunet Date: Mon, 27 Dec 2021 05:53:36 -0800 Subject: Make it work with hardware relay. --- textil.ino | 40 ++++++++++++++++++++++++++++------------ 1 file changed, 28 insertions(+), 12 deletions(-) diff --git a/textil.ino b/textil.ino index 846cb41..65c1d9e 100644 --- a/textil.ino +++ b/textil.ino @@ -20,8 +20,8 @@ const unsigned long TIEMPO_ESPERA_SALIDA_MS[MAX_RELE] = { // Pines 0 y 1 en Arduino UNO son para comunicacion serie, no usar. const int Rele_Pin[MAX_RELE] = { 2, // Rele 1. - 3, // Rele 2. - 4, // Rele 3. + 4, // Rele 2. + 3, // Rele 3. }; // Pin pulsador. @@ -56,13 +56,17 @@ const Transicion transiciones[MAX_ESTADO] = { Automatica, // -> Estado_Inicial }; +constexpr int RELE_ACTIVADO = LOW; +constexpr int RELE_DESACTIVADO = HIGH; + /* Entrada digital con debounce. */ // Tiempo en el que la senyal debe permanecer con un valor constante para // que se ejecute la lectura logica de la senyal. -const unsigned long DEBOUNCE_DELAY_MS = 50; +const unsigned long DEBOUNCE_DELAY_MS = 25; +// Entrada digital. struct EntradaDigital { int pin; // Pin de entrada. int estado; // Estado logico actual, LOW o HIGH. @@ -109,23 +113,31 @@ void actualizar_salida(Estado estado_actual) { switch (estado_actual) { case Estado_Inicial: break; + case Espera_Rele1: + digitalWrite(LED_BUILTIN, HIGH); + break; case Salida_Rele1: - digitalWrite(Rele_Pin[Rele1], HIGH); + digitalWrite(LED_BUILTIN, LOW); + digitalWrite(Rele_Pin[Rele1], RELE_ACTIVADO); break; case Espera_Rele2: - digitalWrite(Rele_Pin[Rele1], LOW); + digitalWrite(LED_BUILTIN, HIGH); + digitalWrite(Rele_Pin[Rele1], RELE_DESACTIVADO); break; case Salida_Rele2: - digitalWrite(Rele_Pin[Rele2], HIGH); + digitalWrite(LED_BUILTIN, LOW); + digitalWrite(Rele_Pin[Rele2], RELE_ACTIVADO); break; case Espera_Rele3: - digitalWrite(Rele_Pin[Rele2], LOW); + digitalWrite(LED_BUILTIN, HIGH); + digitalWrite(Rele_Pin[Rele2], RELE_DESACTIVADO); break; case Salida_Rele3: - digitalWrite(Rele_Pin[Rele3], HIGH); + digitalWrite(LED_BUILTIN, LOW); + digitalWrite(Rele_Pin[Rele3], RELE_ACTIVADO); break; case Estado_Final: - digitalWrite(Rele_Pin[Rele3], LOW); + digitalWrite(Rele_Pin[Rele3], RELE_DESACTIVADO); break; default: break; @@ -152,9 +164,11 @@ void setup() { for (int i = 0; i < MAX_RELE; ++i) { pinMode(Rele_Pin[i], OUTPUT); - digitalWrite(Rele_Pin[i], LOW); + digitalWrite(Rele_Pin[i], RELE_DESACTIVADO); } - pinMode(Pulsador_Pin, INPUT); + pinMode(LED_BUILTIN, OUTPUT); + digitalWrite(LED_BUILTIN, LOW); + pinMode(Pulsador_Pin, INPUT_PULLUP); estado_actual = Estado_Inicial; @@ -187,8 +201,10 @@ void loop() { } case Manual: { + // Para una senyal INPUT_PULLUP, se lee LOW, no HIGH, cuando se presiona + // el boton. const bool pulsador_estado_cambiado = leer_cambio_de_estado(pulsador, tiempo); - if (pulsador_estado_cambiado && pulsador.estado == HIGH) { + if (pulsador_estado_cambiado && pulsador.estado == LOW) { estado_actual = ejecutar_transicion(estado_actual, tiempo); } break; -- cgit v1.2.3