- No se que hace SALIDA. No se a dodne va, y siempre necesitas mantenerte DENTRO del while TRUE, ya que deberia ser tu unico WHILE con esa condicion.
- Usualmente usar un goto a no ser casos puntuales en C es un NO! NO!
- ¿Por que usar 43,44,48 cuando tranquilamente podes usar PIN_A1, PIN_B0, etc
- Podes usar output_high(PIN_B1) y output_low(PIN_B1) para encender y apagar.
- El delay en una comparacion, a pesar que se ejecuta no estaria cumpliendo el cometido o lo que vos esperas que haga.
Ya que la función delay_ms puede retornar cualquier cosa, en el manual esta especificado como "indefinido". Por lo tanto no es de fiarse. Y estoy mas que seguro es un error de lo que quisite hacer.
La idea es que al pulsar algún botón el led se encienda y con otro se apague. Y que al presionar alguno de los dos botones por cierto tiempo pueda ejecutar la acción "goto" para salir de un bucle (esta es la única parte que me da problemas de todo mi código). Agradecería muchísimo su ayuda.
El delay_ms hace que el micro se encierre ejecutando instrucciones sin sentido. En realidad todo delay hace eso... Lo que podes hacer es un delay cortito, y contar cuantes veces estuvo presionado. Sigo usando ese while a pesar que me llama la atencion, pero supongo que no es la unica parte del codigo.
while(true){
if(input(PIN_A0)==1){
output_high(PIN_B0);
contador++;
} else if(input(PIN_A1)==0){
output_LOW(PIN_B0);
contador++;
} else {
contador=0; // Reseteo porque se soltaron ambos
}
delay_ms(10);
if(contador == 150){ // 150 * 10ms = 1500ms
break;
}
}
Mientras esta presionado... Aumenta "contador". Si se suelta, se reinicia contador a 0. Nunca ejecutandose el break que es quien te va a sacar del while.