Buenos dias, recurro a su ayuda ya que he intentado algunas cosas y no me han resultado, tengo un pedazo de código que se repite bastante, intente hacer en una nueva hoja esa parte del codigo para llamarla y no me resulta ya que es un break y me dice que tiene que estar dentro del bucle for, entonces como hay diferentes bucles for donde tengo que usar el mismo break, no sabría como usar siempre las mismas lineas de codigo sin tener que escribirla cada vez.
Ahora que lo veo bien, lo error era hacer le break fuera del for, y como lo haces tu es casi igual a como lo hacia yo, pero faltaba la condicional dentro del for para poder dejar ahi mismo el break, a veces la respuesta esta a la vuelta de la esquina, pero no siempre fácil verla.
@peabass Añado un par de detalles para que tengas en cuenta sobre como has planteado el condicional.
!A || !B || !C
es lo mismo que
!(A && B && C)
Te ahorras unos cuantos "!" y seguramente se ejecuta más rápido.
Por otro lado, no se que micro estás usando, pero en caso de ser UNO/Nano podrías acceder directamente a los puertos y enmascarando bits hacer mucho más corta la condición, en este caso (siempre para UNO/Nano) en lugar de
Explico, en el puerto D tienes los pines D0 a D7, enmascaramos Rx y Tx que no nos interesan y el pin 6 que no lo usas en tu comparación, luego si cualquiera de los otros NO estuviera en bajo el AND no daría 0 y no se cumpliría la condición.
En el puerto B los pines D8 a D13, enmascaramos los bits 6 y 7 que no nos interesan, y otra vez, si algún pin no está en bajo, no se cumple la condición.
En el puerto C los pines D14 y D15 (que coinciden con A0 y A1), enmascaramos todos los bits que no nos interesan y de nuevo, tanto D14 como D15 deben estar en bajo para que se cumpla la condición.
Finalmente las 3 condiciones tienen que ser ciertas para que se cumpla la condicional completa.
O podrías hacer algo así (por ejemplo en una Mega que tiene los pines "desparramados" por todos los puertos, y tiene muchos... pines y puertos)
bool condicion() {
byte acumulador;
for (byte i = 2; i <= 15; i++) {
if(i != 6) acumulador += digitalRead(i);
}
return acumulador == 0;
}
tuve que poner la condicion else return 0, ya que sin eso el programa quedaba pegado y no avanzaba, tb hice la modificación propuesta por gatul para eliminar algunos !, aunque me fije que por lo menos el tamaño del programa no mejoraba, es probable que si corra mas rápido.
la idea de mirar directamente los puertos es buena cuando necesitamos tiempo, pero no funciono el ejemplo entregado, probablemente hay que darle una vuelta mas, pero si entendí la idea, como es mas difícil mantener esa parte no la usare por el momento y la dejare anotada para el futuro.