Destacados

¿Qué es una máquina de estados?

Una máquina de estados es un programa que reacciona de una forma u otra dependiendo no solo de lo que está sucediendo, sino también de su estado anterior.

Es por tanto, un programa que no solo depende de sus entradas y salidas, también tiene memoria, estados que influyen en su comportamiento. Por ejemplo, imagina que queremos crear un programa para que, si tienes hambre, comas. Si solo depende de que tengas hambre, comerás inmediatamente lo primero que encuentres. Sin embargo, si hacemos el mismo programa con una máquina de estados, el proceso será más complejo. Si tienes hambre quieres comer, pero al mediodía te has comido una pizza, y ahora debes comer algo más sano, además, todavía no ha llegado la hora de la cena. ¡Lo mejor será comer verdura!


maquina-estados-pizza

Las luces de navidad. Nuestra primera máquina de estados

Este año he tenido mucho tiempo libre, así que he decidido comprar un montón de LED para crear las luces de mi árbol navideño. Me he fijado en luces ya hechas y, normalmente, tienen tres estados: los LED apagados, los LED que parpadean al mismo tiempo y los LED que parpadean alternativamente. Voy a basarme en ese comportamiento de forma que cada vez que presione el pulsador pasaré al siguiente modo de luz.


esquema_conexiones_m_estados

En un programa con una máquina de estados hay siempre dos partes. Una es la ejecución de cada estado y la otra el cambio entre estados.

Ejecución de cada estado

Queremos que nuestras luces tengan tres modos de programación o estados: LED apagados, parpadeo simultáneo y parpadeo alternativo. Lo primero es declarar una variable global estado que nos permitirá almacenar el estado actual.

variable_estados


ejecucion_estados

Queremos que los LED se comporten de una forma u otra según el valor que tenga la variable estado. Para ello utilizaremos la función Comprobar cual es el valor de.

En el primer estado, el número 0, se apagan ambos LED. El segundo estado o estado 1 los hace parpadear al mismo tiempo, mientras que el tercer estado o estado 2 los hace parpadear alternativamente.

Carga el programa modificando el valor inicial de la variable estado. Comprobarás como el programa ejecuta un estado u otro según su valor.

Cambio entre estados

Queremos que cada vez que presionemos el pulsador pasemos al siguiente estado.

A veces, cuando presionas un pulsador tu programa puede detectar varias pulsaciones y comportarse de forma incorrecta. Es lo que se conoce como efecto rebote. Para evitarlo utilizamos un bucle Mientras con una pequeña espera dentro. De esta forma el programa no avanzará hasta que el botón deje de pulsarse.

Para cambiar de estado, cada vez que presionemos el pulsador sumaremos 1 a la variable estado. Sin embargo, si estamos en el estado 2 y presionamos de nuevo el botón pasaremos al valor 3, 4, 5, etc. Para poder volver al estado inicial debemos resetear la variable estado. Por ello utilizamos un Si…ejecutar…de lo contrario… En el caso de que el estado sea menor que 2, aumentaremos el valor del estado en 1, pasando al siguiente estado, en caso de que sea 2 o mayor, resetearemos la variable a 0. Añade estos bloques antes de tu bloque Comprobar el valor de… y carga el programa. ¡Acabas de crear tus propias luces programables!

2_incremento_programa

Aún hay más

    A continuación te proponemos un par de ideas para seguir practicando:

  • Construye un semáforo y prográmalo en Bitbloq 2 utilizando una máquina de estados y un botón para solicitar que se ponga en verde.
  • Crea tu propia jukebox cambiando de canciones mediante una máquina de estados, un zumbador y un pulsador.

Las máquinas de estados son muy utilizadas en muchos ámbitos. Desde los distintos programas de tu lavadora o el horno, a máquinas industriales, móviles y ordenadores. Cuanto más practiques más fácil será utilizarlas así que ¡no lo dudes y ponte a programar!