Ajuda com função millis()

A função delay é literalmente um ciclo while como o que tu programaste.
A maneira de conseguir fazer isto é através de if's em vez do while. Para tal vais precisar de ter variáveis que guardam o estado da funcionalidade que queres.

unsigned char condicao = 0;
unsigned char condicao_anterior = 0;
unsigned long condicao_tempo = 0; 

if ((condicao != condicao_anterior) && (condicao == TRUE)) { // se o sinal mudou de estado. 
    condicao_tempo = millis();
    }

if (condicao == TRUE && millis()-condicao_tempo >= interval1) {
   //faz o que pretendes...
}

A função loop é um ciclo (como um while) e como tal vai correndo todas as condições ao mesmo tempo. Se quiseres, podes criar um bit de temporização para indicares que a temporização está a correr.