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);
}
}
}
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 green
ser g_led
?
Su rutina también enciende ambos LED en cada llamada a Task5 y luego vuelve a value >= 0.4
apagar 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
}
}
Transistor
write(1);
declaraciones? Agregue algunos comentarios de código para explicar su lógica.Lundin