Learning   Examples | Foundations | Hacking | Links

Ejemplos > E/S Digital

Switch (Conmutador)

Este ejemplo muestra el uso de un pulsador como conmutador: cada vez que se presiona el pulsador, el LED (o lo que sea) se enciende (si está apagado)o se apaga (si está encendido. Además se usa en el ejemplo una rutina antiberrote sin la cual al pulsar el botón una vez haría como si se hubiese pulsado varias veces.

Circuitp

Un pulsador en el pin 2 y un LED conectado en el pin 13.

Código

/* switch
 * 
 * Cada vez que el pin de entrada pasa de nivel bajo a nivel alto (por ejemplo cuando se pulsa el botón),
 *el pin de salida cambia su estado de alto a bajo o de bajo a alto. Existe
 * un retraso entre cambios para poder implementar la rutina antirebotes (puede usarse para ignorar ruido) 
 *   
 *
 * David A. Mellis
 * 21 November 2006
 */

int inPin = 2;         // el número del pin de entrada
int outPin = 13;       // el número del pin de salida

int state = HIGH;      // el estado actual del pin de salida
int reading;           // el estado actual del la última lectura del pin de entrada
int previous = LOW;    // el estado previo a la lectura actual del pin de entrada

// las siguientes variables se han declarado como long por el tiempo está medido en milisegundos y por tanto será
// rápidamente un número más grande de lo que un int (entero) puede almacenar.
long time = 0;         // el tiempo desde la última vez que se cambio de estado del pin de salida
long debounce = 200;   // tiempo de antirebote, debe aumentarse si al pulsar, cambia de estados más de una vez

void setup()
{
  pinMode(inPin, INPUT);
  pinMode(outPin, OUTPUT);
}

void loop()
{
  reading = digitalRead(inPin);

  // Si el pin de entrada a pasado de nivel bajo y ha pasado suficiente tiempo desde 
  // el último cambio para ignorar ruido, cambiamos el estado de la salida
  // y almacenamos el tiempo
  if (reading == HIGH && previous == LOW && millis() - time > debounce) {
    if (state == HIGH)
      state = LOW;
    else
      state = HIGH;

    time = millis();    
  }

  digitalWrite(outPin, state);

  previous = reading;
}

Share