Por un comentario, veo que su problema se solucionó al habilitar una resistencia de extracción en el microcontrolador.
Eso significa que su circuito original no fue "completamente funcional". Aparentemente, funcionó en el caso particular en que lo probó a esa temperatura, a esa humedad, con esas partes específicas, exactamente a esa tensión de alimentación y al parecer a ese nivel de luz específico.
Esto es lo que sucede cuando violas las especificaciones. En este caso, ignoró las especificaciones de nivel lógico bajo y máximo mínimo para el pin de entrada. Estos se explican claramente en la hoja de datos, junto con la corriente máxima de fuga de pines en el modo de entrada. Al juntar todo esto, significa que el estado lógico de una entrada flotante no está garantizado, además, como es normal, es una mala idea por otras razones.
El interruptor tirará de la línea de manera sólida (aparentemente baja en su caso) cuando esté cerrado. El problema es qué sucede cuando el interruptor está abierto. Sin algo que se asegure de que el voltaje del pin esté por encima de su umbral lógico alto garantizado mínimo, cualquier cosa puede suceder. Esto es lo que la resistencia pullup fija. Suministra más corriente al pin en el nivel lógico mínimo alto que el pin puede filtrarse, garantizando así que se verá como un nivel lógico alto cuando no hay nada más conectado.
La razón por la que la luz importa es porque varias sustancias pueden cambiar la conductividad ligeramente dependiendo del nivel de luz. Las uniones semiconductoras son aún más susceptibles a la luz, que de hecho es la base de cómo funcionan las fotocélulas. Dado que estaba operando el dispositivo fuera de las especificaciones, no había garantía de nada, y obtuvo lo que recibió, que en este caso resultó ser una sensibilidad a la luz. El mismo problema podría haber ocurrido a diferentes temperaturas, diferentes humedades y diferentes partes, incluso del mismo lote.
LEA LA HOJA DE DATOS la próxima vez.