[Risolto] Blink con millis() lettura PPM con pulseIn() Ritardi e Problemi

Codice Perfettamente funzionante (con tutti i pulseIn collegati "fonte leo72")

int luciPosIn = 2;
int fariLungIn = 3;
int frecceIn = 4;
int lampIn = 5;
int stopIn = 6;
int retroIn = 7;


int luciPosOut = 8;
int faroLung1 = 9;
int faroLung2 = 10;
int stopOut = 11;
int retroOut = 12;
int frecceOut = 13;

int stopInS;
int retroInS;

int val1;
int val2;
int val3;
int val4; //Possibile non necessario!!
int val5 = LOW;

unsigned long previousMillis = 0;
unsigned long interval = 500;

extern unsigned long timer0_millis;

void setup() {
  pinMode(luciPosIn, INPUT); //Input PPM ricevente radio (luciPosIn)
  pinMode(fariLungIn, INPUT); //Input PPM ricevente radio (fariLungIn) Possibile anche lampeggio!!!
  pinMode(frecceIn, INPUT); //Input PPM ricevente radio (frecceIn)
  pinMode(stopIn, INPUT); //Input mosfet regolatore (stopIn)
  pinMode(retroIn, INPUT); //Input mosfet regolatore (retroIn)
  pinMode(lampIn, INPUT); //Input PPM ricevente radio (lampIn) Possibile non necessario!!!
  
  pinMode(luciPosOut, OUTPUT); //Accensione luci posizione
  pinMode(faroLung1, OUTPUT); //Accensione luce profondità !! o lampeggio strobo
  pinMode(faroLung2, OUTPUT); //Accensione luce profondità !! o lampeggio strobo
  pinMode(frecceOut, OUTPUT); //Accensione 4 frecce
  pinMode(stopOut, OUTPUT); //Accensione Stop e posizione posteriore 1/2 potenza
  pinMode(retroOut, OUTPUT); //Accensione retro
  
  digitalWrite(luciPosOut,LOW);
  digitalWrite(faroLung1,LOW);
  digitalWrite(faroLung2,LOW);
  digitalWrite(stopOut,LOW);
  digitalWrite(retroOut,LOW);
  
}

void loop() {
  
  val1 = pulseIn(luciPosIn, HIGH);
  val2 = pulseIn(fariLungIn, HIGH);
  val3 = pulseIn(frecceIn, HIGH);
  val4 = pulseIn(lampIn, HIGH); //Possibile non necessario!!
  
  stopInS = digitalRead(stopIn);
  retroInS = digitalRead(retroIn);
  
  
  if (val1 > 1600) digitalWrite(luciPosOut, HIGH);
  if (val1 < 1600) digitalWrite(luciPosOut, LOW);
  if (val1 > 1600 && stopInS == LOW) analogWrite(stopOut, 10);
  if (val1 > 1600 && stopInS == HIGH) analogWrite(stopOut, 255);
  if (val1 < 1600 && stopInS == HIGH) analogWrite(stopOut, 255);
  if (val1 < 1600 && stopInS == LOW) analogWrite(stopOut, 0);  
  if (val2 > 1600) digitalWrite(faroLung1, HIGH);
  if (val2 < 1600) digitalWrite(faroLung1, LOW);
  if (val2 > 1600) digitalWrite(faroLung2, HIGH);
  if (val2 < 1600) digitalWrite(faroLung2, LOW);
  if (val3 > 1600) {
    
    if (millis() - previousMillis > interval) {
      
      previousMillis = millis();
      
      if (val5 == LOW)
        val5 = HIGH;
      else 
        val5 = LOW;
      
      digitalWrite(frecceOut, val5);
    }
  }
  if (val3 < 1600) digitalWrite(frecceOut, LOW);
        
  if (val4 > 1600 && val2 < 1600) {
  
    if (millis()>50 && millis()<100) digitalWrite(faroLung1, HIGH);     
    if (millis()>100 && millis()<150) digitalWrite(faroLung1, LOW);
  
    if (millis()>150 && millis()<200) digitalWrite(faroLung1, HIGH);   
    if (millis()>200 && millis()<250) digitalWrite(faroLung1, LOW);
  
    if (millis()>750 && millis()<800) digitalWrite(faroLung2,HIGH);
    if (millis()>800 && millis()<850) digitalWrite(faroLung2, LOW);
  
    if (millis()>850 && millis()<900) digitalWrite(faroLung2,HIGH);
    if (millis()>900 && millis()<950) digitalWrite(faroLung2, LOW); 

    if (millis()>1400) {
      cli();
      timer0_millis = 0;
      sei();  
    }  
  }
  
  if (retroInS == HIGH) digitalWrite(retroOut, HIGH);
  if (retroInS == LOW) digitalWrite(retroOut, LOW);
  
}

ringrazio tutti per l'aiuto datomi
specialmente per avermi spiegato il millis()
e le preziose informazioni sui tempi di pulseIn

magari se a qualcuno venisse in mente un alternativa al pulseIn sarebbe molto gradita