aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc Sunet <msunet@shellblade.net>2021-12-27 05:53:36 -0800
committerMarc Sunet <msunet@shellblade.net>2021-12-27 05:53:36 -0800
commit3420a1f9da1e17f57e388f938cd7d00ab698fbe1 (patch)
treeacf4063d212f8f01b5d071884e5e06fb84a43b17
parent79531f5698f1c10e83edd36e6be12b671b443442 (diff)
Make it work with hardware relay.
-rw-r--r--textil.ino40
1 files 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] = {
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.
21const int Rele_Pin[MAX_RELE] = { 21const 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
59constexpr int RELE_ACTIVADO = LOW;
60constexpr 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.
64const unsigned long DEBOUNCE_DELAY_MS = 50; 67const unsigned long DEBOUNCE_DELAY_MS = 25;
65 68
69// Entrada digital.
66struct EntradaDigital { 70struct 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;