Si hay algo bueno de impartir cursos es la posibilidad de aprender con todo lo que hacen los alumnos. Hoy en el curso Avanzado de Arduino hemos estado viendo como optimizar y refactorizar código arduino.
Vamos a ver el ejemplo que no es otro que el código que permite hacer que un led se encienda o apague al plusar un pulsador. La parte que nos interesa es esta, donde se hace el enclavamiento, usando una variable Estado_Led que guarda el valor de este.
if (Estado_Led==0) // Y el Led esta apagado... { digitalWrite(Pin_Led,HIGH); //Encendemos el Led Estado_Led=1; //Ponemos un 1 a la variable del Led conforme está encendido delay(tiempo); //Tiempo prudencial para evitar falsos contactos o lectoras del pulsador } else // Y el Led esta encendido... { digitalWrite(Pin_Led,LOW); //Apagamos el Led Estado_Led=0; //Ponemos un 0 a la variable Led conforme esta apagado delay(tiempo); //Tiempo prudencial para evitar falsos contactos o lectoras del pulsador }
Tanto en el código del if como en el del else hacemos lo mismo. Voy a cambiarlo lévemente (o por LOW y 1 por HIGH
if (Estado_Led==LOW) // Y el Led esta apagado... { Estado_Led=HIGH; //Ponemos un 1 a la variable del Led conforme está encendido digitalWrite(Pin_Led,HIGH); //Encendemos el Led } else // Y el Led esta encendido... { Estado_Led=LOW; //Ponemos un 0 a la variable Led conforme esta apagado digitalWrite(Pin_Led,LOW); //Apagamos el Led } // Se hace delay en los 2 casos y lo sacamos fuera delay(tiempo); //Tiempo prudencial para evitar falsos contactos o lectoras del pulsador
Si ahora nos fijamos loo que estamos haciendo es un digitalWrite del nuevo valor de Estado_Led, con lo que podemos sacar el digital write porque también es común.
Quedaría así:
if (Estado_Led==LOW) // Y el Led esta apagado... { Estado_Led=HIGH; } else // Y el Led esta encendido... { Estado_Led=LOW; } digitalWrite(Pin_Led,Estado_Led); //Apagamos el Led delay(tiempo); //Tiempo prudencial para evitar falsos contactos o lectoras del pulsador
Todavía se puede reducir más pues aplicando las léyes de la lógica booleana lo que estamos haciendo es invertir el valor de Estado_Led y eso se hace con el operador !
Lo dejamos así
Estado_Led=!Estado_Led; digitalWrite(Pin_Led,Estado_Led); //Apagamos el Led delay(tiempo); //Tiempo prudencial para evitar falsos contactos o lectoras del pulsador
JAVACASM