Note

Bonjour et bienvenue dans la Communauté Facebook des passionnés de Raspberry Pi, Arduino et ESP32 de SunFounder ! Plongez plus profondément dans l’univers des Raspberry Pi, Arduino et ESP32 avec d’autres passionnés.

Pourquoi rejoindre ?

  • Support d’experts : Résolvez les problèmes après-vente et les défis techniques avec l’aide de notre communauté et de notre équipe.

  • Apprendre et partager : Échangez des astuces et des tutoriels pour améliorer vos compétences.

  • Aperçus exclusifs : Accédez en avant-première aux annonces de nouveaux produits et aux aperçus.

  • Réductions spéciales : Profitez de réductions exclusives sur nos produits les plus récents.

  • Promotions festives et cadeaux : Participez à des cadeaux et des promotions de vacances.

👉 Prêt à explorer et à créer avec nous ? Cliquez [ ici ] et rejoignez-nous aujourd’hui !

5.3 Détection de Changement d’État

Lorsque le bouton contrôle d’autres dispositifs, il peut non seulement fonctionner lorsqu’il est pressé, mais aussi s’arrêter lorsqu’il est relâché. Il est également possible de basculer l’état de fonctionnement à chaque fois que le bouton est pressé.

Pour réaliser cet effet, vous devez savoir comment basculer l’état de fonctionnement entre éteint et allumé lorsque le bouton est pressé, C’est la « détection de changement d’état ».

Dans ce projet, nous utiliserons le bouton pour contrôler le moteur.

Composants requis

Pour ce projet, nous avons besoin des composants suivants.

Il est certainement pratique d’acheter un kit complet, voici le lien :

Nom

ÉLÉMENTS DE CE KIT

LIEN

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

Vous pouvez également les acheter séparément via les liens ci-dessous.

INTRODUCTION DES COMPOSANTS

LIEN D’ACHAT

Carte SunFounder R3

ACHETER

Plaque d’essai

ACHETER

Fils de Cavalier

ACHETER

Résistance

ACHETER

Bouton

ACHETER

Moteur TT

-

Module de Contrôle Moteur L9110

-

Schéma

../_images/circuit_8.3_statechange.png

Câblage

../_images/5.3_state_change_l9110_bb.png

Code

Note

  • Ouvrez le fichier 5.3.state_change_detection.ino sous le chemin 3in1-kit\basic_project\5.3.state_change_detection.

  • Ou copiez ce code dans Arduino IDE.

  • Ou téléchargez le code via l”Arduino Web Editor.

Après le téléchargement réussi du code, vous appuyez sur le bouton et le moteur tourne ; jusqu’à ce que vous appuyiez à nouveau sur le bouton, le moteur s’arrête.

Comment ça fonctionne ?

  1. Créez des variables et définissez les broches pour le moteur et le bouton.

    ...
    int detectionState = 0;
    int buttonState = 0;
    int lastButtonState = 0;
    
    • detectionState est un indicateur dont la valeur change à chaque fois que le bouton est pressé, par exemple, 0 cette fois, 1 la prochaine, et ainsi de suite alternativement.

    • buttonState et lastButtonState sont utilisés pour enregistrer l’état du bouton cette fois et la dernière fois, pour comparer si le bouton a été pressé ou relâché.

  2. Initialisez chaque broche et réglez le taux de baud du moniteur série.

    void setup() {
        pinMode(buttonPin, INPUT);
        Serial.begin(9600);
        pinMode(B_1A, OUTPUT);
        pinMode(B_1B, OUTPUT);
    }
    
  3. Commencez par lire l’état du bouton, et si le bouton est pressé, la variable detectionState changera sa valeur de 0 à 1 ou de 1 à 0. Lorsque detectionState est à 1, le moteur sera activé. Cela a pour effet que lorsque le bouton est pressé cette fois-ci, le moteur tourne, la prochaine fois que le bouton est pressé, le moteur s’arrête, et ainsi de suite alternativement.

    void loop() {
        // Toggle the detectionState each time the button is pressed
        buttonState = digitalRead(buttonPin);
        if (buttonState != lastButtonState) {
            if (buttonState == HIGH) {
            detectionState=(detectionState+1)%2;
            Serial.print("The detection state is: ");
            Serial.println(detectionState);
            }
            delay(50);
        }
        lastButtonState = buttonState;
    
        // According to the detectionState, start the motor
        if(detectionState==1){
            digitalWrite(B_1A,HIGH);
            digitalWrite(B_1B,LOW);
        }else{
            digitalWrite(B_1A,LOW);
            digitalWrite(B_1B,LOW);
        }
    }
    

    Le flux de travail complet est le suivant.

    • Lire la valeur du bouton.

    buttonState = digitalRead(buttonPin);
    
    • Si buttonState et lastButtonState ne sont pas égaux, cela signifie que l’état du bouton a changé, continuez avec le jugement suivant, et stockez l’état du bouton à ce moment dans la variable lastButtonState. delay(50) est utilisé pour éliminer le jitter.

    if (buttonState != lastButtonState) {
    ...
        delay(50);
    }
    lastButtonState = buttonState;
    
    • Lorsque le bouton est pressé, sa valeur est HIGH. Ici, lorsque le bouton est pressé, la valeur de la variable detectionState est modifiée, par exemple, de 0 à 1 après une opération.

    if (buttonState == HIGH) {
        detectionState=(detectionState+1)%2;
        Serial.print("The detection state is: ");
        Serial.println(detectionState);
    }
    
    • Lorsque la variable detectionState est à 1, faire tourner le moteur, sinon l’arrêter.

    if(detectionState==1){
        digitalWrite(B_1A,HIGH);
        digitalWrite(B_1B,LOW);
    }else{
        digitalWrite(B_1A,LOW);
        digitalWrite(B_1B,LOW);
    }