télécommande IR numérique Module récepteur
Débuté par
seb03000
, sept. 03 2011 11:44
16 réponses à ce sujet
#2
Posté 03 septembre 2011 - 11:56
Bonjour
En fait c'est assez simple, mais cela doit se faire en deux temps
1/ apprendre les commandes envoyées par ta élécommande
2/ Utiliser ces commandes
Il te faut donc dans un 1er temps connaitre la commande binaire envoyée par ta télécommande pour chaque touche.
Une fois que tu les connais, tu n'as plus qu'à écrire un code qui lance une action chaque fois que tu reçois ce code.
Tu vas donc devoir dans un premier temps envoyer la lecture de ton digital.read sur le serial monitor et noter la commande que te retourne chaque bouton.
Pour cela,
tu connecte ton récepteur IR sur un pin digital
Tu déclare ton port serie
Tu lis ton digital.read sur ton serial
Tu vas donc obtenir un code (en chiffre) sur ton serial monitor différent pour chaque bouton de ta télécommande.
Tu note des chiffres précieusement
Tu n'as plus qu'a écrire un code qui test ton digital.read
et lie chaque code (chaque chiffre) à une action.
Assez simple mais a faire mais impérativement en deux temps car tu n'aura que très rarement des d'infos sur les codes de ta télécommande.
Du reste, avec cette méthode, tu peux très bien utiliser n'importe quelle télécommande. Il te suffira de lire les commandes spécifiques à chaque bouton et plustot que d'utiliser ta petite télécommande, utiliser une vielle télécommande de TV ou magnétoscope.
Attention, certaine (pour ne pas dire pratiquement toutes) les télécommandes utilisent le protocole Sony. Ce protocole envois deux fois de suite la même commande. Mais toi, tu ne l'utilise qu'une seule fois bien sur.
Cdlt
Yves
En fait c'est assez simple, mais cela doit se faire en deux temps
1/ apprendre les commandes envoyées par ta élécommande
2/ Utiliser ces commandes
Il te faut donc dans un 1er temps connaitre la commande binaire envoyée par ta télécommande pour chaque touche.
Une fois que tu les connais, tu n'as plus qu'à écrire un code qui lance une action chaque fois que tu reçois ce code.
Tu vas donc devoir dans un premier temps envoyer la lecture de ton digital.read sur le serial monitor et noter la commande que te retourne chaque bouton.
Pour cela,
tu connecte ton récepteur IR sur un pin digital
Tu déclare ton port serie
Tu lis ton digital.read sur ton serial
Tu vas donc obtenir un code (en chiffre) sur ton serial monitor différent pour chaque bouton de ta télécommande.
Tu note des chiffres précieusement
Tu n'as plus qu'a écrire un code qui test ton digital.read
et lie chaque code (chaque chiffre) à une action.
Assez simple mais a faire mais impérativement en deux temps car tu n'aura que très rarement des d'infos sur les codes de ta télécommande.
Du reste, avec cette méthode, tu peux très bien utiliser n'importe quelle télécommande. Il te suffira de lire les commandes spécifiques à chaque bouton et plustot que d'utiliser ta petite télécommande, utiliser une vielle télécommande de TV ou magnétoscope.
Attention, certaine (pour ne pas dire pratiquement toutes) les télécommandes utilisent le protocole Sony. Ce protocole envois deux fois de suite la même commande. Mais toi, tu ne l'utilise qu'une seule fois bien sur.
Cdlt
Yves
#5
Posté 04 septembre 2011 - 11:37
Bonjour
Plusieurs choses
Tu as besoin de la bibliothèque "IRremote.h"
Tu as besoin de la déclarer "#include <IRremote.h>"
Tu utilise un Pin analogique (cela n'a pas d'importance car tu peux l'utiliser en Digital) mais la tu a besoin d'un pin Digital comme je te l'ais écrit
Pour le branchement, cela semble bon (hors mis ca Pin Digital)
Ce code fait la lecture de la Pin D11 mais il est évident que tu peux la changer (par contre impérativement une Pin digitale ou une Analogique configurée en digital)
Apres avoir compilé et envoyé le code sur ta carte, ouvre le serial monitor pour lire les valeurs
Presse chaque bouton 1 a 1
note la valeur correspondant à chaque bouton.
Mais une simple recherche sur le Net (Google est ton ami) t'aurait donnée des codes similaires.
Cdlt
Yves
Plusieurs choses
Tu as besoin de la bibliothèque "IRremote.h"
Tu as besoin de la déclarer "#include <IRremote.h>"
Tu utilise un Pin analogique (cela n'a pas d'importance car tu peux l'utiliser en Digital) mais la tu a besoin d'un pin Digital comme je te l'ais écrit
Pour le branchement, cela semble bon (hors mis ca Pin Digital)
Ce code fait la lecture de la Pin D11 mais il est évident que tu peux la changer (par contre impérativement une Pin digitale ou une Analogique configurée en digital)
Apres avoir compilé et envoyé le code sur ta carte, ouvre le serial monitor pour lire les valeurs
Presse chaque bouton 1 a 1
note la valeur correspondant à chaque bouton.
Mais une simple recherche sur le Net (Google est ton ami) t'aurait donnée des codes similaires.
#include <IRremote.h> int RECV_PIN = 11; IRrecv irrecv(RECV_PIN); decode_results results; void setup() { Serial.begin(9600); irrecv.enableIRIn(); // Start the receiver } void loop() { if (irrecv.decode(&results)) { Serial.println(results.value, HEX); irrecv.resume(); // Receive the next value } }
Cdlt
Yves
#10
Posté 11 septembre 2011 - 10:35
Bonjour,
Je ne suis pas sur du reste mais ce qui est certain c'est que :
Tu as déjà déclaré des pins
int vitesse1 = 6;
int vitesse2 = 5;
int direction1 = 7;
int direction2 = 4;
Alors pourquoi recommencer ?
digitalWrite(vitesse1 == 6, HIGH);
digitalWrite(vitesse2 == 5, LOW);
digitalWrite(direction1 == 7, HIGH);
digitalWrite(vitesse2 == 4, LOW);
ce ==6 ou ==5 est faux
Essais ça
digitalWrite(vitesse1, HIGH);
digitalWrite(vitesse2, LOW);
digitalWrite(direction1, HIGH);
digitalWrite(vitesse2, LOW);
Ca devrait deja mieux marcher. Si il n'y a pas d'autres erreurs bien sur
dlt
Yves
Je ne suis pas sur du reste mais ce qui est certain c'est que :
Tu as déjà déclaré des pins
int vitesse1 = 6;
int vitesse2 = 5;
int direction1 = 7;
int direction2 = 4;
Alors pourquoi recommencer ?
digitalWrite(vitesse1 == 6, HIGH);
digitalWrite(vitesse2 == 5, LOW);
digitalWrite(direction1 == 7, HIGH);
digitalWrite(vitesse2 == 4, LOW);
ce ==6 ou ==5 est faux
Essais ça
digitalWrite(vitesse1, HIGH);
digitalWrite(vitesse2, LOW);
digitalWrite(direction1, HIGH);
digitalWrite(vitesse2, LOW);
Ca devrait deja mieux marcher. Si il n'y a pas d'autres erreurs bien sur
dlt
Yves
#14
Posté 14 septembre 2011 - 08:39
Salut,
En gros, tu veux pouvoir switch d'un mode pilotage automatique à un mode pilotage manuel en pressant un bouton de ta télécommande? Tu peux simplement faire un test avec un "flag".
Est-ce que tu as déjà codé la partie pilotage automatique? Si oui, je te conseille vivement d'en faire une fonction, ton programme n'est pas terrible mais pourrait y gagner en lisibilité, quelques exemples / conseils :
Le "16580863 n'est pas très digeste, essaye de passer par des "define" ça rendra le ton switch case plus facile à lire, sans devoir passer par les commentaires.
Comme ceci :
Ainsi dans ton code tu auras
C'est déjà beaucoup plus lisible je trouve
Ensuite, pour intégrer le flag, tu peux faire comme suit :
J'espère avoir répondu à ta question
En gros, tu veux pouvoir switch d'un mode pilotage automatique à un mode pilotage manuel en pressant un bouton de ta télécommande? Tu peux simplement faire un test avec un "flag".
Est-ce que tu as déjà codé la partie pilotage automatique? Si oui, je te conseille vivement d'en faire une fonction, ton programme n'est pas terrible mais pourrait y gagner en lisibilité, quelques exemples / conseils :
case 16580863://Mode automatique touche marche arré de la télécommande ne marche pas tout a fait
Le "16580863 n'est pas très digeste, essaye de passer par des "define" ça rendra le ton switch case plus facile à lire, sans devoir passer par les commentaires.
Comme ceci :
#define 16580863 MODE_AUTO
Ainsi dans ton code tu auras
case MODE_AUTO : { /*Code pour le pilotage automatique*/ } case AVANCE { /*Code pour avancer*/ }
C'est déjà beaucoup plus lisible je trouve
Ensuite, pour intégrer le flag, tu peux faire comme suit :
int flag_mode_auto = 0; /* Flag pour savoir si le pilotage automatique a été activé, ici le pilotage par défaut est le mode manuel */ ... case MODE_AUTO : { if(flag_mode_auto == 1) /* Tu peux écrire plus cours avec "if(flag_mode_auto)" { flag_mode_auto = 0; /* important d'inverser l'état du flag, ainsi on sait toujours dans quel mode on se trouve */ ModeAuto(); /* fonction pour le pilotage automatique */ break; } else if(flag_mode_auto == 0) /* peut être écris "if(!flag_mode_auto)" */ { flag_mode_auto = 1; /* important d'inverser l'etat du flag, ainsi on sait toujours dans quel mode on se trouve */ ModeManuel(); /* fonction pour le pilotage manuel */ break; } }
J'espère avoir répondu à ta question
Répondre à ce sujet
0 utilisateur(s) li(sen)t ce sujet
0 members, 0 guests, 0 anonymous users