Tarefa 10 - Aula 11
- Ulisses Silva
- 23 de set. de 2018
- 2 min de leitura
Discutir e implementar a simulação interativa de um equipamento, à sua escolha, empregando uma MEF (Máquina de Estados Finitos) com três ou mais estados.

A máquina de Estados Finitos que escolhi foi um ventilador de teto com lâmpada. Ele possui um botão que apaga e acende a lâmpada nele acoplada, independentemente de ele estar girando ou não, e também outro botão de intensidade que pode ser girado no sentido horário e no sentido anti-horário. O botão de intensidade faz com que ele saia do estado "parado" para o estado "girando", tendo 3 possíveis intensidades de giro. Para ir de um estado para outro, é necessário primeiro passar pelo estado anterior. O ventilador não pode ir do estado parado, para o seu estado de giro com intensidade máxima por exemplo. Como o botão da lâmpada é à parte, cada estado do ventilador acompanha a possibilidade da lâmpada estar acesa ou não.
Abaixo segue um fluxograma que demonstra as trocas de estado desse ventilador, note que é impossível ele pular estados.

Para simular o comportamento da máquina escolhida, criei um programa no Processing que permite ao usuário alternar a intensidade de giro ao pressionar as teclas das setas Esquerda e Direita do teclado. E com as setas para Cima e para Baixo ele pode ligar ou desligar a lâmpada do ventilador.

Criei um procedimento MEF, onde ele checa se a variável booleana da luz está verdadeira ou falsa para controlar se o ventilador está aceso ou não. Ainda dentro desse procedimento, coloquei condicionais para variar a velocidade de giro dependendo do estado em que o ventilador se encontra. Com o auxílio do procedimento "keyPressed", criei as condições que permitem as trocas de estados sequencialmente.
Por último criei um procedimento chamado "ventilador", que desenha o ventilador e o rotaciona à cada quadro baseado num ângulo que varia de acordo com a velocidade do estado em que o mesmo se encontra.
Abaixo segue um exemplo do funcionamento do programa.

Link do código em texto: Baixar o texto do código!
Link da pasta do código em Processing: Baixar a pasta do código!
Commenti