bouton-led.ino

Arduino Duemilanove — Board Fiche · File : bouton-led.ino · Language : Arduino · Use case : Allumer une LED quand un bouton est pressé, avec anti-rebond

A button wired to GND lights the LED while pressed. INPUT_PULLUP enables the internal resistor, and the 30 ms window filters the contact's mechanical bounce.

Hardware required

An Arduino Duemilanove (ATmega168 or 328P, 16 MHz, 5 V) with its mini-USB-B cable; the serial port appears once the FTDI driver is installed. 1 push button.

Wiring

One button leg on pin 2, the other to GND; LED (with 330 Ω resistor) on pin 13 if external.

How it works

A reading counts only after 30 ms of stability; pressing pulls the pin to ground (LOW with pull-up) and lights the LED. In the Arduino IDE, select « Arduino Duemilanove » (or « Diecimila » for very old boards) and the FTDI port, then Upload. The ATmega168 leaves only 14 KB for the sketch.

Going further

Turn it into a toggle by flipping a state on each edge, or wire a second button on pin 3.

bouton-led.ino

// Bouton sur la broche 2 (vers GND) + LED sur 13, anti-rebond logiciel.
const int BOUTON = 2;
const int LED = 13;
const unsigned long ANTI_REBOND = 30; // ms

bool dernier = HIGH, stable = HIGH;
unsigned long bord = 0;

void setup() {
  pinMode(BOUTON, INPUT_PULLUP); // resistance interne : rien d'externe
  pinMode(LED, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  bool lu = digitalRead(BOUTON);
  unsigned long t = millis();
  if (lu != dernier) bord = t;
  if (t - bord >= ANTI_REBOND && lu != stable) {
    stable = lu;
    digitalWrite(LED, stable == LOW ? HIGH : LOW);
    Serial.println(stable == LOW ? F("Appui") : F("Lache"));
  }
  dernier = lu;
}

← Back to the board