А вот так будет выглядеть классический блинк в автоматном стиле:
Код:
// ============================== описание КА "blink" =================================== //
// Собственно содержимое Arhat.lib::TSC_Blink/TSC_Blink.ino
/*
* Светодиод - как конечный автомат имеет состояния:
* LED_OFF (выключен, ожидание включения)
* LED_ON (включен, ожидание выключения)
*
* Событием, изменяющим состояние является счечик времении.
*/
#define _ARHAT_ 1
#include "arhat.h"
#define pinLed 13 // ножка платы со встроенным светодиодом
#define WAIT_ON 1000 // длительность состояния "ожидание выключения" мсек.
#define WAIT_OFF 1000 // длительность состояния "ожидание включения" мсек.
// Таблица переходов нашего конечного автомата (нумерация с 0!):
TSC_Step ledTable[2] = {
{ 1, to_on, WAIT_ON} // "выключен": включить, перейти к состоянию "включен" с задержкой
,{ 0, to_off, WAIT_OFF} // "включен": всё наоборот, выключаем, переходим к пред. состоянию.
};
// Методы, исполняемые при изменении состояния КА:
void to_on() { digitalWrite(pinLed, HIGH); } // .. включаем светодиод
void to_off(){ digitalWrite(pinLed, LOW); } // .. выключаем светодиод
TSC_Control ledControl; // тут будем хранить текущие данные этого КА
// используем это для начальной настройки конечного автомата (далее КА)
void setup()
{
pinMode(pinLed, OUTPUT); // ножку светодиода настраиваем как "это выход"
tsc_init(&ledControl, ledTable, 0, WAIT_OFF); // добавляем КА и задаем его начальное состояние
}
// просто вызываем выполнение текущего шага КА, если получится.
void loop()
{
tsc_step( &ledControl );
}
... Фактически всё "программирование" свелось к созданию таблицы состояний и переходов.