Ir al contenido

Pines digitales

Un pin digital solo maneja dos estados. La plataforma los nombra con dos constantes:

  • board.HIGH (vale 1): el pin está en voltaje alto (5 V o 3,3 V según la placa).
  • board.LOW (vale 0): el pin está en 0 V (masa/GND).

Usas estas constantes tanto para escribir un nivel como para comparar lo que lees. Escribir números crudos (1/0) también funciona, pero board.HIGH / board.LOW hacen el código legible.

board.pinMode(pin, modo) declara cómo se usará un pin:

  • pin: el número del pin (p. ej. 13).
  • modo: uno de board.MODES. Para pines digitales hay tres:
ModoDirecciónPara qué sirve
board.MODES.OUTPUTsalidael pin manda señal (lo escribes con digitalWrite)
board.MODES.INPUTentradael pin escucha (lo lees con digitalRead); necesita resistencia externa
board.MODES.PULLUPentradaigual que INPUT, pero activa la resistencia pull-up interna (ver abajo)

Pone un pin de salida en alto o bajo.

  • pin: el número del pin.
  • valor: board.HIGH (lo pone a voltaje alto) o board.LOW (lo pone a 0 V).
  • encolar (opcional, booleano): por defecto cada escritura se envía al instante. Si pasas true, el cambio se guarda localmente pero no se envía hasta que llames a board.flushDigitalPorts().
board.pinMode(13, board.MODES.OUTPUT);
board.digitalWrite(13, board.HIGH); // encender
board.digitalWrite(13, board.LOW); // apagar

Un puerto es un grupo de 8 pines que la placa maneja juntos en un mismo byte. Cuando cambias varios pines del mismo puerto, encolarlos los envía en un solo mensaje (cambian prácticamente a la vez) en lugar de uno por uno:

board.digitalWrite(2, board.HIGH, true); // se guarda, no se envía
board.digitalWrite(3, board.LOW, true); // se guarda, no se envía
board.digitalWrite(4, board.HIGH, true); // se guarda, no se envía
board.flushDigitalPorts(); // ahora se envían juntos

Activa el reporte del pin y llama a tu callback cada vez que el valor cambia. El callback recibe el valor leído (0 o 1, es decir board.LOW o board.HIGH).

board.pinMode(2, board.MODES.INPUT);
board.digitalRead(2, (valor) => {
varG.boton = valor === board.HIGH;
});

Qué hace ese código, línea por línea:

  • valor es el número que reportó el pin: 1 (alto) o 0 (bajo).
  • valor === board.HIGH compara ese número con HIGH (1). El resultado es un booleano: true si el pin está en alto, false si está en bajo.
  • Guardamos ese booleano limpio en varG.boton, en vez del número crudo. Así un artefacto que lea varG.boton recibe true/false directamente.

Si prefieres guardar el número tal cual: varG.boton = valor;.

Un pin de entrada al que no llega una señal firme queda “flotando”: capta ruido eléctrico y lee a veces HIGH y a veces LOW, al azar. Para evitarlo se usa una resistencia pull-up, que mantiene el pin suavemente en HIGH mientras nadie haga otra cosa.

board.MODES.PULLUP activa la pull-up interna del chip, así no necesitas una resistencia externa. La consecuencia es que la lógica se invierte: en reposo el pin lee HIGH, y al pulsar un botón que conecta el pin a GND, lee LOW.

board.pinMode(4, board.MODES.PULLUP);
board.digitalRead(4, (valor) => {
// Con pull-up, LOW significa "pulsado": el botón conectó el pin a GND.
varG.pulsado = valor === board.LOW;
});

Aquí valor === board.LOW da true cuando el pin está en bajo, es decir, cuando el botón está pulsado.

Controlar el reporte: reportDigitalPin(pin, activar)

Sección titulada «Controlar el reporte: reportDigitalPin(pin, activar)»

Igual que en analógico, un pin de entrada que reportas genera tráfico con la placa. Puedes apagarlo o reactivarlo sin perder la configuración:

  • board.reportDigitalPin(2, 0)deja de reportar cambios del pin 2.
  • board.reportDigitalPin(2, 1)reanuda el reporte.

(digitalRead ya enciende el reporte por dentro; esto es para apagarlo o volverlo a encender a mano.)

  • Olvidar pinMode antes de leer o escribir el pin.
  • Entrada flotante: un INPUT sin resistencia da lecturas erráticas. Usa PULLUP (o una resistencia externa).
  • Confundir el nivel eléctrico con el significado: con pull-up, LOW = pulsado.