les vencimos · offline

L10. El pulsador

El mundo entra (22–38%)

Maestro

Hasta ahora la placa solo hablaba. El pulsador es la primera vez que escucha. Lo más fácil, y lo menos mentiroso, es unir el botón entre el pin y masa, y activar la resistencia interna que sube el pin cuando nadie aprieta. Apretado, el pin lee bajo. Suelta, lee alto. El LED 13 se enciende solo mientras el dedo está ahí.

Un pin de entrada dejado al aire no es un cero limpio. Es una antena. Por eso no se usa el botón «a pelo» sin resistencia. INPUT_PULLUP enciende una resistencia dentro del chip que tira del pin hacia 5 voltios. El pulsador, al cerrarse, une ese pin con GND y gana la masa: la lectura pasa a LOW. Al soltar, el pin vuelve a HIGH.

El cableado es corto. Una pata del pulsador al pin 2. La otra a GND. Muchos pulsadores de cuatro patas van por parejas unidas: si las dos que eliges ya están unidas por dentro, el botón parece siempre apretado. Cambia a la diagonal, o pruébalo con el polímetro en continuidad, antes de culpar al programa.

El sketch pone el 2 como INPUT_PULLUP y el 13 como salida. En loop, si digitalRead(2) vale LOW, enciende el 13. Si no, lo apaga. No hace falta delay. Esta vez el programa no recuerda nada: la luz copia el dedo. El recuerdo vendrá cuando queramos un interruptor que se quede.

No pongas 5 voltios directos al pin y el botón a masa sin pensar el cortocircuito. Con INPUT_PULLUP el pin nunca está unido fuerte a 5 voltios por tu cable. La resistencia interna es el freno. Por eso este montaje es el del curso.

Montaje

Uno pin 2 GND pulsador
Un lado del pulsador al pin 2, el otro a GND. Sin resistencia externa: la pone el chip.

Pines de esta lección

Uno R3 · 5 V · mira la serigrafía, no la memoria2pulsadorGNDel otro lado13LEDLOWapretado
El 2 se lee. El 13 se enciende. LOW significa dedo, no avería.

Por qué

INPUT_PULLUP enciende una resistencia interna del chip que tira del pin hacia 5 V cuando nadie lo toca. El pulsador, al cerrarse, une el pin con GND y la lectura cae a 0 V. Por eso apretado es LOW, y suelto es HIGH. Es al revés de la intuición, y es la forma que usa este curso porque ahorra una resistencia y un cable a 5 V.

Si dejas el pin en INPUT sin pull-up y sin resistencia externa, el pin flota. Lee HIGH o LOW según el ruido, el dedo o la humedad. El LED parece poseído. No es un sensor fantasma: es una entrada sin referencia.

El pulsador tiene cuatro patas que en realidad son dos parejas. Las patas que están en el mismo lado metálico suelen ir juntas. Si metes las dos del mismo contacto en filas distintas y crees que son los dos polos, el botón no abre el circuito nunca, o lo abre siempre. Gira el componente un cuarto de vuelta si no cambia la lectura.

El LED de respuesta sigue en el 13, con su resistencia si es externo. El botón no alimenta al LED. El programa lee el 2 y escribe el 13. Son dos pines a propósito.

Práctica

  1. Placa apagada. Mete el pulsador a caballo de la zanja.
  2. Un cable de una pata al pin 2. Un cable de la otra pata, la que no está unida por dentro a la primera, a GND.
  3. Deja el LED del 13 como estaba.
  4. Carga el sketch que pone INPUT_PULLUP en el 2 y enciende el 13 solo si la lectura es LOW.
  5. Sin tocar, el LED debe estar apagado. Si está encendido, el pulsador está siempre cerrado o las patas son las del mismo polo.
  6. Aprieta y mantén. El LED se queda encendido mientras el dedo sigue. Suelta y se apaga.
  7. No añadas una resistencia a 5 V por si acaso: con pull-up interno sobra, y dos pull-up no enseñan nada.

Práctica en la página

Mantén el botón. El LED luce solo mientras está pulsado. Suelto, apagado. La simulación arranca encendida.

Ejemplos resueltos

Encendido al revés

El LED está encendido con el dedo fuera y se apaga al pulsar. El if compara con HIGH, o el cable del pulsador fue a 5 V en vez de a GND.

En este curso el reposo es HIGH y el dedo es LOW. Se corrige la comparación o el cable, no las dos cosas a la vez, para saber cuál era.

Parpadea solo en la mesa

El pin 2 está en INPUT, sin pull-up, y el pulsador solo va a GND a ratos. Al soltar, el hilo hace de antena. El LED titila.

Se vuelve a pinMode(2, INPUT_PULLUP). El reposo queda firme a HIGH y el titileo cesa sin cambiar de sitio el LED.

Soldadura y seguridad

Un pulsador de protoboard no se suelda. Si pasas el mismo circuito a una placa, suelda los dos hilos del pulsador y deja la resistencia de pull-up solo si ya no usas la interna. No sueldes con la placa enchufada.

La punta caliente no se apoya en el cable USB. Dos segundos en el pad, estaño que moje, y fuera. Humo hacia la ventana, no hacia la cara.

En la mesa

Monta el pulsador y, antes de cargar, empuja el botón con la placa apagada y nota el clic. Sin clic, esas patas no cierran: estás en el par equivocado. Gira un cuarto de vuelta el componente y prueba otra vez. Este gesto ahorra el diagnóstico fantasma de entradas flotantes que en realidad son un pulsador siempre abierto.

Carga. Tres pruebas, en este orden, diciéndolas: suelto y LED apagado; apretado y LED encendido; suelto otra vez y LED apagado. Si la primera ya falla, no hagas la segunda veinte veces. O el if está al revés, o el cable que crees GND es una fila vacía, o el pulsador está siempre cerrado. Una causa, se corrige, se repite la terna.

Deja el dedo quieto un segundo en el aire, sin tocar el pin, y mira que el LED no titile. Si titila, no hay pull-up. No es el fantasma de la casa. Es INPUT a secas o un cable de más a ninguna parte. Cuando esté quieto, la lección está hecha, aunque te parezca poca cosa.

Sketch

void setup() {
  pinMode(2, INPUT_PULLUP);
  pinMode(13, OUTPUT);
}

void loop() {
  if (digitalRead(2) == LOW) {
    digitalWrite(13, HIGH);
  } else {
    digitalWrite(13, LOW);
  }
}

Ejercicio

Cablea el pulsador entre pin 2 y GND. Sube el sketch. La luz del 13 debe seguir al dedo: apretado enciende, suelto apaga.

Autoevaluación

1. Con INPUT_PULLUP, ¿qué se lee cuando aprietas, si el botón va a GND?

2. ¿Por qué no dejamos el pin de entrada al aire?

3. En este sketch, ¿la luz se queda encendida al soltar?