void setup()
{
Serial.begin( 115200 );
Serial.println( "LED Thing is ready" );
pinMode( LED_BUILTIN, OUTPUT );
digitalWrite( LED_BUILTIN, LOW );
}
void loop()
{
static uint8_t repeats = 0;
static uint32_t timeOn = 0;
static uint32_t timeOff = 0;
static uint32_t start = 0;
static uint32_t timer = 0;
static bool run = false;
static bool abort = false;
static bool ledState = false;
if ( Serial.available() )
{
String data = Serial.readString();
switch ( data.charAt(0) )
{
case 'A' :
{
repeats = data.substring(1, 3).toInt();
timeOn = data.substring(3, 4).toInt() * 1000UL;
timeOff = data.substring(4, 5).toInt() * 1000UL;
run = true;
abort = false;
start = 0;
timer = 0;
ledState = false;
Serial.print( "Program started : " );
Serial.print( "repeats = ");
Serial.print( repeats );
Serial.print( ", timeOn = ");
Serial.print( timeOn );
Serial.print( ", timeOff = ");
Serial.println( timeOff );
break;
}
case 's' :
{
if ( run == true )
{
abort = true;
Serial.println( "Aborting..." );
}
else
{
Serial.println( "Program not running" );
}
break;
}
default :
{
Serial.println( "Unknown command" );
break;
}
}
}
if ( run == true && millis() - start >= timer )
{
start = millis();
ledState = !ledState;
timer = ledState ? timeOn : timeOff;
digitalWrite( LED_BUILTIN, ledState ? HIGH : LOW );
if ( ledState == false && ( --repeats == 0 || abort == true ) )
{
run = false;
Serial.println( "Program finished" );
}
}
}