#define DOT 0
#define DASH 1
typedef enum {
STATE_INIT,
STATE_A, STATE_B, STATE_C, STATE_D, STATE_E, STATE_F, STATE_G,
STATE_H, STATE_I, STATE_J, STATE_K, STATE_L, STATE_M, STATE_N,
STATE_O, STATE_P, STATE_Q, STATE_R, STATE_S, STATE_T, STATE_U,
STATE_V, STATE_W, STATE_X, STATE_Y, STATE_Z
} state_t;
state_t state = STATE_INIT;
const byte LED_E = 2;
const byte LED_I = 3;
const byte LED_S = 4;
const byte LED_H = 5;
const byte LED_A = 6;
const byte LED_U = 7;
const byte LED_V = 8;
const byte LED_T = 14;
const byte LED_M = 15;
const byte LED_O = 16;
byte leds [] = {LED_E, LED_I, LED_S, LED_H, LED_A, LED_U, LED_V, LED_T, LED_M, LED_O};
void setup() {
Serial.begin(115200);
for (int j=0; j < sizeof(leds); j++)
{
pinMode (leds[j], OUTPUT);
}
}
void state_machine (int event)
{
switch (state)
{
case STATE_INIT:
if (event == DOT)
{
digitalWrite (LED_E, 1);
state = STATE_E;
}
else
{
digitalWrite (LED_T, 1);
state = STATE_T;
}
break;
case STATE_E:
if (event == DOT)
{
digitalWrite (LED_I, 1);
state = STATE_I;
}
else
{
digitalWrite (LED_A, 1);
state = STATE_A;
}
break;
case STATE_I:
if (event == DOT)
{
digitalWrite (LED_S, 1);
state = STATE_S;
}
else
{
digitalWrite (LED_U, 1);
state = STATE_U;
}
break;
case STATE_S:
if (event == DOT)
{
digitalWrite (LED_H, 1);
state = STATE_H;
}
else
{
digitalWrite (LED_V, 1);
state = STATE_V;
}
break;
}
if (event == DOT)
Serial.print("DOT -->");
else
Serial.print("DASH -->");
Serial.println((char)(state +64));
}
void reset (void)
{
state = STATE_INIT;
for (int j=0; j < sizeof(leds); j++)
{
digitalWrite (leds[j], 0);
}
Serial.println("");
Serial.println("RESET");
}
void loop()
{
reset ();
state_machine (DOT);
delay (1000);
state_machine (DOT);
delay (1000);
state_machine (DOT);
delay (1000);
state_machine (DOT);
delay (1000);
reset();
delay (2000);
state_machine (DOT);
delay (1000);
state_machine (DOT);
delay (1000);
state_machine (DASH);
delay (2000);
}
E
I
S
H
T
M
O
A
U
V