Destacados

O que é uma máquina de estados?

Uma máquina de estados é um programa que reage de uma forma ou de outra dependiendo no solo de lo que está sucediendo, sino también de su estado anterior.

É portanto, um programa que não apenas depende das suas entradas e saídas, como também tem memória, estados que influenciam o seu comportamento. Por exemplo, imagina que queremos criar um programa para que, se tiveres fome, comas. Se apenas depender de que tenhas fome, comerás imediatamente a primeira coisa que encontres. No entanto, se criarmos o mesmo programa com uma máquina de estados, o processo será mais complexo. Se tiveres fome… queres comer, mas a meio do dia comeste uma pizza, e por isso agora deves comer algo mais saudável… e além disso, ainda não chegou a hora do jantar. O melhor será comeres uma salada!
maquina-estados-pizza

As luzes de Natal. A nossa primeira máquina de estados.

Este ano tive muito tempo livre, e por isso, decidi comprar um montão de LED para criar as luzes da minha árvore de Natal. Reparei que as luzes já feitas, normalmente têm três estados: os LED apagados, os LED que piscam ao mesmo tempo e os LED que piscam alternadamente. Vou basear-me nesse comportamento, de forma a que cada vez que pressionar o botão… passarei ao modo de luz seguinte.
esquema_conexiones_m_estados

Num programa com uma máquina de estados, existem sempre duas partes: uma é a execução de cada estado e a outra é a mudança entre estados.

Execução de cada estado

Queremos que as nossas luzes tenham três modos de programação, ou estados: LED apagados, piscar simultâneo e piscar alternado. A primeira coisa a fazer é declarar uma variável global estado, que nos permitirá armazenar o estado actual.


Queremos que os LED se comportem de uma forma ou de outra, conforme o valor que tenha a variável estado. Para isso, utilizaremos a função Verificar qual o valor de. No primeiro estado, ou número 0, apagam-se ambos os LED. No segundo estado, ou estado 1, faz os LED piscar em simultâneo, enquanto que no terceiro estado, ou estado 2, faz os LED piscar alternadamente.Carrega o programa, modificando o valor inicial da variável estado. Verás como o programa executa um estado ou outro, conforme o seu valor.

Alternar entre estados

Queremos que cada vez que pressionemos o botão passemos ao seguinte estado. Às vezes, quando pressionas um botão, o teu programa pode detectar várias pulsações nesse botão, e comportar-se de forma incorrecta. É o que se conhece como efeito de ressalto. Para evitá-lo, utilizamos um ciclo Enquanto com uma pequena espera dentro. Desta forma, o programa não avançará até que o botão deixe de ser pressionado.Para alterar de estado, cada vez que pressionarmos o botão vamos somar 1 à variável estado. No entanto, se estivermos no estado 2 e pressionarmos novamente o botão, passaremos ao valor 3, 4, 5, etc. Para poder voltar ao estado inicial, devemos colocar a variável estado a zeros. Para isso, utilizamos um Se…executar…senão… No caso do estado ser menor que 2, aumentaremos o valor do estado em 1, passando ao estado seguinte. Em caso de ser 2 ou mais,  colocamos a variável a zeros. Adiciona estes blocos antes do teu bloco Verificar o valor de… e carrega o programa. Acabas de criar as tuas próprias luzes programáveis!

Ainda há mais…

    A seguir, propomos-te um par de ideias para continuares a praticar:

  • Constrói um semáforo e programa-o no bitbloq 2, utilizando uma máquina de estados e um botão para pedir que ele mude para verde.
  • Cria a tua própria jukebox, alternando as canções através de uma máquina de estados, um besouro e um botão.

As máquinas de estados são muito utilizadas, em muitos contextos: desde os diferentes programas da tua máquina de lavar, ou no teu forno… até máquinas industriais, telemóveis e computadores. Quanto mais praticares, mais fácil será utilizá-las. E sendo assim, não hesites e põe-te a programar!