Código básico para leer un pulsador
Con el pulsador entre el pin 2 y GND, vamos de lo más simple a lo más útil.
1. Leer el estado
Mostramos en el Monitor Serie si está pulsado o suelto.
#define BOTON 2
void setup() {
pinMode(BOTON, INPUT_PULLUP);
Serial.begin(9600);
}
void loop() {
if (digitalRead(BOTON) == LOW) { // LOW = pulsado (pull-up)
Serial.println("Pulsado");
} else {
Serial.println("Suelto");
}
delay(100);
}
Abre el Monitor Serie (Herramientas → Monitor Serie, a 9600 baudios) y pulsa.
2. Encender un LED mientras pulsas
El Arduino UNO tiene un LED en la placa conectado al pin 13. No hace falta montar nada más.
#define BOTON 2
#define LED 13
void setup() {
pinMode(BOTON, INPUT_PULLUP);
pinMode(LED, OUTPUT);
}
void loop() {
bool pulsado = digitalRead(BOTON) == LOW;
digitalWrite(LED, pulsado ? HIGH : LOW);
}
3. Contar pulsaciones sin rebotes
Detectamos el momento en que se pulsa (el cambio de HIGH a LOW) y esperamos a que la señal se estabilice antes de aceptarlo.
#define BOTON 2
const unsigned long ESPERA = 30; // ms de antirrebote
int contador = 0;
int estadoEstable = HIGH;
int ultimaLectura = HIGH;
unsigned long ultimoCambio = 0;
void setup() {
pinMode(BOTON, INPUT_PULLUP);
Serial.begin(9600);
}
void loop() {
int lectura = digitalRead(BOTON);
if (lectura != ultimaLectura) { // la señal se ha movido
ultimoCambio = millis();
}
if (millis() - ultimoCambio > ESPERA && lectura != estadoEstable) {
estadoEstable = lectura; // lleva 30 ms quieta: es real
if (estadoEstable == LOW) {
contador++;
Serial.print("Pulsaciones: ");
Serial.println(contador);
}
}
ultimaLectura = lectura;
}
millis()devuelve los milisegundos desde que arrancó la placa, y permite medir tiempos sin detener el programa como haríadelay()- Solo se cuenta cuando el estado lleva 30 ms sin cambiar
4. Encender y apagar con cada pulsación
Sobre el código anterior, basta con cambiar lo que pasa al detectar la pulsación:
bool ledEncendido = false;
// ...dentro del if (estadoEstable == LOW):
ledEncendido = !ledEncendido;
digitalWrite(13, ledEncendido);
Si vas a usar varios botones, la librería Bounce2 (Herramientas → Administrar Bibliotecas) hace el antirrebote por ti con una línea por botón.
¿Y ahora qué?
El siguiente paso natural es leer un valor que cambie de forma continua, como el giro de un potenciómetro.