problema con el comando if else,

hola, estoy empezando con esto de arduino, y por esto voy viendo ejemplos y añadiendo algo mas de código, pero no se que le pasa a este, siempre entra en el bucle aunque el pulsador este pulsado o no.

el circuito es un led en serie con una resistencia de 220, conactado a pin 13 y negativo. el pulsador va en serie con una resistencia de 10k a un extremo netaivo y al otro positivo, y entre medias al pin 2.

os agradecería vuestra ayuda. muchas gracias de antemano.

int ledPin = 13; //pin de salida para el LED int inPin = 2; //pin de entrada (para un interruptor) void setup() { pinMode(ledPin, OUTPUT); //declara LED como salida pinMode(inPin, INPUT); //declara el interruptor como entrada } void loop() { if (digitalRead (inPin == HIGH )) //comprueba si la entrada esta a HIGH { digitalWrite(ledPin, HIGH); //activa el LED delay(500); //pausa 1 segundo digitalWrite(ledPin, LOW); //desactiva el LED delay(500); //pausa 1 segundo } else { digitalWrite(ledPin, HIGH); //activa el LED delay(4000); //pausa 1 segundo } }

Tienes error básico de concepto. Tienes que leer algún libro sobre Arduino para no ir dando palos de ciego.

“loop” significa bucle, todo lo que hay dentro se ejecuta indefinidamente una y otra vez aunque tu no hagas nada.

Si no pulsas el botón, el LED estará siempre encendido

Y además tienes un error aquí:

if (digitalRead (inPin == HIGH ))

Debería ser

if (digitalRead(inPin) == HIGH)

Bueno en mi humilde opinión creo que primero se debería aprender a programar algo básico en java o C++ (un poco más complicado) por ejemplo: tipos de variables (int, char, boolean), bloques de control (if, ifelse, switchs), bloques repetitivos (bucles, loops) y arrays. Dominando solamente eso tienes bastante y más para programar en Arduino, luego el manejo de librerías viene solo y con la experiencia aprendes más. Y después aplicar un poco de ingeniería de software para escribir código limpio y entender mejor las librerías.

Quizá es mucho así de sopetón pero es algo básico que debe aprender la gente que quiere programar aunque sea poco, ya que es lo mínimo para que un proyecto tenga éxito, también hay gente que pilla código por allí y por allá y salen cosas, pero bueno, como he dicho es mi humilde opinión.

Porque realmente la consulta que has hecho es muy básica y de nivel leer un tutorial, de hecho en los tutoriales de arduino hay cosas muy parecidas que te pueden ayudar.

muchas gracias a los tres, ya se que mi duda era muy básica, pero al principio y aunque busque en manuales y ejemplo, como siempre es duro y difícil empezar.

lo que aun tengo dudas es que si hay un fallo en la sintaxis, porque al compilarlo no reconoce el error? realizado el cambio sugerido en la línea del if ya funciona correctamente, ni que decir que para comprobar el porque no funcionaba estuve varias horas buscando información y que el código salió de un manual por lo que el mismo tiene un error que se lo mismo han corregido en versiones posteriores.

muchísimas gracias nuevamente.

Hola Josefran. te daré una visión de porque no te da errores el IDE pero tmb porque no funciona.
Mi compilación dice que esta bien… No importa con que Arduino lo hice. En mi caso estaba el IDE seteado con un MEGA.

Sketch uses 1.708 bytes (0%) of program storage space. Maximum is 253.952 bytes.
Global variables use 13 bytes (0%) of dynamic memory, leaving 8.179 bytes for local variables. Maximum is 8.192 bytes.

tu código dio un supuesto resultado positivo.
Pero que esta mal en el código y porque si esta mal el compilador lo ve como aparentemente bueno.
Mira esto

if (digitalRead (inPin == HIGH ))

Cierto, ya te digo gepd que estaba mal y lo está, pero porque da bien?
digitalRead(inPin==HIGH) sigue estando bien pero cómo?
(inPin==HIGH) es una operacion booleana que devuelve 0 o 1 según sea. porque dice en realidad
2==HIGH y la respuesta es SI o 1
por lo tanto todo se traduce a
digitalRead(1) como si fuera digitalRead del Pin1 o sea del TX
Bien en definitiva ahi ves porque el IDE lo compiló como aparentemente correcto.
Curiosidades.

muchas gracias por la aclaracion