programacion de timer sin delay

Hola flavio... Si, mas o menos es así... por favor usa los tags, para insertar el codigo.

Vamos a ver...
Primero que nada... todas tus variables que tengan que ver con el tiempo tienen que ser Unsigned Long

Asi queda;

unsigned long tiempo1      =0;
unsigned long                  =1000;
unsigned long                  =1000;
unsigned long fadeDelay    =100; // este es el "espacio entre escalones" del PWM del fade. 
unsigned long TimmerFade          = 0;    //esta vaiable "anota el tiempo" para usarlo en el fade
byte brillo = 0;                                    //variable para manejar el brillo. 

const byte led1=3; //estos son pines asi que es mejor declararlos asi que como int 
const byte pir1=31;

boolean estado1=false;
boolean estado2=false;

void setup() {
  Serial.begin(9600);
  tiempo1 = millis(); //Aqui... anotamos el tiempo solo para compararlo despues.

void loop(){

//------comienza el pseudocodigo... 

If( PIR == ON) // Si el sensor se ha encendido...
{

If(millis()- timmerFade > fadeDelay) // Si ha pasado mas tiempo que el delay del fade hacer: 
   {
    
    brillo+10; 
    analogWrite(led, brillo); 
    TimmerFade = millis();
   }

}

}

Bueno es un pequeño escalon, es pseucodigo y debes adaptarlo a tus necesidade, ahora bien... no usaremos el for... por que "bloquea" el programa... si entendí bien necesitas usar un soft-delay por que vas a leer o hacer algo mas.

El codigo de arriba lo hace...
primero se pregunta; el tiempo actual es mayor que delay del fade?
la primera vez si lo es... por que el tiempo se anoto en el setup... en seguida incrementa la variable brillo en 10 (eso lo puedes modificar a tu gusto)... y lo escribe en el pin analogico, finalmente "escribe la hora" asi que el codigo sigue corriendo y digamos que han pasado 50Ms, al hacer la comparación no es mayor que el tiempo del fade... por lo que no "hara nada"... pero quizas en dos o tres vueltas hayan transcurrido digamos 102Ms... que si es mayor que tiempo de fade... por lo que volvera a incrementar el brillo.

Ahora bien... Tu reto es implementarlo debidamente y encontrar la manera de "poner una guarda" para que solo brille hasta 255... una vez que el sensor este encendido... y hasta 0 cuando este apagado... de otra manera la variable hara algo así; 253, 254, 255, 0 , 1, 2 (recuerda que byte solo almacena valores hasta 255 y sin negativos).

Puedes basarte en el ejemplo y regresar con un codigo mas terminado.

Cualquier duda. Estamos para ayudarte en lo posible.

-Alex.