Hola.
La siguiente secuencia tiene 4 temporizadores con tiempos diferentes, arranca al inicio y se repite. ¿Cómo puedo hacer para que sólo se inicie con un pulsador? :
unsigned long tiempo;
int rele1=4; // asigna el pin 4 para el relé1
int rele2=5; // asigna el pin 5 para el relé2
int rele3=6; // asigna el pin 6 para el relé3
int rele4=7; // asigna el pin 7 para el relé4
void setup(){
pinMode (rele1, OUTPUT); // declara el rele1 como salida
pinMode (rele2, OUTPUT); // declara el rele2 como salida
pinMode (rele3, OUTPUT); // declara el rele3 como salida
pinMode (rele4, OUTPUT); // declara el rele4 como salida
tiempo= millis();
}
void loop(){
if(millis()-tiempo < 3000){
digitalWrite(rele1,LOW); // Activa relé 1
}else
if (millis()-tiempo > 3000){
digitalWrite(rele1,HIGH); // Desactiva relé 1 a los 3 segundos
}
if(millis()-tiempo < 4000){
digitalWrite(rele2,LOW); // Activa relé 2
}else
if (millis()-tiempo > 4000){
digitalWrite(rele2,HIGH); // Desactiva relé 2 a los 4 segundos
}
if(millis()-tiempo < 5000){
digitalWrite(rele3,LOW); // Activa relé 3
}else
if (millis()-tiempo > 5000){
digitalWrite(rele3,HIGH); // Desactiva relé 3 a los 5 segundos
}
if(millis()-tiempo < 6000){
digitalWrite(rele4,LOW); // Activa relé 4
}else
if (millis()-tiempo > 6000){
digitalWrite(rele4,HIGH); // Desactiva relé 4 a los 6 segundos
}
}
Hay un detalle a considerar menor pero importante.
Hablas de un pulsador, y tus secuencias tienen 3, 4, 5 6 seg y mas... entonces para que funcione con UN PULSADOR debes permanecer con el pulsador presionado o quieres que cada vez que pulses SE RETENGA ese disparo?
Sino hablarías de un interruptor que cambia y QUEDA en el otro estado?
Este es un punto de partida aunque requiere de dos pulsadas para resetear los reles.
unsigned long tiempo;
byte rele1 = 4; // asigna el pin 4 para el relé1
byte rele2 = 5; // asigna el pin 5 para el relé2
byte rele3 = 6; // asigna el pin 6 para el relé3
byte rele4 = 7; // asigna el pin 7 para el relé4
byte pulsador = 9; //pulsador
byte NuevoEstado = HIGH;
byte ViejoEstado = HIGH; // Recuerdo estado en 1 porque es pulsador Pull-up
bool inicio = false;
byte disparo = LOW;
void setup(){
pinMode (rele1, OUTPUT); // declara el rele1 como salida
pinMode (rele2, OUTPUT); // declara el rele2 como salida
pinMode (rele3, OUTPUT); // declara el rele3 como salida
pinMode (rele4, OUTPUT); // declara el rele4 como salida
pinMode(pulsador, INPUT); // declaro pulsador como entrada
tiempo= millis();
}
void loop(){
NuevoEstado = digitalRead(pulsador);
// cambio el estado del pulsador?
if (NuevoEstado != ViejoEstado) { // pulsador debe estar con un borne a gnd y el otro a pin 9 y una r de 10k cuyo
ViejoEstado = NuevoEstado;
delay(50); // 50 mseg para asegurar rebotes
if (NuevoEstado == LOW) { // pulsador esta cerrado cuando esta en 0
disparo = !disparo;
if (disparo)
inicio = true;
}
}
if (disparo) {
if (inicio) { // otro borne esta conectado a 5V
tiempo = millis();
inicio = false;
}
if (millis()-tiempo < 3000) {
digitalWrite(rele1,LOW); // Activa relé 1
} else
if (millis()-tiempo > 3000){
digitalWrite(rele1,HIGH); // Desactiva relé 1 a los 3 segundos
}
if (millis()-tiempo < 4000){
digitalWrite(rele2,LOW); // Activa relé 2
} else
if (millis()-tiempo > 4000){
digitalWrite(rele2,HIGH); // Desactiva relé 2 a los 4 segundos
}
if(millis()-tiempo < 5000){
digitalWrite(rele3,LOW); // Activa relé 3
} else
if (millis()-tiempo > 5000){
digitalWrite(rele3,HIGH); // Desactiva relé 3 a los 5 segundos
}
if (millis()-tiempo < 6000){
digitalWrite(rele4,LOW); // Activa relé 4
} else
if (millis()-tiempo > 6000){
digitalWrite(rele4,HIGH); // Desactiva relé 4 a los 6 segundos
}
}
}
Hola. Tienes razón. Sólo con pulsar comienza la secuencia, no hace falta mantener pulsado, y que se detenga al terminar la última temporización. Utilizo una entrada pull down.
Saludos Tino
Como te respondí en el otro post puedes hacer esto:
/* Encender varios led difentes tiempos
El primer led encendera entre 1 y 10 segundos despues de iniciado el programa
El segundo encendera a los 2 segundos y finalizara a los 5s
El tercer led encendera a los 10s y finalizara a los 21s
El cuarto encendera a los 0,5s de iniciado el Sketch y apagara a los 8s
El quinto y ultimo led iniciara a los 0,5s y se apagara a los 25 s
cuando el quito led se apague toda la rutina comienza a repetirse.
*/
unsigned long tiempo;
int leds[5]= {2,3,4,5,6};
int pin_boton= 7; // Pin para el boton
boolean activa = false; //Variable de control de encendido
void setup(){
for(int i =0; i<5;i++){ //Configura salida de leds en pines 2, 3,4,5 y 6 como salida
pinMode(leds[i],OUTPUT);
}
pinMode(pin_boton,INPUT);
tiempo= millis();
digitalWrite(pin_boton,HIGH);
}
void loop(){
if (digitalRead(pin_boton) == LOW){ //Revisa que has presioando el boton
delay(50);
if (digitalRead(pin_boton) == LOW) { // Espera 50 milisegundos para evitar antirrebotes.
while(pin_boton == LOW){} //Espera que sueltes el boton
if(activa==true){Activa = false;} //Si esta activo se apaga
if(activa==false){Activa = true;} // Sie sta apagado se activa
}
}
if(activa == true){ //Si esta activo llama a la fucion encender_leds();
encender_leds();
}
}
void encender_leds(){
if(millis()-tiempo>1000 && millis()-tiempo < 10000){
digitalWrite(leds[0],HIGH);
}else
if (millis()-tiempo > 10000){
digitalWrite(leds[0],LOW);
} //primer
if(millis()-tiempo>2000 && millis()-tiempo < 50000){
digitalWrite(leds[1],HIGH);
}else
if (millis()-tiempo > 5000){
digitalWrite(leds[1],LOW);
} //Segundo
if(millis()-tiempo>10000 && millis()-tiempo < 21000){
digitalWrite(leds[2],HIGH);
}else
if (millis()-tiempo > 21000){
digitalWrite(leds[2],LOW);
} //tercer
if(millis()-tiempo>500 && millis()-tiempo < 8000){
digitalWrite(leds[3],HIGH);
}else
if (millis()-tiempo > 8000){
digitalWrite(leds[3],LOW);
} //cuarto
if(millis()-tiempo>500 && millis()-tiempo < 25000){
digitalWrite(leds[4],HIGH);
}else
if (millis()-tiempo > 25000){
digitalWrite(leds[4],LOW);
tiempo= millis();
} //quinto
}
Hola comunidad.
Mi consulta es porque quiero usar un pulsador y usar variaciones de encendido y apagado de un rele.
En la primer secuencia tednria 4 seg encendido y 2 SEG apagado en bucle continuo. Al pulsar otra vez pasar a otra secuencia para el mismo rele de 2 seg y 4 seg y una vez mas al pulsar otra vez pasar a otra secuencia de 1 seg y 1 seg. Al volver a pulsar que vuelva a la primer secuencia.
Un sludo
@mateusardu, no has visto que el hilo no tiene movimiento desde 2014. Los hilos con mas de 120 dias no deben responderse. Hiloa cerrado. Crea un nuevo hilo.