Edit in JSFiddle

/* sketch récupéré sur le magazine hackable N°1
Ardu-sonnette p 68
"Ardu-sonnette intelligente : à chaque fois que quelqu'un sonne à la la porte, l'arduino l'enregistre en mémoire et le signale en faisant clignoter une led...[]
Si quelqu'un sonne, un délai configurable devra s'écouler entre deux coups de sonnete afin que le montage considère qu'il s'agit d'une nouvelle visite....[]
[] Une simple pression sur un bouton et la led témoion clignotera autant de fois qu'il y aura eu de visiteurs en notre absence"

Matériel nécessaire :
- 1 carte arduino
- 1 platine à essai et des cordons de connexion
- Une led verte et une résistance de 330 ohms (dorée, marron, orange, orange)
- Une led rouge et une résistance de 330 ohms (dorée, marron, orange, orange)
- Deux boutons pressoir et deux résistance de 10 KOhms (marron, noir, orange, doré)
- Un buzzer qui fera office de signalisation

*/

int led = 4; // led rouge connectée à la broche 4 par l'intermédiaire d'une résistance de 330 Ohms
// témoin lumineux indiquant qu'il s'est passé quelque chose et que notre intervention est nécessaire
int buzzer = 9; // buzzer piezoélectrique branché sur la broche 9 & à la masse
int btsonnette = 8; // 1er bouton pressoir branché à la broche 8 + résistance de 10 KOhms connectée entre la masse et l'entrée de l'Arduino
// l'Arduino lit donc par défaut l'entrée comme étant au niveau bas (0, la masse)
// lorsqu'on appuie sur le bouton, on fait une liaison entre l'alimentation et l'entrée (du coup elle passe en niveau haut)
int btok = 7; // relié à la broche 7 + résistance de 10 KOhms
// lorsqu'un visiteur appuie, l'arduino c'est qu'il doit sonner et gérer l'évènement

int active = 0;
unsigned long delai = 3000; // définition d'une variable délai contenant le délai minimum entre 2 coups de sonnettes à 300000 millisecondes, soit 5 minutes
unsigned long previousMillis = 0;

void sonne() {
  tone(buzzer,611); // et je génère un son
  delay(150);
  // 411 hertz générés pendant 150 millisecondes
  tone(buzzer,411);
  delay(150);
   // 611 hertz générés pendant 150 millisecondes
  noTone(buzzer); // et je coupe le son... j'adoooorreeeeeeeeeeeee
  // et je remets le son....
}
void setup() {
  pinMode(led, OUTPUT); 
  //indique que la broche de la led est une sortie
  pinMode(btsonnette, INPUT);
  pinMode(btok, INPUT);
  //indique la que les broches btsonnette et btok sont des entrées
}

void loop() {
  if(digitalRead(btsonnette)) { // si quelqu'un sonne
    unsigned long currentMillis = millis();
    if(((unsigned long)(currentMillis - previousMillis) >= delai) | !active) {
      active++;
    }
    previousMillis = currentMillis;
    sonne();
  }
  if(digitalRead(btok)) {
    digitalWrite(led, LOW);
    delay(1000);
    for(int i=0; i < active; i++) {
      digitalWrite(led, HIGH);
      delay(350);
      digitalWrite(led, LOW);
      delay(350);
    }
    active=0;
  }
 if(active)
    digitalWrite(led, HIGH);
}