Inicio codigo inesperado (SOLUCIONADO)

Si pero no cambia mucho, solo es mas fácil a los efectos de entender todo el código.
Pero entendiste tu error?

unsigned long condicion = millis();

 if (condicion - palabra >= ConT){
    ConT= condicion;
    Serial.println("SE CUMPLE LOS 3 SEG.");
    
 }

mira ahi.. condicion es tu millis()
palabra valia en tu caso 3000
pero luego el que cambiabas es ConT asi que al arrancar te encuentras con supongamos condicion = 200

200 - 3000 = ? eso da como diferencia de numeros sin signo un valor con overflow o sea

    0x0000 00C8 = 200 decimal
  [u]  0x0000 0<U+202D>BB8<U+202C>  [/u] = 3000 decimal
    0xFFFF F510<U+202C>

un número grande mayor a ConT que creo vale 0 ademas

Espero haberlo hecho bien.