Modifications

Sauter à la navigation Sauter à la recherche
5 070 octets ajoutés ,  8 février 2014 à 22:13
aucun résumé de modification
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]]
 +
 +
== 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}}
29 917

modifications

Menu de navigation