Ligne 3 : |
Ligne 3 : |
| == Introduction == | | == Introduction == |
| | | |
− | {{traduction}} | + | {{bloc-etroit|text=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 == | | == Montage == |
| | | |
| [[Fichier:Module-RF-ReceivM4-Arduino.jpg|640px]] | | [[Fichier:Module-RF-ReceivM4-Arduino.jpg|640px]] |
| + | |
| + | == Le 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.<br />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 :-) |
| + | |
| + | <nowiki>// 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 |
| + | |
| + | } |
| + | </nowiki> |
| | | |
| {{Module-RF-ReceivM4-TRAILER}} | | {{Module-RF-ReceivM4-TRAILER}} |