Hola, lo que te ocurre es que usas millis() en la rutina de servicio de la interrupcion, y dentro de estas rutinas no funcionan ni los delays() ni los millis(). y creo recordar que los micros() dan errores. Debes sacar esos calculos de la rutina de servicio de interrupción.
Saludos.
Hola, pues si dices que funciona bien, con lo que tarda no tengo paciencia para probarlo a fondo, al grano:
Los trazos de programa que controlan los tiempos de RL2 son:
La forma que tienes de cambiarlos es o modificando el numero de veces que se realizan los bucles “j <200”, o el tiempo de cada vuelta "delay (10).
Saludos.
Es lo que dice el programa que debe hacer, en el setup los pones los dos en HIGH, se llama a la función “start” y en esa funcion la tercera linea lo pone en LOW.
saludos.
Vamos a ver el programa funciona asi:
RL1=HIGH, RL2=HIGH (fijados en el setup)
(1) Se produce un retardo aleatorio de ente 15 y 25 minutos por la funciónn random, (la variable t la tienes que definir como long ya que asi te lo devolvera la función random),
Cambio a RL1=LOW, RL2=HIG (asi se mantiene 2 minutos 1er for)
Se producen 60 veces el cambio, (2º for):
RL1=LOW, RL2=LOW (2 segundos 3er for).
RL1=LOW, RL2=HIGH(2 segundos 4º for).
Vuelve al punto (1) con los valores RL1=LOW, RL2=HIGH.
Todo esto si no se produce una interrupción (puesta a cero del pin2).
Si se produce una interrupcion se vuelve al punto (1) con RL1=HIGH, RL2=HIGH.
Tu programa esta mal desarrollado.
setup se usa para inicializar objetos, dispositivos y loop se usa para correr todo el programa indefinidamente.
No se hacen alteraciones como en tu caso
void loop(){
/**/
delay(10);
/**/
}
Esto es lo mismo que nada.
Otra cosa, no uses delay() aprende a trabajar con millis(). Ve a Documentación y mira los tutoriales que alli estan justamente para aprender a programar bien.
Finalmente puedes usar interrupciones para responder a un boton pero es una mala idea porque no fueron concebidas para algo tan burdo, sino para responder a otras situaciones. Justamente no esta pero… si quieres ahi esta. En lo personal considero que no es adecuado.
Puedes explicar que quieres hacer. Yo lo veo pero esta como todo dado vuelta de como debería hacerse.
Dirás: pero funciona, si claro, funciona pero este modo de programar no te va a servir en el corto plazo.
Si explica que deseas hacer lo podemos reestructurar.
Lo primero es que quieres que un rele se encienda por un tiempo aleatorio.
Luego lo mantienes por 120 segundos o sea 2 minutos a menos que presiones el pulsador. Entonces apagas los dos Reles y vuelves a comenzar o bien si no se presiona nada sigues
Esperas 60 mseg por el RL2 en ON y luego 2000 mseg apagando los dos si es que presionas el pulsador de lo contrario apagas el RL2.
y repites la seuecuencia para 2000 mseg en ambos pulsadores.
RARO lo ultimo.
Hola a todos gracias por responder y ser tan amables...
Lo explotares desde el lado lógico y no programación ya que soy nuevo en el tema..
Deseo lo siguiente..
primero un tiempo random al inicio, entonces luego se activa relay 1, transcurrido un tiempo mas, se activa relay 2, si no sucede nada luego de un tiempo en el parpadeo que ven del relay 2 se reiniciar el ciclo a cero.
El pulsador es para poder reiniciar el ciclo en luego de la activación tanto de relay 1 o 2 volviendo a estado inicial.
Ese seria el basico programa; pero quizás el código un poco abrupto de hecho