mr. Blackfin
void relay( void )
{
uint8_t
stateRelay = RLY_OFF;
static uint32_t
timeRelay;
uint32_t
timeNow = millis();
switch( stateRelay )
{
case RLY_IDLE:
//waiting for flag to indicate relay sequence
if( bRelay == true )
{
timeRelay = timeNow;
stateRelay = RLY_ON;
I also tried your last suggestion, but there was a compilation error in this part. I fixed it as follows, but there is no movement in the relay.
//==============================================================================
void relay( void )
{
uint8_t
stateRelay = RLY_IDLE;
static uint32_t
timeRelay;
uint32_t
timeNow = millis();
switch( stateRelay )
{
case RLY_IDLE:
//waiting for flag to indicate relay sequence
if( bRelay == true )
{
bRelay = false;
timeRelay = timeNow;
stateRelay = RLY_IDLE;
}//if
break;
case RLY_DELAY:
//delay before turning the relay on
if( millis() - timeRelay >= K_RELAY_DELAY_TIME )
{
digitalWrite( relay2, LOW ); //relay on
timeRelay = timeNow;
stateRelay = RLY_HOLD;
}//if
break;
case RLY_HOLD:
//relay on-timing
if( millis() - timeRelay >= K_RELAY_HOLD_TIME )
{
digitalWrite( relay2, HIGH );
stateRelay = RLY_IDLE;
}//if
break;
}//switch
}//relay