Module-RF-ReceivM4-Arduino

De MCHobby - Wiki
Sauter à la navigation Sauter à la recherche


MCHobby investit du temps et de l'argent dans la réalisation de traduction et/ou documentation. C'est un travail long et fastidieux réalisé dans l'esprit Open-Source... donc gratuit et librement accessible.
SI vous aimez nos traductions et documentations ALORS aidez nous à en produire plus en achetant vos produits chez MCHobby.

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

Module-RF-ReceivM4-Arduino.jpg

Le code

Si vous vous penchez sur le code, vous noterez:

  1. Que le changement d'intervalle se fait par saut de 100ms (1/10 sec).
  2. 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.
  3. 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.