Auteur/autrice : Nathan

  • La Guerre Des Boutons Poussoirs

    Schéma

    Code du circuit :

    int buzzer = 8;
    
    int boutonPlus = A0;
    int boutonMoins = A1;
    int boutonAlarme = A2;
    
    int frequence = 400;
    
    bool ancienEtatPlus = LOW;
    bool ancienEtatMoins = LOW;
    
    void setup()
    {
      pinMode(buzzer, OUTPUT);
    
      pinMode(boutonPlus, INPUT);
      pinMode(boutonMoins, INPUT);
      pinMode(boutonAlarme, INPUT);
    
      pinMode(LED_BUILTIN, OUTPUT);
    }
    
    void loop()
    {
      bool etatPlus = digitalRead(boutonPlus);
      bool etatMoins = digitalRead(boutonMoins);
      bool etatAlarme = digitalRead(boutonAlarme);
    
      // ===== BOUTON 1 : PLUS AIGU =====
      if (etatPlus == HIGH && ancienEtatPlus == LOW)
      {
        frequence += 100;
    
        if (frequence > 2000)
        {
          frequence = 2000;
        }
    
        tone(buzzer, frequence, 50);
    
        digitalWrite(LED_BUILTIN, HIGH);
        delay(5);
        digitalWrite(LED_BUILTIN, LOW);
      }
    
      // ===== BOUTON 2 : PLUS GRAVE =====
      if (etatMoins == HIGH && ancienEtatMoins == LOW)
      {
        frequence -= 100;
    
        if (frequence < 100)
        {
          frequence = 100;
        }
    
        tone(buzzer, frequence, 50);
    
        digitalWrite(LED_BUILTIN, HIGH);
        delay(5);
        digitalWrite(LED_BUILTIN, LOW);
      }
    
      // ===== BOUTON 3 : ALARME NUCLEAIRE =====
      if (etatAlarme == HIGH)
      {
        // montée + descente ultra rapide
        for (int i = 0; i < 3; i++)
        {
          // montée
          for (int f = 600; f <= 1800; f += 25)
          {
            tone(buzzer, f);
            digitalWrite(LED_BUILTIN, HIGH);
            delay(1);
    
            if (digitalRead(boutonAlarme) == LOW)
            {
              noTone(buzzer);
              digitalWrite(LED_BUILTIN, LOW);
              return;
            }
          }
    
          // descente
          for (int f = 1800; f >= 600; f -= 25)
          {
            tone(buzzer, f);
            digitalWrite(LED_BUILTIN, LOW);
            delay(1);
    
            if (digitalRead(boutonAlarme) == LOW)
            {
              noTone(buzzer);
              digitalWrite(LED_BUILTIN, LOW);
              return;
            }
          }
        }
      }
      else
      {
        noTone(buzzer);
        digitalWrite(LED_BUILTIN, LOW);
      }
    
      ancienEtatPlus = etatPlus;
      ancienEtatMoins = etatMoins;
    
      delay(1);
    }

    Explication du programme Arduino (ligne par ligne)


    
    
    
    
    
    int buzzer = 8;

    ➡️ Définit la broche 8 de l’Arduino comme sortie pour le buzzer (haut-parleur).


    
    
    
    
    
    int boutonPlus = A0;

    ➡️ Le bouton connecté à A0 sert à augmenter la fréquence du son (son plus aigu).


    
    
    
    
    
    int boutonMoins = A1;

    ➡️ Le bouton connecté à A1 sert à diminuer la fréquence du son (son plus grave).


    
    
    
    
    
    int boutonAlarme = A2;

    ➡️ Le bouton connecté à A2 sert à activer ou désactiver l’alarme.


    
    
    
    
    
    int frequence = 400;

    ➡️ Définit la fréquence de départ du son (400 Hz).


    
    
    
    
    
    bool ancienPlus = HIGH;

    ➡️ Stocke l’ancien état du bouton plus pour détecter un nouvel appui.


    
    
    
    
    
    bool ancienMoins = HIGH;

    ➡️ Stocke l’ancien état du bouton moins pour détecter un nouvel appui.


    
    
    
    
    
    bool alarmeActive = false;

    ➡️ Variable qui indique si l’alarme est activée ou non.


    ⚙️ setup()

    
    
    
    
    
    void setup()

    ➡️ Fonction exécutée une seule fois au démarrage de l’Arduino.


    
    
    
    
    
    pinMode(buzzer, OUTPUT);

    ➡️ Configure le buzzer en sortie pour produire du son.


    
    
    
    
    
    pinMode(boutonPlus, INPUT_PULLUP);

    ➡️ Configure le bouton A0 en entrée avec résistance interne (INPUT_PULLUP).


    
    
    
    
    
    pinMode(boutonMoins, INPUT_PULLUP);

    ➡️ Configure le bouton A1 en entrée avec résistance interne.


    
    
    
    
    
    pinMode(boutonAlarme, INPUT_PULLUP);

    ➡️ Configure le bouton A2 en entrée avec résistance interne.


    
    
    
    
    
    pinMode(LED_BUILTIN, OUTPUT);

    ➡️ Configure la LED intégrée de l’Arduino comme sortie.


    🔁 loop()

    
    
    
    
    
    void loop()

    ➡️ Fonction qui s’exécute en boucle infinie.


    
    
    
    
    
    bool plus = digitalRead(boutonPlus);

    ➡️ Lit l’état actuel du bouton plus (appuyé ou non).


    
    
    
    
    
    bool moins = digitalRead(boutonMoins);

    ➡️ Lit l’état actuel du bouton moins.


    
    
    
    
    
    bool alarme = digitalRead(boutonAlarme);

    ➡️ Lit l’état du bouton alarme.


    🚨 Gestion de l’alarme

    
    
    
    
    
    if (alarme == LOW && alarmeActive == false)

    ➡️ Si on appuie sur le bouton alarme et qu’elle est désactivée.


    
    
    
    
    
    alarmeActive = true;

    ➡️ Active l’alarme.


    
    
    
    
    
    else if (alarme == LOW && alarmeActive == true)

    ➡️ Si on réappuie sur le bouton alarme.


    
    
    
    
    
    alarmeActive = false;

    ➡️ Désactive l’alarme.


    🚨 Mode alarme

    
    
    
    
    
    int f = 600 + (millis() % 1200);

    ➡️ Crée une variation automatique de fréquence pour faire une sirène.


    
    
    
    
    
    tone(buzzer, f);

    ➡️ Produit le son du buzzer avec la fréquence calculée.


    
    
    
    
    
    digitalWrite(LED_BUILTIN, millis() % 100 < 50);

    ➡️ Fait clignoter la LED comme un gyrophare.


    🔼 Bouton plus (aigu)

    
    
    
    
    
    if (plus == LOW && ancienPlus == HIGH)

    ➡️ Détecte un nouvel appui sur le bouton A0.


    
    
    
    
    
    frequence += 100;

    ➡️ Augmente la fréquence (son plus aigu).


    
    
    
    
    
    tone(buzzer, frequence);

    ➡️ Joue le son avec la nouvelle fréquence.


    🔽 Bouton moins (grave)

    
    
    
    
    
    if (moins == LOW && ancienMoins == HIGH)

    ➡️ Détecte un nouvel appui sur le bouton A1.


    
    
    
    
    
    frequence -= 100;

    ➡️ Diminue la fréquence (son plus grave).


    
    
    
    
    
    tone(buzzer, frequence);

    ➡️ Joue le son modifié.


    🔊 Maintien du son

    
    
    
    
    
    tone(buzzer, frequence);

    ➡️ Maintient le son actif en continu même sans appuyer.


    🔁 Mise à jour des états

    
    
    
    
    
    ancienPlus = plus;

    ➡️ Sauvegarde l’état actuel du bouton plus.


    
    
    
    
    
    ancienMoins = moins;

    ➡️ Sauvegarde l’état du bouton moins.


    ⏱️ Pause

    
    
    
    
    
    delay(10);

    ➡️ Petite pause pour stabiliser le programme.