Le forum a migré vers l'adresse suivante:

Forum

Masquer ce message

Simple-Duino Index du Forum



Utilisation d'une télécommande IR


 
Poster un nouveau sujet   Répondre au sujet    Simple-Duino Index du Forum -> Arduino & Électronique -> Questions
Sujet précédent :: Sujet suivant  
Auteur Message
Guid0
Débutant

Hors ligne

Inscrit le: 29 Oct 2013
Messages: 16
Masculin
Niveau d'éléctronique: Débutant

MessagePosté le: Mer 13 Nov - 18:36 (2013)    Sujet du message: Utilisation d'une télécommande IR Répondre en citant

PublicitéSupprimer les publicités ?
Bonjour,
Le kit robot Dagu 'miniHexaPod' que j'utilise pour m'initier dispose d'une télécommande IR. Je suis en train d'essayer de comprendre comment il est codé dans le programme d'exemple fourni. J'ai un peu de mal à m'y retrouver.

Voici ce que j'ai vu dans le code.

En début de code, des constantes sont définies pour repérer les pins IR.

Citation:

// ==== IR COMS PINS ====
#define IRIpin          3  // digital pin  3 - IR Interrupt
#define IRXpin          0  // digital pin  0 - IR RX
#define ITXpin          1  // digital pin  1 - IR TX
#define ITMpin          4  // digital pin  4 - IR TX modulate (38KHz)



ITMpin n'est jamais utilisée dans la suite du code.

Dans le setup(), il y a ces lignes :
Citation:

  digitalWrite(IRIpin,1);                                       // turn on D3 pullup resistor for IR receiver interrupt pin
...
  attachInterrupt(1,IRdetect,FALLING);


Bon, si je comprend bien, on place la pin D3 (IRIpin) en état 'HIGH', et le attachInterrupt déclenche la fonction IRdetect() lorsque la pin D3 (interrupt 1 sur les UNO(cf reference), je suppose que la carte du robot y ressemble beaucoup) passe de 'HIGH' à 'LOW'.
Le code de la fonction IRdetect() passe simplement une variable volatile flag de '0' à '1'.
Je suppose donc que lors de la reception d'un code IR de la télécommande, le récepteur fait passer momentanément IRIpin (pin D3) sur 'LOW'.

Dans le code du loop() apparaît plusieurs fois le code :

Citation:

  if(flag==1)
  {
    flag=0;
    if(pulseIn(IRXpin, LOW,Speed) >1800) IRcommand();             // if start bit is greater than 1900uS then read remote control. Timeout value controls robot speed
  }



Donc en cas d'interrupt (réception d'un IR sur pin D3) on teste la durée (pulseIn) sur IRXpin cette fois (la pin D0, soit) jusqu'à ce que la pin IRXpin soit de nouveau 'LOW'. Si elle est de plus de 1800 microseconde, c'est bien une commande IR et on lance IRcommand() dont voici le code.
Citation:

void IRcommand()
{//----------------------------------------- Receive IR commands from remote control ----------------------------------

  digitalWrite(LEDpin,HIGH);                                    // Turn on red indication LED to show signal received
  IRC=0;                                                        // reset Infra Red Command variable
  int j=1;                                                      // reset binary multiplier
  for(int k=0;k<7;k++)                                          // read 7 data bits (ignore 5 bit device ID)
  {                               
    pulse = pulseIn(IRXpin, LOW,2500);                          // measure pulse from IR receiver
    if(pulse > 900)                                             // a pulse greater than 900uS is considered to be a 1
    {                               
      IRC+=j;                                                   // if it is a 1 then add 2 to the power of i
    } 
    j*=2;
  }


La suite est un switch sur IRC.

Bon, je comprend bien que l'idée est de mesurer les durée des 7 pulsations suivantes correspondant à 7 bits, 1 si la pulsation dure plus de 900 microseconde et 0 si plus court.

Ce que j'en comprend, c'est que le codage du message de la télécommande est fait avec les pulsations en durée. Il y a tout de même quelque chose qui me surprend, puisque le codage est en durée, comment est on sur de ne pas avoir raté de bit entre deux itérations de la boucle for (int k...) ?

Si vous avez des exemples de code de réception de commande IR, ou si vous connaissez le principe de ces transmission de données, je suis preneur de toute information, car, personnellement, je n'y connais rien, je ne fais que réfléchir à comment peut fonctionner un code.
Merci d'avance.
____________________________
Projet en cours :
Reécriture programme robot
Revenir en haut
Admin
Fondateur

Hors ligne

Inscrit le: 12 Avr 2012
Messages: 860
Masculin
Niveau d'éléctronique: Pro

MessagePosté le: Sam 16 Nov - 21:29 (2013)    Sujet du message: Utilisation d'une télécommande IR Répondre en citant

Il y a une librairie qui prend en charge la communication IR 
c'est IRremote disponible ici http://www.pjrc.com/teensy/td_libs_IRremote.html
Avec un petit tuto en dessous
____________________________
http://simple-duino.com
Revenir en haut
Guid0
Débutant

Hors ligne

Inscrit le: 29 Oct 2013
Messages: 16
Masculin
Niveau d'éléctronique: Débutant

MessagePosté le: Ven 22 Nov - 09:28 (2013)    Sujet du message: Utilisation d'une télécommande IR Répondre en citant

Oui,oui,oui...
Je suis allé voir les solutions en utilisant des lib toutes prêtes. Mais vu la carte lowCost du petit robot que je reprogramme (NG ATmega8) je suis extrêmement limité (max de 7 168 octets). Du coup, la library et un simple appel à une fonction explose la mémoire disponible...
Ce n'est pas pour rien que le programme n'utilise pas tone()...
Ok, je pourrais passer à une carte plus moderne, mais il faudrait refaire tout le robot. Et comme j'aime bien les défis, je vais un peu creuser.
Rien que parce que des trucs comme voyager me font encore rêver...
____________________________
Projet en cours :
Reécriture programme robot
Revenir en haut
Contenu Sponsorisé






MessagePosté le: Aujourd’hui à 23:37 (2017)    Sujet du message: Utilisation d'une télécommande IR

Revenir en haut
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Simple-Duino Index du Forum -> Arduino & Électronique -> Questions Toutes les heures sont au format GMT + 1 Heure
Page 1 sur 1

 
Sauter vers:  

Index | creer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Powered by phpBB
Propulsé par Simple-Duino