Module-RF-ReceivM4-Arduino
Introduction
L'utilisation d'un module RF avec un microcontrôleur permet de contrôler les fonctionnalités de votre projets à distance.
Entre le pilotage d'un petit robot, changement de mode d'un projet lumineux à base de NéoPixel, activation/désactivation de fonctionnalité, un module RF (momentané) peut se révélé être un outil très pratique.
Voici donc comment brancher et utiliser un module RF avec un Arduino.
Exemple
L'exemple suivant est un dérivé de l'exemple BlinkWithoutDelay.
Dans son état d'origine, ce programme fait clignoter la LED sur la broche 13 à l'intervalle régulier de 1 seconde (1000 millisecondes).
Nous avons modifié le programme pour modifier le temps à l'aide de la télécommande et un module RF.
Ce projet utilise les boutons C et D de la télécommande pour diminuer ou augmenter l'intervalle de clignotement de la LED.
Montage
Code
Si vous vous penchez sur le code, vous noterez:
- Que le changement d'intervalle se fait par saut de 100ms (1/10 sec).
- Que le changement d'intervalle ne peut intervenir qu'une fois toutes les 200 ms.
Un Arduino fonctionne tellement vite que cette limitation est absolument nécessaire. - Que l'état des broches D0 et D1 du module RF (entrée digitale 4 et 5) sont déparasité de façon logiciel (en relisant l'entrée après 10 millisecondes).
Bonne lecture :-)
// Code de test du module RF momentané vendu par MCHobby // // Augmente ou diminue la fréquence de clignotement de la LED sur la broche 13. // En fonction de la pression du bouton C ou D de la télécommande Radio Fréquence // // http://shop.mchobby.be/product.php?id_product=393 Récepteur RF // http://shop.mchobby.be/product.php?id_product=392 Emetteur RF // // Soutenez le mouvement Open-Source, Open-Harware et Open-Translate en // achetant votre exemplaire sur le WebShop de MCHobby (www.mchobby.be) // // Basé sur l'exemple BlinkWithoutDelay de l'environnement Arduino // http://www.arduino.cc/en/Tutorial/BlinkWithoutDelay // // Utilisation de constante pour définir les numéro de broche const int ledPin = 13; // LED sur la broche 13 const int decreasePin = 4; // RF-broche D0 = Bouton D const int increasePin = 5; // RF-broche D1 = Bouton C // Variables qui vont changer: int ledState = LOW; // Etat de la LED long previousMillis = 0; // Stocke le dernier moment où la LED à été // mise à jour long previousBtnMillis = 0; // Stocke le dernier moment où un bouton à été // pressé sur la télécommande (et info recue sur le // récepteur RF) int btnState = LOW; // Etat de lecture d'un bouton // La variable suivante est de type long parce que le temps ce mesure en milisecondes, // et que cette valeur peut rapidement devenir très grande. long interval = 1000; // intervale de clignotement en (millisecondes) void setup() { // Initialiser les broches en sortie pinMode(ledPin, OUTPUT); // Initialiser les broches en entrée pinMode(decreasePin, INPUT ); pinMode(increasePin, INPUT ); } void loop() { // Prendre une capture du temps écoulé depuis la mise sous tension unsigned long currentMillis = millis(); // Si la dernière fois que la LED a clignoté > que l'intervalle if(currentMillis - previousMillis > interval) { // Sauver le temps currentMillis... qui sera connu comme // le dernier moment où la LED aura changé d'état previousMillis = currentMillis; // Si la LED est éteinte alors l'allumer (et vice-versa) if (ledState == LOW) ledState = HIGH; else ledState = LOW; // Assigner le nouvel état à la LED (en fonction de la variable ledState) digitalWrite(ledPin, ledState); } // Ne diminuer ou augmenter qu'une fois toutes les 200ms // Le microcrontroleur turbine à 16Mhz... si on ne fait pas attention // interval va passer de 0 à la valeur maximale en une fraction de seconde!!! if( currentMillis - previousBtnMillis > 200 ){ previousBtnMillis = currentMillis; // Tester la broche qui permet de diminuer le temps btnState = digitalRead( decreasePin ); if( btnState = HIGH ) { // Faire un déparasitage logiciel delay( 10 ); if( digitalRead( decreasePin ) == btnState ){ interval = interval - 100; // raccourcir l'interval de 1/5 sec } // éviter un intervalle < 100ms if( interval < 100 ){ interval = 100; } } // Tester la broche qui permet de d'augmenter le temps btnState = digitalRead( increasePin ); if( btnState = HIGH ) { // Faire un déparasitage logiciel delay( 10 ); if( digitalRead( increasePin ) == btnState ){ interval = interval + 200; // raccourcir l'interval de 1/5 sec } // éviter un intervalle > 5 sec if( interval > 5000 ) { interval = 5000; } } } // eof CurrentMillis - previousBrnMillis }
Documentation crée par Meurisse D. pour MCHobby.be
Toute référence, mention ou extrait de cette traduction doit être explicitement accompagné du texte suivant : « Traduction par MCHobby (www.MCHobby.be) - Vente de kit et composants » avec un lien vers la source (donc cette page) et ce quelque soit le média utilisé.
L'utilisation commercial de la traduction (texte) et/ou réalisation, même partielle, pourrait être soumis à redevance. Dans tous les cas de figures, vous devez également obtenir l'accord du(des) détenteur initial des droits. Celui de MC Hobby s'arrêtant au travail de traduction proprement dit.