[Programmation] arduino et telecommande
Répondre à la discussion
Affichage des résultats 1 à 3 sur 3

arduino et telecommande



  1. #1
    invite55ce3d57

    arduino et telecommande


    ------

    Bonjour à tous,

    Depuis un moment je cherche a maitriser une télécommande et ma 2560.
    J'ai conçu, en modélisme ferroviaire ,un pont transbordeur de douze positions commandé par douze boutons poussoirs.(Deux moteurs, dans l'axe desquels est fixé une tige filetée M8(1m) tournent dans deux écrous fixé de part et d'autre du chariot transbordeur).
    L'idée m'est venue de commander les moteurs avec une télécommande. J'utilise les touches codées en 12 bits (le pavé numérique et quelques touches).
    Comment fait-on les nombres, 10,11,...? et comment gère t-on le codage 32 bits ? Jamais deux fois le même code(inconnu) avec IRrecvDump.

    La commande des moteurs ( ITC-CNC-1) via un shield (SKURI0023) est programmée avec la commande (Moteur.step( - pas); ) le fonctionnement est satisfaisant mais je sais
    que ce n'est pas la bonne méthode. Dans la doc du shield il y a un bout de programme de référence.
    Je n'arrive pas a m'en servir ?

    Merci d'avance.

    -----

  2. #2
    jiherve

    Re : arduino et telecommande

    Bonsoir,
    c'est nébuleux tout çà !
    donc la télécommande est elle une télécommande IR ?
    si oui as tu une connaissance du protocole utilisé ?
    si non possèdes tu un oscilloscope?
    Quel niveau en programmation ?
    JR
    l'électronique c'est pas du vaudou!

  3. #3
    invite55ce3d57

    Re : arduino et telecommande

    Bonjour jiherve,

    C'est vrai mon message n'est pas très clair.
    En bref, j'aurais aimé me servir d'une télécommande IR récente pour actionner deux moteurs pap ( ITC-CNC-1) via un shield (SKURI0023) et ma carte arduino 2560.(Les moteurs font identiquement le même chose).
    Le programme arduino IRrecvDump, par exemple pour la touche un(1) du pavé numérique de la télécommande de ma TV récente, me donne une série de nombre qui ne sont JAMAIS les mêmes et le message "code inconnu" sauf si je me sers d'une vieille télécommande.
    Le pavé numérique et quatre autres touches sont codés en 12 bits protocole RC5, les autres touches engendrent le même message d'erreur que décrit plus haut (code inconnu et une série de nombres jamais les mêmes).

    En ce qui concerne mon niveau en programmation, je joins mon code, vous jugerez sur pièce.

    Je ne possède pas d oscilloscope.

    Salutations
    papou-jp

    Code:
    // PONT_TRANSBORDEUR_TELECOMMANDE
    //
    //   Ce petit programme permet a un chariot, portant une locomotive ou autre,
    //  de ce deplacer longitudinalement sur douze positions.( Douze boutons poussoirs
    //  determinent la position souhaitee. Deux boutons suplementaires  (13 et 14)
    //  assurent un eventuel reglage de la position du chariot.)
    //  Une telecommande RC5 belgacom codee sur 12 bits permet de remplacer les boutons poussoirs.
    //  Branchement de la led IR receptrice: Boule devant soit
    //                                Gauche = pin  arduino 22 ds notre cas
    //                                Milieu = GDN  Masse
    //                                Droite = Vcc 5 volt arduino
    //
    # include <IRremote.h>
    #include <EEPROM.h>        // Librairie Memoire non volatile.
    #include <Stepper.h>       //  Librairie Moteur
    const int NombrePas = 200; // Nombre de pas du moteur pour un tour
    const int Pas_1 = 4;       // declaration constante de broche
    const int Pas_2 = 5;       // imposées par le Shield SKU:DRI 0023
    const int Pas_3 = 6;       //
    const int Pas_4 = 7;       //
    int RECEPTION_PIN = 22;  // récepteur IR à la pin 22
    int PasRegulateur = 10;
    int PP = 1;                // Position Precedente
    int pas = 25;              // 6 tours sans vibrations ?!
    int PAS = 200;            // Determine par empirisme , distance entre deux garages 2000
    int Inter = 0;             //
    Stepper Moteur(NombrePas, Pas_1, Pas_3, Pas_2, Pas_4);
    IRrecv irreception(RECEPTION_PIN);
    decode_results resultat; //  Type de telecommande: RC5 ds ce cas
    /////////////////////////////////////////////////////////////
    void setup()   {
      irreception.enableIRIn();
      // initialise la vitesse de rotation du moteur PAP ??????
      Moteur.setSpeed(700);
      pinMode(Pas_1, OUTPUT); //met la broche en sortie
      pinMode(Pas_2, OUTPUT);
      pinMode(Pas_3, OUTPUT);
      pinMode(Pas_4, OUTPUT);
      // for (byte i = 22; i <= 48; i = i + 2) {    //Mise en possition haute  BPoussoir
      //   digitalWrite(i, HIGH);                   // PULL UP
      Serial.begin(9600);
    }//fin de setup
    ///////////////////////////////////////////////////////////////////////
    
    void loop() {
      if (irreception.decode(&resultat)) {
        travail(&resultat);
        irreception.resume(); // Recoit la valeur suivante
      }
    }//  Fin loop
    /////////////////////////////////////////////////////////////////////////
    void  travail(decode_results *resultat) {
      EEPROM.get(0, PP);
      Serial.println("Debut");
      Serial.println(PP);
      int count = resultat->rawlen;
      if (resultat->decode_type == RC5) {  //  RC5 > telecom. belgacom
        switch (resultat->value) {
          ///////////////////UN/////////////////////////
          case 0x1:
          case 0x801:
            Serial.println("Bouton 1");
            delay(200);//    Anti rebond
            if ( PP != 1 ) {      // Evite un deuxieme appui
              Inter =  PAS  * (PP - 1);
              for (int i = 1; i <=  Inter  ; i++) {
                Moteur.step( - pas);                // Tjs ds le meme sens
              }
              PP = 1;
            }
            Serial.println(PP);
            Serial.println("Fin 1");
            EEPROM.put(0, PP);
            break;
          ///////////////////DEUX//////////////////
          case 0x2:
          case 0x802:
            Serial.println("Bouton 2");
            delay(200);//    Anti rebond
            if ( PP != 2) {
              if (PP < 2 ) {
                Inter =  PAS * (2 - PP);
                for (int i = 1; i <=  Inter  ; i++) {  // Sens montant
                  Moteur.step( pas);
                }
              } else {
                Inter =  PAS  * (PP - 2);
                for (int i = 1; i <=  Inter  ; i++) {
                  Moteur.step( - pas);                  // sens dessendant
                }
              }
              PP = 2;                                   // Modifie la valeur de Position Precedente
            }
            EEPROM.put(0, PP);
            Serial.println(PP);
            Serial.println("Fin 2");
            break;
          ///////////////TROIS////////////////////////
          case 0x3:
          case 0x803:
            Serial.println("Bouton 3");
            delay(200);//    Anti rebond
            if ( PP != 3) {
              if (PP < 3 ) {
                Inter =  PAS * (3 - PP);
                for (int i = 1; i <= Inter ; i++) {
                  Moteur.step( pas);
                }
              } else {
                Inter =  PAS * ( PP - 3 );
                for (int i = 1; i <= Inter ; i++) {
                  Moteur.step( - pas);
                }
              }
              PP = 3;
            }
            EEPROM.put(0, PP);
            Serial.println(PP);
            Serial.println("Fin 3");
            break;
          ////////////////QUATRE/////////////////////////
          case 0x4:
          case 0x804:
            Serial.println("Bouton 4");
            delay(200);//    Anti rebond
            if ( PP != 4) {
              if (PP < 4 ) {
                Inter =  PAS * (4 - PP);
                for (int i = 1; i <= Inter ; i++) {
                  Moteur.step( pas);
                }
              } else {
                Inter =  PAS * ( PP - 4 );
                for (int i = 1; i <= Inter ; i++) {
                  Moteur.step( - pas);
                }
              }
              PP = 4;
            }
            EEPROM.put(0, PP);
            Serial.println(PP);
            Serial.println("Fin 4");
            break;
          ///////////CINQ//////
          case 0x5:
          case 0x805:
            Serial.println("Bouton 5");
            delay(200);//    Anti rebond
            if ( PP != 5) {
              if (PP < 5 ) {
                Inter =  PAS * (5 - PP);
                for (int i = 1; i <= Inter ; i++) {
                  Moteur.step( pas);
                }
              } else {
                Inter =  PAS * ( PP - 5 );
                for (int i = 1; i <= Inter ; i++) {
                  Moteur.step( - pas);
                }
              }
              PP = 5;
            }
            EEPROM.put(0, PP);
            Serial.println(PP);
            Serial.println("Fin 5");
            break;
          ///////////////SIX/////////////////////////
          case 0x6:
          case 0x806:
            Serial.println("Bouton 6");
            delay(200);//    Anti rebond
            if ( PP != 6) {
              if (PP < 6 ) {
                Inter =  PAS * (6 - PP);
                for (int i = 1; i <= Inter ; i++) {
                  Moteur.step( pas);
                }
              } else {
                Inter =  PAS * ( PP - 6 );
                for (int i = 1; i <= Inter ; i++) {
                  Moteur.step( - pas);
                }
              }
              PP = 6;
            }
            EEPROM.put(0, PP);
            Serial.println(PP);
            Serial.println("Fin 6");
            break;
          //////////////SEPT////////////////////
          case 0x7:
          case 0x807:
            Serial.println("Bouton 7");
            delay(200);//    Anti rebond
            if ( PP != 7) {
              if (PP < 7 ) {
                Inter =  PAS * (7 - PP);
                for (int i = 1; i <= Inter ; i++) {
                  Moteur.step( pas);
                }
              } else {
                Inter =  PAS * ( PP - 7 );
                for (int i = 1; i <= Inter ; i++) {
                  Moteur.step( - pas);
                }
              }
              PP = 7;
            }
            EEPROM.put(0, PP);
            Serial.println(PP);
            Serial.println("Fin 7");
            break;
          /////////////HUIT/////////////////
          case 0x8:
          case 0x808:
            Serial.println("Bouton 8");
            delay(200);//    Anti rebond
            if ( PP != 8) {
              if (PP < 8 ) {
                Inter =  PAS * (8 - PP);
                for (int i = 1; i <= Inter ; i++) {
                  Moteur.step( pas);
                }
              } else {
                Inter =  PAS * ( PP - 8 );
                for (int i = 1; i <= Inter ; i++) {
                  Moteur.step( - pas);
                }
              }
              PP = 8;
            }
            EEPROM.put(0, PP);
            Serial.println(PP);
            Serial.println("Fin 8");
            break;
          ///////////////////NEUF/////////
          case 0x9:
          case 0x809:
            Serial.println("Bouton 9");
            delay(200);//    Anti rebond
            if ( PP != 9) {
              if (PP < 9 ) {
                Inter =  PAS * (9 - PP);
                for (int i = 1; i <= Inter ; i++) {
                  Moteur.step( pas);
                }
              } else {
                Inter =  PAS * ( PP - 9 );
                for (int i = 1; i <= Inter ; i++) {
                  Moteur.step( - pas);
                }
              }
              PP = 9;
            }
            EEPROM.put(0, PP);
            Serial.println(PP);
            Serial.println("Fin 9");
            break;
          /////////////////////////DIX//////////////
          case 0x0:
          case 0x800:
            Serial.println("Bouton 10");
            delay(200);//    Anti rebond
            if ( PP != 10) {
              if (PP < 10 ) {
                Inter =  PAS * (10 - PP);
                for (int i = 1; i <= Inter ; i++) {
                  Moteur.step( pas);
                }
              } else {
                Inter =  PAS * ( PP - 10 );
                for (int i = 1; i <= Inter ; i++) {
                  Moteur.step( - pas);
                }
              }
              PP = 10;
            }
            EEPROM.put(0, PP);
            Serial.println(PP);
            Serial.println("Fin 10");
            break;
            ///////////////////////////ONZE////////////
    
            Serial.println("Bouton 11");
            delay(200);//    Anti rebond
            if ( PP != 11) {
              if (PP < 11 ) {
                Inter =  PAS * (11 - PP);
                for (int i = 1; i <= Inter ; i++) {
                  Moteur.step( pas);
                }
              } else {
                Inter =  PAS * ( PP - 11 );
                for (int i = 1; i <= Inter ; i++) {
                  Moteur.step( - pas);
                }
              }
              PP = 11;
            }
            EEPROM.put(0, PP);
            Serial.println(PP);
            Serial.println("Fin 11");
            break;
            /////////////////////////DOUZE/////////////
            Serial.println("Bouton 12");
            delay(200);//    Anti rebond
            if ( PP != 12) {
              if (PP < 12 ) {
                Inter =  PAS * (12 - PP);
                for (int i = 1; i <= Inter ; i++) {
                  Moteur.step( pas);
                }
              } else {
                Inter =  PAS * ( PP - 12 );
                for (int i = 1; i <= Inter ; i++) {
                  Moteur.step( - pas);
                }
              }
              PP = 12;
            }
            EEPROM.put(0, PP);
            Serial.println(PP);
            Serial.println("Fin 12");
            break;
          /////////////////////
          case 0x11:
          case 0x811:
          case 0x810:
          case 0x10:
            Serial.println("Bouton GROS a Gauche");
          /////////
          case 0x20:
          case 0x820:
          case 0x821:
            Serial.println("Bouton GROS a Droite");
    
          /////////
          case 0xD:
          case 0x80D:
            Serial.println("Bouton PETIT a Gauche");
    
          /////////
          case 0x831:
          case 0x31:
            Serial.println("Bouton PETIT a Droite");
    
    
    
        }// Fin de Switch
      }// Fin de If
    }//  Fin de travail
    //////////////////////////////////////////////////////////////////
    Fichiers attachés Fichiers attachés
    Dernière modification par Antoane ; 30/04/2016 à 12h30. Motif: Intégration du code au corps du message.

Discussions similaires

  1. [Programmation] utiliser deux chiffres d'une télécommande arduino
    Par invite56ce0df1 dans le forum Électronique
    Réponses: 12
    Dernier message: 07/12/2015, 07h53
  2. Variation moteur telecommande Arduino
    Par invited4841cd3 dans le forum Électronique
    Réponses: 0
    Dernier message: 20/05/2015, 16h33
  3. récupérer le signal d'une télécommande chacon via arduino
    Par invitec8081ed7 dans le forum Électronique
    Réponses: 7
    Dernier message: 21/10/2014, 02h33
  4. exploitation dune télécommande ir avec arduino uno r3
    Par invite7ade7f5a dans le forum Électronique
    Réponses: 1
    Dernier message: 12/01/2014, 10h13
  5. télécommande IR et arduino
    Par Lycaon dans le forum Électronique
    Réponses: 3
    Dernier message: 28/10/2013, 09h34
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...