Bueno la conjetura es que debo de cambiar este 0b01111000 por 01111110 y mejor dicho lo cambie y mejoro un poco el programa porque ahora si censa todas las entradas a como estaba fíjate que solo censaba una entrada y así ya censa todas
Eso fue por que yo solo queria que se activara la sirena con las entradas de adentro nomas y no la externas, que las externas solo encendieran la luz.
Otra pregunta necesito entender el flujo de las funciones para que pueda comprender y detectar en que parte del código se queda el programa
Te lo estoy escribiendo bastante simple, el espacio al frente de las intrucciones no estan sin sentido, estan para ayudar a la lectura.
if(LuzActiva == 1)
{
ContadorLuz++;
if(ContadorLuz == 60) // 30 seg = 60 entradas
{
output_low(LUZ_PAD);
ContadorLuz = 0;
LuzActiva = 0;
}
}
else
{
output_low(LUZ_PAD);
ContadorLuz = 0;
}
Si te fijas en la misma linea vertical del if, yo puse el else, para que te dieras cuenta rapidamente que ese else pertenece a ese if, es decir que si se cumple la condicion del if, va a ejecutar todo el bloque que encierra sus llaves ( que si te fijas tiene un espacio mas para que sepas lo que conforma TODO el bloque ) de no producirse la condicion es ejecuta el else.
Supongamos que LuzActiva es igual 1. Ahora se debe ejecutar esto:
ContadorLuz++;
if(ContadorLuz == 60) // 30 seg = 60 entradas
{
output_low(LUZ_PAD);
ContadorLuz = 0;
LuzActiva = 0;
}
Sumo 1 a ContadorLuz, y se va a ir acumulando cada ves que entre. Mientras no sea igual a 60 solamente se va a producir el incremento de ContadorLuz y se sale del if del LuzActiva.
Cuando se cumple la condicion de que ContadorLuz era 59, entro, se incremento en 1, ahora es 60, se pregunta en el if y cumple la condicion, entonces recien ahi ejecuta lo de adentro del if, es decir:
output_low(LUZ_PAD);
ContadorLuz = 0;
LuzActiva = 0;
Apagando la luz, poniendo el contador a 0 para que comienze de nuevo, Y apagando el tema de LuzActiva. asi ya no vuelve a entrar hasta que el sensor nuevamente detecte algo y ponga el mismo a LuzActiva en 1, para comenzar todo de nuevo.
si se cumple pasa a la siguiente línea que es output_low(LUZ_PAD); que es apagar LUZ_PAD si es asi cuando se ensenderia LUZ_PAD aver si me explique en la comprensión del flujo del código que te puse arriba
LUZ_PAD se encenderia al momento en que el sensor detecte algo, en la rutina principal