diff options
-rw-r--r-- | textil.ino | 40 |
1 files changed, 28 insertions, 12 deletions
@@ -20,8 +20,8 @@ const unsigned long TIEMPO_ESPERA_SALIDA_MS[MAX_RELE] = { | |||
20 | // Pines 0 y 1 en Arduino UNO son para comunicacion serie, no usar. | 20 | // Pines 0 y 1 en Arduino UNO son para comunicacion serie, no usar. |
21 | const int Rele_Pin[MAX_RELE] = { | 21 | const int Rele_Pin[MAX_RELE] = { |
22 | 2, // Rele 1. | 22 | 2, // Rele 1. |
23 | 3, // Rele 2. | 23 | 4, // Rele 2. |
24 | 4, // Rele 3. | 24 | 3, // Rele 3. |
25 | }; | 25 | }; |
26 | 26 | ||
27 | // Pin pulsador. | 27 | // Pin pulsador. |
@@ -56,13 +56,17 @@ const Transicion transiciones[MAX_ESTADO] = { | |||
56 | Automatica, // -> Estado_Inicial | 56 | Automatica, // -> Estado_Inicial |
57 | }; | 57 | }; |
58 | 58 | ||
59 | constexpr int RELE_ACTIVADO = LOW; | ||
60 | constexpr int RELE_DESACTIVADO = HIGH; | ||
61 | |||
59 | 62 | ||
60 | /* Entrada digital con debounce. */ | 63 | /* Entrada digital con debounce. */ |
61 | 64 | ||
62 | // Tiempo en el que la senyal debe permanecer con un valor constante para | 65 | // Tiempo en el que la senyal debe permanecer con un valor constante para |
63 | // que se ejecute la lectura logica de la senyal. | 66 | // que se ejecute la lectura logica de la senyal. |
64 | const unsigned long DEBOUNCE_DELAY_MS = 50; | 67 | const unsigned long DEBOUNCE_DELAY_MS = 25; |
65 | 68 | ||
69 | // Entrada digital. | ||
66 | struct EntradaDigital { | 70 | struct EntradaDigital { |
67 | int pin; // Pin de entrada. | 71 | int pin; // Pin de entrada. |
68 | int estado; // Estado logico actual, LOW o HIGH. | 72 | int estado; // Estado logico actual, LOW o HIGH. |
@@ -109,23 +113,31 @@ void actualizar_salida(Estado estado_actual) { | |||
109 | switch (estado_actual) { | 113 | switch (estado_actual) { |
110 | case Estado_Inicial: | 114 | case Estado_Inicial: |
111 | break; | 115 | break; |
116 | case Espera_Rele1: | ||
117 | digitalWrite(LED_BUILTIN, HIGH); | ||
118 | break; | ||
112 | case Salida_Rele1: | 119 | case Salida_Rele1: |
113 | digitalWrite(Rele_Pin[Rele1], HIGH); | 120 | digitalWrite(LED_BUILTIN, LOW); |
121 | digitalWrite(Rele_Pin[Rele1], RELE_ACTIVADO); | ||
114 | break; | 122 | break; |
115 | case Espera_Rele2: | 123 | case Espera_Rele2: |
116 | digitalWrite(Rele_Pin[Rele1], LOW); | 124 | digitalWrite(LED_BUILTIN, HIGH); |
125 | digitalWrite(Rele_Pin[Rele1], RELE_DESACTIVADO); | ||
117 | break; | 126 | break; |
118 | case Salida_Rele2: | 127 | case Salida_Rele2: |
119 | digitalWrite(Rele_Pin[Rele2], HIGH); | 128 | digitalWrite(LED_BUILTIN, LOW); |
129 | digitalWrite(Rele_Pin[Rele2], RELE_ACTIVADO); | ||
120 | break; | 130 | break; |
121 | case Espera_Rele3: | 131 | case Espera_Rele3: |
122 | digitalWrite(Rele_Pin[Rele2], LOW); | 132 | digitalWrite(LED_BUILTIN, HIGH); |
133 | digitalWrite(Rele_Pin[Rele2], RELE_DESACTIVADO); | ||
123 | break; | 134 | break; |
124 | case Salida_Rele3: | 135 | case Salida_Rele3: |
125 | digitalWrite(Rele_Pin[Rele3], HIGH); | 136 | digitalWrite(LED_BUILTIN, LOW); |
137 | digitalWrite(Rele_Pin[Rele3], RELE_ACTIVADO); | ||
126 | break; | 138 | break; |
127 | case Estado_Final: | 139 | case Estado_Final: |
128 | digitalWrite(Rele_Pin[Rele3], LOW); | 140 | digitalWrite(Rele_Pin[Rele3], RELE_DESACTIVADO); |
129 | break; | 141 | break; |
130 | default: | 142 | default: |
131 | break; | 143 | break; |
@@ -152,9 +164,11 @@ void setup() { | |||
152 | 164 | ||
153 | for (int i = 0; i < MAX_RELE; ++i) { | 165 | for (int i = 0; i < MAX_RELE; ++i) { |
154 | pinMode(Rele_Pin[i], OUTPUT); | 166 | pinMode(Rele_Pin[i], OUTPUT); |
155 | digitalWrite(Rele_Pin[i], LOW); | 167 | digitalWrite(Rele_Pin[i], RELE_DESACTIVADO); |
156 | } | 168 | } |
157 | pinMode(Pulsador_Pin, INPUT); | 169 | pinMode(LED_BUILTIN, OUTPUT); |
170 | digitalWrite(LED_BUILTIN, LOW); | ||
171 | pinMode(Pulsador_Pin, INPUT_PULLUP); | ||
158 | 172 | ||
159 | estado_actual = Estado_Inicial; | 173 | estado_actual = Estado_Inicial; |
160 | 174 | ||
@@ -187,8 +201,10 @@ void loop() { | |||
187 | } | 201 | } |
188 | 202 | ||
189 | case Manual: { | 203 | case Manual: { |
204 | // Para una senyal INPUT_PULLUP, se lee LOW, no HIGH, cuando se presiona | ||
205 | // el boton. | ||
190 | const bool pulsador_estado_cambiado = leer_cambio_de_estado(pulsador, tiempo); | 206 | const bool pulsador_estado_cambiado = leer_cambio_de_estado(pulsador, tiempo); |
191 | if (pulsador_estado_cambiado && pulsador.estado == HIGH) { | 207 | if (pulsador_estado_cambiado && pulsador.estado == LOW) { |
192 | estado_actual = ejecutar_transicion(estado_actual, tiempo); | 208 | estado_actual = ejecutar_transicion(estado_actual, tiempo); |
193 | } | 209 | } |
194 | break; | 210 | break; |