LPC1768 - LED verde cuando LDR ve luz, LED rojo cuando LDR está cubierto

He estado tratando de lograr una tarea en la que estoy trabajando y creo que casi lo he logrado. Cambia de color con éxito cada vez que lo cubro, pero cuando lo hace, el LED rojo sigue parpadeando en lugar de permanecer abierto de manera constante.

void Task5(TestAdmin &tester, PwmOut &r_led, PwmOut &g_led, AnalogIn &ldr)
{
    while(tester.testRunning()) {
        g_led.write(1); //turn off
        r_led.write(1); // turn off

        float value = ldr.read(); //takes the reading from the LDR(Light Dependent Resistor)

        if(value >= 0.4) {
            r_led.write(0); //turn on
        } else {
            g_led.write(0); // turn on
            wait_ms(2);
        }
    }
}
DE ACUERDO. Código formateado publicado. Ahora, ¿por qué las dos write(1);declaraciones? Agregue algunos comentarios de código para explicar su lógica.
Puede ser conveniente hacer un esfuerzo mínimo para comprender sus herramientas, como qué lenguaje de programación y MCU está utilizando realmente. Está programando C ++, no C. Está utilizando un punto flotante en una MCU sin FPU. Etc. Esto, a su vez, le permitirá comprender por qué su programa es tan lento cuando inevitablemente se encuentra con cuellos de botella en el rendimiento más adelante.

Respuestas (1)

Esta no es una respuesta completa, pero parece que hay algunos problemas con su código. Tu usas

g_led.write(1);

y más abajo

green.write(0);

debería greenser g_led?

Su rutina también enciende ambos LED en cada llamada a Task5 y luego vuelve a value >= 0.4apagar el rojo. Eso puede explicar tu parpadeo.

Como se señaló en el comentario, la sangría descuidada no ayuda a tratar de depurar esto. Adquiera el hábito de sangrar siempre su código correctamente a medida que avanza.


Prueba esto:

while(tester.testRunning()) {
    float value = ldr.read(); //takes the reading from the LDR(Light Dependent Resistor)

    if(value >= 0.4) {
        g_led.write(1); // Green off.
        r_led.write(0); // Red on.
    } else {
        g_led.write(0); // Green on.
        r_led.write(1); // Red off.
        //wait_ms(2);   // not required
    }
}