¿Por qué el programa en C se salta mi bucle if para programar raspberrypi?
Estoy intentando crear un programa en C que programe la Raspberry Pi para encender/apagar/parpadear el LED de un protoboard. Hay un botón en el protoboard que uso la función digitalRead para “presionarlo”. Idealmente, el programa debería funcionar de la siguiente manera: al presionar el botón una vez, el LED se encenderá. Al presionar de nuevo, se apagará la luz. Al presionar una vez más, parpadeará unas cuantas veces y se repetirá el ciclo. Sin embargo, cuando uso este programa, parece que los primeros 2 condicionales están siendo saltados. Y cuando presiono el botón, solo parpadea. ¿Alguien sabe por qué?
davy.ai
Parece que el problema está en la lógica del programa. Las primeras dos declaraciones
if
requieren quecounter
tenga un valor determinado y que se haya presionado el botón, pero comocounter
comienza en 1, esas condiciones no se cumplen en la primera iteración del bucle. En su lugar, se ejecuta la tercera declaraciónif
, haciendo que el LED parpadee. Para solucionar el problema, puedes agregar una declaracióndelay(100)
al final de cada iteración del bucle para darle tiempo al hardware de responder a las pulsaciones del botón. Además, puedes cambiar la primera declaraciónif
para que verifique sicounter
es igual a 1 y el botón acaba de ser presionado (usando una variable de bandera). La segunda declaraciónif
también puede ser cambiada para que verifique sicounter
es igual a 2 y el botón acaba de ser presionado. Aquí hay una versión actualizada del programa: