Para bucle arduino
En primer lugar, como una mejor práctica, utilizamos algunas definiciones para mantener el número de pin para el LED y el botón pulsador. De esta manera, si has utilizado pines diferentes a los míos, sólo tienes que modificar esas 2 líneas. Además, en el futuro si quieres cambiar el LED del pin 8 al pin 11 por ejemplo, puedes modificar esta línea sin tocar nada más en el código.
En la función de bucle, empezamos leyendo el estado del botón con la función digitalRead(). Como tenemos una resistencia pull down en el botón, sabemos que el estado no pulsado nos dará el valor LOW.
(Nota: si estuvieras usando una resistencia pull up, o ninguna resistencia en absoluto – con la opción INPUT_PULLUP para pinMode – esto sería lo contrario. HIGH cuando el botón no está pulsado, y LOW cuando está pulsado).
Con la condición, sólo entramos en el siguiente bloque de código si el estado actual y el último son diferentes. Si los 2 estados son iguales, entonces no entramos en el if y la función de bucle está terminada para este giro.
Aquí conmutamos el estado del LED. No soy un gran fan de los one-liners pero este es realmente útil cuando solo necesitas conmutar un estado. Esto te ahorrará 3-4 líneas de código para algo realmente trivial.
Código led Arduino
para que se encienda durante 0,5 segundos y se apague, permanecerá apagado hasta que llegue el siguiente tiempo de ciclo, LED-2 para que se encienda durante 1 segundo y se apague, permanecerá apagado hasta que llegue el siguiente tiempo de ciclo, LED-3 para que se encienda durante 1,2 segundos y se apague, permanecerá apagado hasta que llegue el siguiente tiempo de ciclo.
Para empezar, conecta sólo tus 4 LEDs pero no el teclado ni el LCD. Escribe un simple sketch para encender y apagar tus LEDs como describes en tu ejemplo. Yo recomendaría evitar el uso de la función delay(), porque probablemente causará problemas más tarde cuando agregue su teclado y LCD. En lugar de delay(), utilice millis() para la temporización. También recomendaría el uso de matrices para mantener los números de pin de los LEDs, y los tiempos de encendido de los LEDs.
He estado intentando usar millis() pero me encuentro con un problema – La primera vez todos los LEd’s arrancan simultáneamente y mantienen sus tiempos de encendido pero luego siguen sumando sus propios tiempos resultando en su propia secuencia.
Así que escribes el código de esta manera. Tienes un ciclo de espera que enciende todos los LEDs y reinicia todos los contadores de tiempo de espera de los LEDs. Entonces cada LED espera su tiempo de ciclo y se apaga cuando ese tiempo expira.
Ejemplos de Arduino
B) ¿Quizás no sea un problema de código/programa? Podría deberse al diseño del circuito eléctrico (porque he visto vídeos en YouTube en los que se puede hacer que los LED parpadeen utilizando condensadores y transistores. Pero, ¿cómo se produce la secuencia de las etapas 1 a 3 en una luz LED de bicicleta? (https://www.youtube.com/watch?v=cXCExzIBNsA)
Entonces, para la «etapa 2», la reescribes como una función que no se bloquea en su mayor parte y permanece inactiva durante 3,5 segundos, sino que devuelve inmediatamente el control al bucle() para que puedas comprobar si hay más pulsaciones de botón rápidamente:
Bucle while arduino
Lo he calculado con excel y luego he copiado el array en el código. Pero para ser más flexible quiero codificar la secuencia de cada led vs tiempo individualmente en el sketch. La transformación de esta entrada a la información que requiere el shift registers la tiene que hacer el propio sketch.
En loop() recorre la lista buscando si currentTime – tiempo de la última transición es > el intervalo actual. Si es así, añade el intervalo actual al tiempo de la última transición, activa el bit para el LED actual, añade 1 al índice del intervalo, y si es >= la longitud del array, vuelve a poner el índice a 0 y asegúrate de que el LED está encendido.
Suena estúpido, pero el crosspost no fue a propósito. No podía encontrar mi mensaje en el foro y utilizando el enlace «Temas actualizados» me dio un mensaje de error. Por lo tanto, pensé que no he publicado el tema, pero acaba de hacer clic en vista previa.