Hola, tengo el problema de que quiero utilizar botones pero hay algo que hace que funcionen al revés y sospecho del arduino, ya que son botones normalmente abiertos, osea que hay que presionarlos para que cierren el circuito (enviando una señal HIGH a su pin digital) y soltarlos para que abran el circuito (enviando una señal LOW a su pin digital).
Mientras no lo pulso, el LED se encuentra encendido y cuando lo pulso, el LED se apaga. Debería ser al revés con el siguiente código:
const int BOTON = 2;
const int LED = 3;
void setup() {
pinMode(BOTON, INPUT);
pinMode(LED, OUTPUT);
}
void loop() {
if(digitalRead(BOTON) == HIGH){
digitalWrite(LED, HIGH);
}
else {
digitalWrite(LED, LOW);
}
}
Los probé con el tester (multimetro) y efectivamente son botones normalmente abiertos.
Este es el plano de como hice las conexiones:

No está el plano de conexiones. Podrías definir a Boton en pullup y conectarlo entre el pin de Arduino y gnd, para lo cual deberías invertir tu función, o sea, if (boton==HIGH){digitalWrite Led=LOW}
@Pablo_Lucini me acabo de dar cuenta de una cosa, la escritura del LED es lo que está fallando y la lectura del botón es correcta. Lo hice así:
const int BOTON = 2;
const int LED = 3;
void setup() {
pinMode(BOTON, INPUT);
pinMode(LED, OUTPUT);
Serial.begin(9600);
}
void loop() {
if(digitalRead(BOTON) == HIGH){
digitalWrite(LED, HIGH);
Serial.println("ON");
} else {
digitalWrite(LED, LOW);
Serial.println("OFF");
}
}
El mensaje serial es correcto, se imprime "OFF" cuando no se presiona el botón pero el LED se encuentra en HIGH. Y viceversa, cuando se presiona el botón, el mensaje serial que se imprime en el monitor serial es "ON" pero el LED se apaga. Esto me lleva a la conclusión de que la función "digitalWrite()" esta funcionando al revés
Es mas. Si yo ejecuto este codigo el LED se mantiene encendido:
const int LED = 3;
void setup() {
pinMode(LED, OUTPUT);
}
void loop() {
digitalWrite(LED, LOW);
}
Y si ejecuto este otro codigo, el LED se apaga:
const int LED = 3;
void setup() {
pinMode(LED, OUTPUT);
}
void loop() {
digitalWrite(LED, HIGH);
}
Cuando tendría que se totalmente al revés...
Si subís el esquema de conexiones seguramente alguien va a poder explicarte por qué funciona así.
Mi estimado GiovanniSJ aun no has publicado tu esquema y por lo tanto debo decir que estoy seguro que tu circuito del led esta mal.
Existen dos formas de conectar un LED.
Pin de salida a Resistencia a LED y a GND
y
Pin de salida a Resistencia a LED y a VCC
La forma que justifica el comportamiento que relatas es la segunda.
Por que?
Si tienes un LED con Anodo a VCC o sea 5V y Catodo mirando al pin y resistencia de por medio.
Cuando tengas un LOW en el PIN tu led se va a encender y cuando tengas un HIGH tu led permaencerá apagado.
Por qué una vez mas? Porque un Led conectado a VCC con Anodo hacia el terminal mas positivo y catodo hacia el pin solo tendrá circulación de corriente cuando apliques un LOW a la salida. La diferencia de potencial entre el led y PIN será la maxima.
En cambio cuando le apliques un HIGH llevarías el catodo a casi el mismo potencial (tensión) que el terminal de 5V.
Asi que esta todo bien, la electronica sigue funcionando y tu has aprendido que hay dos modos de conectar un LED patas para abajo o patas para arriba. A GND o a VCC.
@surbyte @Pablo_Lucini
Ya se en que me equivoqué, efectivamente surbyte tenía razón. Las conexiones que hice fueron las siguientes:

Como podrán notar, conecté el pin de salida digital al negativo del LED, cuando lo tendría que haber conectado a su positivo de la siguiente forma:
