Entonces pasemos a la lección 2, como usar una variable para controla el estado de un relé.
Primero si usas una variable para prender/apagar es lo mismo que 1/0 o true/false.
Esa variable se llama boolean o simplemente bool
definamos una variable bool de nombre estado asi
bool estado;
Definamos tambien variables para ver el estado de los pulsadores
bool boton1, boton1Ant;
bool boton2, boton2Ant;
bool boton3, boton3Ant;
bool boton4, boton4Ant;
defino una variable botonX y otra botonXAnt porque quiero guardar el estado que tenia al boton antes de ser pulsado para compararlo.
imagina que nadie pulsó.. entonces boton1Ant = false o 0 (CERO)
si ahora alguien pulsa boton1 toma el valor de 1 o true
o sea hubo un cambio de 0 a 1
ese cambio de 0 a 1 será mi comando de accionamiento para que otra variable llamado estado cambie de valor, de modo que cada vez que uno presione el pulsador estado valga alternativamente 0/1/0/1/0/1 o sea bascula pero con cada presión del boton. Espero lo entiendas porque cuando pase al código lucirá mas complicado o no.
Hagamos un programita para comandar 4 RELES usando 4 botones de este modo.
Tendre que asignar pines a esos botones y a los reles
los botones estarán en 2,3,4,5 y los relés en 8,9,10,11 pero elige lo que gustes
No te voy a complicar pero podriamos usar arrays para comodidad pero no lo haré.
const byte btn1 = 2;
const byte btn1 = 3;
const byte btn1 = 4;
const byte btn1 = 5;
const byte rele1 = 8;
const byte rele1 = 9;
const byte rele1 = 10;
const byte rele1 = 11;
bool boton1, boton1Ant, estado1;
bool boton2, boton2Ant, estado2;
bool boton3, boton3Ant, estado3;
bool boton4, boton4Ant, estado4;
void setup(){
pinMode(boton1, INPUT_PULLUP);
pinMode(boton2, INPUT_PULLUP);
pinMode(boton3, INPUT_PULLUP);
pinMode(boton4, INPUT_PULLUP);
pinMode(rele1, OUTPUT);
pinMode(rele2, OUTPUT);
pinMode(rele3, OUTPUT);
pinMode(rele4, OUTPUT);
}
void loop() {
boton1 = digitalRead(btn1);
boton2 = digitalRead(btn2);
boton3 = digitalRead(btn3);
boton4 = digitalRead(btn4);
if (boton1 && !boton1Ant) {
estado1 = !estado1; // ! invierte el valor de estado
}
boton1Ant = boton1;
if (boton2 && !boton2Ant) {
estado2 = !estado2; // ! invierte el valor de estado
}
boton2Ant = boton2;
if (boton3 && !boton3Ant) {
estado3 = !estado3; // ! invierte el valor de estado
}
boton3Ant = boton3;
if (boton4 && !boton4Ant) {
estado4 = !estado4; // ! invierte el valor de estado
}
boton4Ant = boton4;
if (estado1)
digtalWrite(rele1, HIGH); // enciendo el rele1
else
digtalWrite(rele1, LOW); // apago el rele1
if (estado2)
digtalWrite(rele2, HIGH); // enciendo el rele1
else
digtalWrite(rele2, LOW); // apago el rele1
if (estado3)
digtalWrite(rele3, HIGH); // enciendo el rele1
else
digtalWrite(rele3, LOW); // apago el rele1
if (estado4)
digtalWrite(rele4, HIGH); // enciendo el rele1
else
digtalWrite(rele4, LOW); // apago el rele1
}
Conecta los botones entre GND y el pin directamente.
Ahora que me acuerdo puede que funcione al revés porque los relés trabajan invertidos. No se porque lo hicieron asi.
Asi que donde diga HIGH pon LOW y vice verza