Arduino and Railway Modelling

I understand what you are saying but my coding knowledge is limited and these millis functions take some grasping for me.

I have had a go at incorporating what I believe is a standard millis 'blibk' sketch into my sketch without success.

I cannot pretend I understand the logic of it but I have tried to stick to what seems logical.

Suffice to say don't appear to be getting past go.

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//DCC Function Decoder
//JHB
//Attiny 85 Development Board
//Four Functions
//Type of Function in separate routine
//Note - PWM/analogWrite only available on Pins 0 (F0),1 (F1) and 4 (F3)
//Do no forget to make sure binary code consistant with output pin!!!!!
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// IMPORTANT: GOTO lines 15 - 19 to configure some data!
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

int decoderAddress = 77; // This is the decoder address, change into the number you want.
#define F0_pin 0 // Define the output pin for every Function number in use
#define F1_pin 1 // Available pin numbers: 0,1,3,4,(5 is normally reset)
#define F2_pin 3 // Pins 0, 1 and 4 are PWM and can be used for analogWrite
#define F3_pin 4

#include <DCC_Decoder.h>
#define kDCC_INTERRUPT 0

byte Func[4]; //0=L4321, 1=8765, 2=CBA9, 3=F20-F13, 4=F28-F21
byte instrByte1;
int Address;
byte forw_rev=1; //0=reverse, 1=forward

boolean RawPacket_Handler(byte pktByteCount, byte* dccPacket) {
  Address=0;
  if (!bitRead(dccPacket[0],7)) { //bit7=0 -> Loc Decoder Short Address
    Address = dccPacket[0];
    instrByte1 = dccPacket[1];
  }
  else if (bitRead(dccPacket[0],6)) { //bit7=1 AND bit6=1 -> Loc Decoder Long Address
    Address = 256 * (dccPacket[0] & B00000111) + dccPacket[1];
    instrByte1 = dccPacket[2];
  }

  if (Address==decoderAddress) {
    byte instructionType = instrByte1>>5;
    switch (instructionType) {
      case 2: // Reverse speed
        forw_rev=0;
        break;
      case 3: // Forward speed
        forw_rev=1;
        break;
      case 4: // Loc Function L-4-3-2-1
        Func[0]=instrByte1&B00011111;
        break;
      case 5: // Loc Function 8-7-6-5
        if (bitRead(instrByte1,4)) {
          Func[1]=instrByte1&B00001111;
        }
        else { // Loc Function 12-11-10-9
          Func[2]=instrByte1&B00001111;
        }
        break;
    }
    //if (Func[0]&B00010000) digitalWrite(F0_pin,HIGH); else digitalWrite(F0_pin,LOW);
    //if (Func[0]&B00000001) digitalWrite(F1_pin,HIGH); else digitalWrite(F1_pin,LOW);
    //if (Func[0]&B00000010) digitalWrite(F2_pin,HIGH); else digitalWrite(F2_pin,LOW);
    if (Func[0]&B00000100) analogWrite(F3_pin, 100); else analogWrite(F3_pin, 0);
  }
}

void fadeF0() {
  static unsigned long lastFadeTimeF0 = 0;
  static int fadeLevelF0 = 0;

  if (millis() - lastFadeTimeF0 > 10) {
   
    lastFadeTimeF0 = millis();
   
    if (Func[0]&B00010000) {
      if (fadeLevelF0 < 255) analogWrite(F0_pin, ++fadeLevelF0);
      }
    else {
      if (fadeLevelF0 > 0) analogWrite(F0_pin, --fadeLevelF0);
    }
  }
}

void flickerF1() {

  static unsigned long startTimeF1 = 0;
  static unsigned long lastFlickerF1 = 0;
  static int stateF1 = HIGH;

  if (Func[0]&B00000001) {
    if (stateF1 == LOW) {
      startTimeF1 = millis();
      stateF1 = HIGH;
    }
    else {
      if (millis() - startTimeF1 > 3000) {
        digitalWrite(F1_pin, HIGH);
      }
      else {
        if (millis() - lastFlickerF1 > 25) {
          lastFlickerF1 = millis();
          if (random(2) == 0) digitalWrite(F1_pin, HIGH); else digitalWrite(F1_pin, LOW);
        }
      }
    }
  }
  else {
    digitalWrite(F1_pin, LOW);
    stateF1 = LOW;
  }
}

void blinkF2() {

  static int stateF2 = LOW;            
  unsigned long previousMillis = 0;        
  const long interval = 1000;           

  unsigned long currentMillis = millis();

  if (Func[0]&B00000010) {
    if (currentMillis - previousMillis >= interval) {
    previousMillis = currentMillis;

    if (stateF2 == LOW) {
      stateF2 = HIGH;
    } else {
      stateF2 = LOW;
    }

    digitalWrite(F2_pin,LOW);
    }  

void setup() {
  DCC.SetRawPacketHandler(RawPacket_Handler);
  DCC.SetupMonitor( kDCC_INTERRUPT );
  pinMode(0, OUTPUT);
  pinMode(1, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);

}

  void loop() {
  DCC.loop();
  fadeF0();
  flickerF1();
  blinkF2();
}

Thank you