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+ |
Vous pouvez également les acheter séparément via les liens ci-dessous.
INTRODUCTION DES COMPOSANTS |
LIEN D’ACHAT |
|---|---|
- |
|
- |
Schéma
Câblage
Code
Note
Ouvrez le fichier
5.3.state_change_detection.inosous le chemin3in1-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 ?
Créez des variables et définissez les broches pour le moteur et le bouton.
... int detectionState = 0; int buttonState = 0; int lastButtonState = 0;
detectionStateest 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.buttonStateetlastButtonStatesont 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é.
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); }
Commencez par lire l’état du bouton, et si le bouton est pressé, la variable
detectionStatechangera sa valeur de 0 à 1 ou de 1 à 0. LorsquedetectionStateest à 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
buttonStateetlastButtonStatene 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 variablelastButtonState.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
detectionStateest 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
detectionStateest à 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); }