Você está na página 1de 11

MÁQUINA DE ESTADOS

FINITOS
Codificação em Arduino (switch/case)
Agenda

¨ Técnica de codificação a partir de


uma Máquina de Estados Finitos
(Mealy) usando switch/case
Especificação do problema

4-9-1 destrava a fechadura


Switch/Case
key = myKeypad.getKey();
switch (state) {
case start:
if ((key != NO_KEY) && (key == '4')) {
Serial.println ("state=start");
Serial.println (key);
Serial.println ("next state=Pressed4");
state = Pressed4;
}
else {
digitalWrite (ledPin, LOW);
state = start;
Serial.println("lock");
}
break;
Switch/Case
case Pressed4:
if (key != NO_KEY) {
Serial.println ("state=Pressed4");
Serial.println (key);
if (key == '9') {
Serial.println ("next state=Pressed9");
state = Pressed9;
}
else {
digitalWrite (ledPin, LOW);
state = start;
Serial.println("lock");
}
}
break;
Switch/Case
case Pressed9:
if (key != NO_KEY) {
Serial.println ("state=Presseded9");
Serial.println (key);
if (key == '1') {
Serial.println ("next state=Pressed1");
state = Pressed1;
}
else {
digitalWrite (ledPin, LOW);
state = start;
Serial.println("lock");
}
}
break;
Switch/Case
case Pressed1:
Serial.println ("state=Pressed1");
digitalWrite (ledPin, HIGH);
state = Pass;
Serial.println ("next state=Pass");
Serial.println("unlock");
break;
Switch/Case
case Pass:
if ((key != NO_KEY) && (key == '*')) {
Serial.println ("state=Pass");
Serial.println (key);
Serial.println ("next state=start");
state = start;
Serial.println("lock");
digitalWrite (ledPin, LOW);
}
break;
Circuito + código

https://www.tinkercad.com/
things/dGrGvUqEZ37
Referências
¨ Wagner, F (2006). Modeling Software with Finite
State Machines: A Practical Approach. Auerbach
Publications, 2006, ISBN 0-8493-8086-3
¨ John Hopcroft e Jeffrey Ullman (2006).
Introduction to Automata Theory, Languages, and
Computation. Pearson. 3 edition. ISBN: 978-
0321455369
¨ https://www.embedded.com/using-finite-state-
machines-to-design-software/
¨ https://www.embarcados.com.br/maquina-de-
estado/
Fim

Você também pode gostar