El if tiene una sola condicion... el else se ejecuta si la condicion NO se cumple. En tu caso en el else si no vas a poner nada, entonces no pongas nada.
if (aca dentro la condicion)
{
//Aca lo que va a pasar si se cumple
}
else
{
//Aca lo que va a pasar si NO se cumple la condicion
}
El else es opcional, si por ejemplo no tengo nada que hacer cuando NO se cumple entonces puedo hacer:
if (aca dentro la condicion)
{
//Aca lo que va a pasar si se cumple
}
Por lo que el codigo que pusiste seria asi:
void loop() {
resultado = digitalRead(buttonPin);
if(resultado == LOW)
{
delay(500);
contador++;
Serial.println(contador);
}
}
O si queres dejar el else (pero como ves es menos legible ), seria asi:
void loop() {
resultado = digitalRead(buttonPin);
if(resultado == LOW)
{
delay(500);
contador++;
Serial.println(contador);
}
else
{
}
}
-----------------------------------------------------------------------------------
Ahora pasemos a tus codigos
Tu primer codigo era asi:
Obtengo Estado del boton en este momento y lo guardo en "Resultado"
if(Resultado en alto?)
{
if(Resultado en bajo?)
{
//Aca hace el codigo de enviar
}
}El problema y la diferencia con el segundo codigo, es que lees el pin una sola ves, si por ejemplo el pin estaba en alto eso se guardo en "resultado". Pero luego preguntas por "resultado" primero por si esta en alto y leugo en bajo, obviamente "resultado" queda con el valor que se le asigno al momento de leer el pin ( no se actualiza solo ). Por lo tanto no puede cambiar entre medio de los ifs, y tampoco puede estar en alto ( HIGH) y bajo (LOW) a la ves como para entrar en ambos if.
Tu segundo codigo:
if(Leo boton y pregunto si esta en alto?)
{
if(Leo boton y pregunto si esta en bajo?)
{
//Aca hace el codigo de enviar
}
}Ahora preguntamos en cada if el estado del pin, entonces vamos a leer 2 veces el estado del boton.
El problema del segundo codigo es que el micro es muy rapido le tomara microsegundos pasar de un if al otro, al primer if entra cuando el boton esta en alto, pero luego preguntas por si esta bajo, ese if seguramente que no entre (ya que es muy corto el tiempo que pasa), a no ser que poseas suerte no creo nunca logres ponerlo en bajo en microsegundos LUEGO de entrar al primer if.
Y eso es lo que ocurria, y por eso no funcionaba siempre tu codigo. todo dependia de cuando soltabas el boton... me doy a entender con un ejemplo
if(boton en alto)
{
<--------- En este punto soltaste el boton
if(boton en bajo)
{
//Aca hace el codigo de enviar
}
}
Si lo hiciste justo en ese punto va a entrar al otro if. Si lo hiciste en cualquier otro punto del programa NO va a entrar. Es como una ruleta, pasa miles de veces por ahi, y vos estas intentando soltar el boton justo en un punto especifico del programa. Y eso no deberia ocurrir, vos necesitas tener si o si un comprtamiento determinado.