Configuración SprinterSi 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

Refactorizando código Arduino
Etiquetado en: