[Programmation] Arduino piloter Led avec reception Infrarouge.
Répondre à la discussion
Affichage des résultats 1 à 7 sur 7

Arduino piloter Led avec reception Infrarouge.



  1. #1
    lep.mickael

    Arduino piloter Led avec reception Infrarouge.


    ------

    Bonjour à tous.

    J'apprends l'électronique depuis peu de temps, j'avoue que c'est vraiment passionnant, plus j'avance est plus je me rend compte que j'ai encore beaucoup à apprendre, mes enfants me demandent si je peu créer un petit véhicule capable d'allumer des phares lorsque la nuit tombe, ça c'est enfantin, mais je bute lorsqu'il est nécessaire d'un Arduino, je n'y connais pas grand chose en programmation, alors je fais appel à vous.

    Mon but est pour le moment, en simplifié pour débuter : Faire en sorte qu'une led rouge s'allume lorsque j'appuis sur une touche d'un télécommande (dont j'ai déjà décodé les touches), une led verte si un autre bouton est actionné, sinon un led blanche.

    Ceci est donc un essais simplifié du projet final qui sera de faire avancer le petit véhicule en utilisant le L293D dont j'ai déjà appris le fonctionnement.

    Je vous met ici le code Arduino que j'ai utilisé et modifier à ma sauce, mais il y a forcément des erreurs et je bute dessus.

    Code:
    ==============================
    #include <IRremote.h>
    int RECV_PIN = 12; //defini la pin 12 pour la reception de la led infrarouge. 
    IRrecv irrecv(RECV_PIN);
    decode_results results;
    
    int ledrouge = 13;  // led rouge
    int ledverte = 11;  // led verte
    int ledblanche = 10;  // led blanche
    
    void setup()
    {
    Serial.begin(9600);
    irrecv.enableIRIn(); // demarre la reception
    }
    void loop() {
    if (irrecv.decode(&results)) {
      Serial.println(results.value, HEX);
      irrecv.resume(); // Recois la prochaine valeur
    }
    
      if else (results.value==FF18E7){ // lorsque le bouton correspondant au code FF18E7 est active
        digitalWrite(ledblanche, LOW);
        digitalWrite(ledrouge,HIGH);
        digitalWrite(ledverte, LOW);
    }
    
      if else (results.value==1BC0157B){ // lorsque le bouton correspondant au code 1BC0157B est active
        digitalWrite(ledblanche, LOW);
        digitalWrite(ledrouge,LOW);
        digitalWrite(ledverte, HIGH);
           
     }          
           else {
              digitalWrite(ledblanche, HIGH);  // Sinon allumer la led blanche
              digitalWrite(ledrouge,LOW);
              digitalWrite(ledverte, LOW);
    
    }
    =================================
    Merci beaucoup à tous ceux qui peuvent me faire avancer un peu.
    Bonne journée à vous.

    -----
    Dernière modification par Antoane ; 03/03/2017 à 13h16. Motif: Ajout balises code

  2. #2
    Teknic

    Re : Arduino piloter Led avec reception Infrarouge.

    Bonjour,

    quand tu lances la compilation du programme, l'environnement arduino t'indique en bas de fenêtre les lignes où ça bloque, c'est grâce à ces informations qu'on peut débuger.

  3. #3
    Teknic

    Re : Arduino piloter Led avec reception Infrarouge.

    Je ne connais pas ta bibliothèque mais en gros ça devrait donner ça:


    Code:
    #include <IRremote.h>
    int RECV_PIN = 12; //defini la pin 12 pour la reception de la led infrarouge.
    IRrecv irrecv(RECV_PIN);
    decode_results results;
    
    int ledrouge = 13;  // led rouge
    int ledverte = 11;  // led verte
    int ledblanche = 10;  // led blanche
    
    void setup()
    {
      Serial.begin(9600);
      irrecv.enableIRIn(); // demarre la reception
    }
    void loop() {
      if (irrecv.decode(&results)) {
        Serial.println(results.value, HEX);
        irrecv.resume(); // Recois la prochaine valeur
      }
    
      if (results.value == FF18E7) { // lorsque le bouton correspondant au code FF18E7 est active
        digitalWrite(ledblanche, LOW);
        digitalWrite(ledrouge, HIGH);
        digitalWrite(ledverte, LOW);
      }
    
      if (results.value == 1BC0157B) { // lorsque le bouton correspondant au code 1BC0157B est active
        digitalWrite(ledblanche, LOW);
        digitalWrite(ledrouge, LOW);
        digitalWrite(ledverte, HIGH);
    
      }
      else {
        digitalWrite(ledblanche, HIGH);  // Sinon allumer la led blanche
        digitalWrite(ledrouge, LOW);
        digitalWrite(ledverte, LOW);
    
      }
    }
    dernière minute: il te faut aussi faire la déclaration d'état des pins:

    void setup() {
    // initialize digital pin 13 as an output.
    pinMode(13, OUTPUT);
    }
    Dernière modification par Teknic ; 03/03/2017 à 21h26.

  4. #4
    lep.mickael

    Re : Arduino piloter Led avec reception Infrarouge.

    Citation Envoyé par Teknic Voir le message
    Bonjour,

    quand tu lances la compilation du programme, l'environnement arduino t'indique en bas de fenêtre les lignes où ça bloque, c'est grâce à ces informations qu'on peut débuger.

    Bonsoir et merci de m'avoir répondu, je viens d'essayer à l'instant et voici ce qui est écrit sur le message du bas suite à la vérification d'arduino :


    Code:
    _2017_Micka__IR.test:28: error: unable to find numeric literal operator 'operator"" BC0157B'
    
       if (results.value == 1BC0157B) { // lorsque le bouton correspondant au code 1BC0157B est active
    
                            ^
    
    exit status 1
    'FF18E7' was not declared in this scope


    Serait-il possible que je n'ai pas saisie le bon code pour les touches de la télécommande ?
    Dernière modification par lep.mickael ; 04/03/2017 à 23h12.

  5. A voir en vidéo sur Futura
  6. #5
    lep.mickael

    Re : Arduino piloter Led avec reception Infrarouge.

    Ça y est, j'ai trouvé, je vous met le code ici plus bas.

    Le but étant de piloter 4 moteurs (voiture ou robots) à partir d'une simple télécommande, ex : touche 2 pour avancer, touche 8 pour reculer, touche 4 pour la droite et touche 6 pour la gauche, j'ai mis aussi la touche 5 pour éteindre le tout avec un buzzer qui s'active seulement 0,5 sec.



    Code:
    #include <IRremote.h>
    
    const byte IR_RECV_PIN = 11;
    const byte A_D_avance = 1;      // A_D   = roue Avant Droite
    const byte A_D_recule = 2;
    const byte A_G_avance = 3;      // A_G   = roue Avant Gauche
    const byte A_G_recule = 4;
    const byte D_D_avance = 5;      // D_D   = roue Derriere Droite
    const byte D_D_recule = 6;
    const byte D_G_avance = 7;      // A_D   = roue Derriere Gauche
    const byte D_G_recule = 8;
    
    const byte Bip_recule = 13;     // Pin du buzzer pour reculer ou eteindre tout les moteur
    
    
    IRrecv irrecv(IR_RECV_PIN);
    decode_results results;
    
    void setup() {
      irrecv.enableIRIn();
    
      pinMode(A_D_avance, OUTPUT);
      pinMode(A_D_recule, OUTPUT);
      pinMode(A_G_avance, OUTPUT);
      pinMode(A_G_recule, OUTPUT);
      pinMode(D_D_avance, OUTPUT);
      pinMode(D_D_recule, OUTPUT);
      pinMode(D_G_avance, OUTPUT);
      pinMode(D_G_recule, OUTPUT);
    
      
      pinMode(Bip_recule, OUTPUT);   // la pin correspondant au buzzer est en sortie 5v 25mA consomation
    } 
    
    
    void loop () {
      if (irrecv.decode(&results)) {                
    
        if(results.value == 0xFF18E7) {            // Touche 2   pour AVANCER
          digitalWrite(A_D_avance, HIGH);
          digitalWrite(A_D_recule, LOW);
          digitalWrite(A_G_avance, HIGH);
          digitalWrite(A_G_recule, LOW);
          digitalWrite(D_D_avance, HIGH);          // Toutes les roues avec avance sont actives
          digitalWrite(D_D_recule, LOW);
          digitalWrite(D_G_avance, HIGH);
          digitalWrite(D_G_recule, LOW);
    
          digitalWrite(Bip_recule, LOW);
    
        }  else if (results.value == 0xFF4AB5) {   // Touche 8   pour RECULER
          digitalWrite(A_D_avance, LOW);
          digitalWrite(A_D_recule, HIGH);
          digitalWrite(A_G_avance, LOW);
          digitalWrite(A_G_recule, HIGH);
          digitalWrite(D_D_avance, LOW);
          digitalWrite(D_D_recule, HIGH);
          digitalWrite(D_G_avance, LOW);
          digitalWrite(D_G_recule, HIGH);
          
          digitalWrite(Bip_recule, HIGH);    // le buzzer est active pour reculer
    
    
          
    
        }  else if(results.value == 0xFF10EF) {     // Touche 4 pour la GAUCHE
          digitalWrite(A_D_avance, HIGH);
          digitalWrite(A_D_recule, LOW);
          digitalWrite(A_G_avance, LOW);
          digitalWrite(A_G_recule, HIGH);
          digitalWrite(D_D_avance, HIGH);
          digitalWrite(D_D_recule, LOW);
          digitalWrite(D_G_avance, LOW);
          digitalWrite(D_G_recule, HIGH);
          
          digitalWrite(Bip_recule, LOW);
    
    
          
    
        }  else if(results.value == 0xFF5AA5) {     // Touche 6 pour la DROITE
          digitalWrite(A_D_avance, LOW);
          digitalWrite(A_D_recule, HIGH);
          digitalWrite(A_G_avance, HIGH);
          digitalWrite(A_G_recule, LOW);
          digitalWrite(D_D_avance, LOW);
          digitalWrite(D_D_recule, HIGH);
          digitalWrite(D_G_avance, HIGH);
          digitalWrite(D_G_recule, LOW);
          
          digitalWrite(Bip_recule, LOW);
    
    
          
          
        }  else if(results.value == 0xFF38C7) {     // Touche 5  pour STOPER tout
          digitalWrite(A_D_avance, LOW);
          digitalWrite(A_D_recule, LOW);
          digitalWrite(A_G_avance, LOW);
          digitalWrite(A_G_recule, LOW);
          digitalWrite(D_D_avance, LOW);
          digitalWrite(D_D_recule, LOW);
          digitalWrite(D_G_avance, LOW);
          digitalWrite(D_G_recule, LOW);
    
          delay (500);
          digitalWrite(Bip_recule, HIGH);
          delay (200);
          digitalWrite(Bip_recule, LOW);
        }
    
        irrecv.resume();
      }
    }
    Voilà, si vous voulez des infos n'hésitez pas, j'ai galéré un peu pour faire ce truc alors autant que ça serve. (je ne viens pas souvent ici alors pardonnez moi si je ne répond pas aussitôt).

    Merci à ceux qui ont bien voulu m'aider.

  7. #6
    etpi7out

    Re : Arduino piloter Led avec reception Infrarouge.

    Bonjour,
    Pour alléger ton code, tu peux aussi créer une fonction, afin d'éviter les redites
    exemple :

    Code:
    void moteurs (int VADav,int VADre,int VAGav,int VAGre, int VDDav, int VDDre, int VDGav,int VDGre) {
          digitalWrite(A_D_avance, VADav);
          digitalWrite(A_D_recule, VADre);
          digitalWrite(A_G_avance, VAGav);
          digitalWrite(A_G_recule, VAGre);
          digitalWrite(D_D_avance, VDDav);          
          digitalWrite(D_D_recule, VDDre);
          digitalWrite(D_G_avance, VDGav);
          digitalWrite(D_G_recule, VDGre);
    }

    Puis dans ton loop, tu dupliques et tu adaptes à chaque touche:

    Code:
        if(results.value == 0xFF18E7) {            // Touche 2   pour AVANCER
          moteurs (1,0,1,0,1,0,1,0);               // Toutes les roues  avancent 
          digitalWrite(Bip_recule, LOW);
        }
    PS: code non testé
    Dernière modification par etpi7out ; 05/03/2017 à 08h56.

  8. #7
    lep.mickael

    Re : Arduino piloter Led avec reception Infrarouge.

    Voilà une fonction fort intéressante, je suis preneur, merci à toi.

Discussions similaires

  1. [Programmation] Piloter un moteur AC avec une arduino
    Par pierre57570 dans le forum Électronique
    Réponses: 12
    Dernier message: 25/03/2016, 10h27
  2. Réponses: 7
    Dernier message: 31/05/2015, 15h43
  3. Piloter un variateur avec une carte Arduino
    Par rogerlette dans le forum Électronique
    Réponses: 7
    Dernier message: 26/06/2014, 15h19
  4. Piloter matrice led avec trackpad via arduino
    Par Max_Pof dans le forum Électronique
    Réponses: 0
    Dernier message: 05/03/2013, 21h49
  5. Piloter une led Infrarouge avec un PIC
    Par crocu dans le forum Électronique
    Réponses: 21
    Dernier message: 16/10/2012, 12h48
Découvrez nos comparatifs produits sur l'informatique et les technologies.