variaciones en millis() al usar "<=" o "=="

buenos dias a todos
hace mucho empecé con un programa, al que le voy aumentando mas líneas según lo que necesito
todo el código utilizo millis() para los tiempos o retrasos, pero empezó a dar fallos cuando incremente la cantidad de variables que funcionan con millis()

unsigned long t2,tldr,tpant,tv,tb,tb1,tb2,tb3;

por ejemplo para leer un ldr cada tres segundos utilizo el siguiente código y para las demás variables es lo mismo

ldr= analogRead(A1);
if(tldr+3000<=millis()){
    tldr=millis();
if(ldr<800){
      valdr=0;
           }
if(ldr>900){
      valdr=1;
           }

entonces si a todas las comparaciones de millis() le pongo == (igual que), el código funciona un instante y luego ya no, en pantalla se muestra solo los últimos datos leídos, pero hay otra parte del código que si funciona por ejemplo los pulsadores

si coloco <= (menor igual que) pasa lo contrario, por ejemplo los pulsadores ya no funcionan pero lo demás si

en ocaciones funciona bien todo y de la nada ya no

hay algún limite para usar variables que funcionan con millis()??

Es difícil contestarte, porque no pusiste todo el código, pero si existe una diferencia al utilizar <= o ==, cuando el código es muy grande y tarda mas de un mili segundo en ejecutarse . En un ciclo del loop estas por arriba, pero en siguiente estas por debajo y nunca ve que se igualan. Este es mas notorio si el procesador es lento . Te repito , no se si es tu caso (el programa debe ser muy grande y el procesador muy lento).
Saludos

Me corrijo, no hace falta que el programa sea muy grande basta con operaciones que lleven tiempo, como el Serial.print (en Arduino Mega)

unsigned long tim;
void setup() {
  Serial.begin(115200);
}
void loop() {
  tim = millis();
  if (millis() - tim == 0) {
    Serial.print(millis());
    Serial.println("");
 }
}

Evalúa la igualdad casi dos ciclos del loop

En cambio, este que solo aumente la cantidad de espacios impresos. se saltea la igualdad en varios ciclos de loops.

unsigned long tim;
void setup() {
  Serial.begin(115200);
}
void loop() {
  tim = millis();
  if (millis() - tim == 0) {
    Serial.print(millis());
    Serial.println("                            ");
 }
}

¿Porque no usas la formula habitual?:

if(millis() - tldr >= 3000){

Si tu loop es extenso puede que pase algun milisegundo de los 3000 ,pero se ejecutara.

Otra opción es que uses una variable que se cargue con el valor de millis() al comienzo y todo se compare contra dicha variable no importa si han pasado o no 1 o 3 milisegundos.
De todas formas PeterKanTropus y Jose te han dando opciones a tener en cuenta.

Muchos usan esto

currentmillis = millis(); y todas las comparaciones se hacen contra dicho valor.

No será perfecto pero asegura que todas las condiciones se ejecuten contra el mismo valor.