Codes test

Portrait de Vilerio

Voici un programme pour tester si une télecommande arduino fonctionne : 

#include <IRremote.h>

const char DIN_RECEPTEUR_INFRAROUGE = 2;

IRrecv monRecepteurInfraRouge (DIN_RECEPTEUR_INFRAROUGE);

decode_results messageRecu;

void setup() {

 Serial.begin(9600);
 monRecepteurInfraRouge.enableIRIn();
 monRecepteurInfraRouge.blink13(true);
  
pinMode( 22,OUTPUT) ;
pinMode( 46,OUTPUT) ;
pinMode( 26,OUTPUT) ;
pinMode( 30,OUTPUT) ;
pinMode( 40,INPUT) ;
pinMode( 32,INPUT) ;
pinMode( 34,INPUT) ;
pinMode( 52,INPUT) ;

}

void loop() {

if (messageRecu.value == 0xFF6897)  // la touche zéro ( vous pouvez modifier ce nombre pour avoir la touche que vous voulez.
    
digitalWrite ( Ledpin, HIGH ) ;
delay ( 5000 ) ;
digitalWrite ( Ledpin, LOW ) ;

  
 
}

Portrait de Anonyme

Ton code ne fonctionne pas et ne peux pas fonctionner pour la raison suivante
 1 - LedPin ne correspond à rien, il n'est pas déclaré !!

 2 - Sincèrement je ne commprends pas pourquoi :

pinMode( 22,OUTPUT) ;
pinMode( 46,OUTPUT) ;
pinMode( 26,OUTPUT) ;
pinMode( 30,OUTPUT) ;
pinMode( 40,INPUT) ;
pinMode( 32,INPUT) ;
pinMode( 34,INPUT) ;
pinMode( 52,INPUT) ;

qui ne sont utilisés à aucun moment dans le code

3 - Tu attends 5 secondes pour éteindre (en théorie seulement) la Led.

4 - Tu déclares le port série à 9600 bauds et tu ne t'en sers pas !

5 - La condition if ne comportant pas d'accolades il faut vraiment appuyer pile au moment ou le µC passe sur cette instruction pour avoir un résultat à moins que la library que tu utilises gère ce problème, mais comme tu ne fais jamais appel à cette dernière peux tu nous donner des explications ?

6 - Et enfin le code que tu donne en hexa correspond à ta télécommande mais pas à toutes !

Peut être ai-je mal compris ton post qui  serait plutôt une demande de correction de ton code ?

J'ai testé sur mon PC le compilateur me donne raison !

Alex dans ses vidéo lui donne un code fonctionnel :

#include <IRremote.h>

const char DIN_RECEPTEUR_INFRAROUGE = 2;

IRrecv monRecepteurInfraRouge (DIN_RECEPTEUR_INFRAROUGE);

decode_results messageRecu;

void setup()
{
 Serial.begin(9600);
 monRecepteurInfraRouge.enableIRIn();
 monRecepteurInfraRouge.blink13(true);
}

void loop()
{
  if (monRecepteurInfraRouge.decode(&messageRecu))
  {
    Serial.println(messageRecu.value,HEX);
    delay(500);
    monRecepteurInfraRouge.resume();
  }
  delay(1);
}

Portrait de Walter

+1 avec les remarques de Wolframe69,
Ou veut tu en venir Vilerio?

Par contre si je peux me permettre de pinailler pour le 5° le manque d'accolade n'a aucun effet sur le fait qu'il faudra appuyer sur le bouton au bon moment.

Le problème est double.

if (messageRecu.value == 0xFF6897)  // la touche zéro ( vous pouvez modifier ce nombre pour avoir la touche que vous voulez.
    
digitalWrite ( Ledpin, HIGH ) ;
delay ( 5000 ) ;
digitalWrite ( Ledpin, LOW ) ;

Le code précédent est équivalent à celui-ci: 

if (messageRecu.value == 0xFF6897)
{
    // la touche zéro ( vous pouvez modifier ce nombre pour avoir la touche que vous voulez.
    digitalWrite ( Ledpin, HIGH ) ;
}
delay ( 5000 ) ;
digitalWrite ( Ledpin, LOW ) ; 

 

Je pense que ce n'est pas trop ce qui est voulu, mais à la limite ca peut marcher.
La LED sera en en émission pendant 5s des que messageRecu.value vaudra la valeur comparée(0xFF6897).
Le soucis principal est que vaut  messageRecu.value ou messageRecu qui n'est jamais affectée ou passé par référence à une fonction.
Il manque donc l'appel à la fonction "decode" de la classe IRrecv, pour affecté une valeur à la variable "messageRecu"
 

Portrait de Anonyme

Désolé Walter mais je moinsoie et  je maintient qu'il faut des accolades car le code plus judicieux serait :

if (messageRecu.value == 0xFF6897)
{
    // la touche zéro ( vous pouvez modifier ce nombre pour avoir la touche que vous voulez.
digitalWrite ( Ledpin, HIGH ) ;
delay ( 5000 ) ;
digitalWrite ( Ledpin, LOW ) ;

}

Par ce que attendre 5 secondes pour éteindre une LED qui n'est pas allumée je ne vois pas l'intérêt, tout autant que de pénaliser le cycle de 5 secondes !!!!!!!!  Donc tu "pinailles" pour nada !

De plus j'ai bien précisé :

"à moins que la library que tu utilises gère ce problème, mais comme tu ne fais jamais appel à cette dernière" !!!!!!!

Portrait de Walter

J'ai du mal m'exprimer car je pense aussi que le comportement désiré et logique est avec des accolades autour des 3 instructions.
Ma remarque est que la présence des accolades est bien moins important que la nécessité d'utiliser la fonction "decode" qui fait que la propriété "value" soit affecté en fonction du signal reçu.
Ou dis autrement le code avec avec les accolades logiquement placées n'est pas fonctionnel.

C'est peut être pour toi "nada", mais pour moi un programme fonctionnel est intéressant ;)

Portrait de Anonyme

Si tu regardes mon post en entier tu y verras le code d'Alex qui est fonctionnel !

Je ne fais pas de vent !

J'ai bien écrit :

"à moins que la library que tu utilises gère ce problème, mais comme tu ne fais jamais appel à cette dernière" !!!!!!!

Portrait de Walter

A quel moment ais je dit que le code d'alex n'est pas fonctionnel?
Si tu fais exprès de ne pas comprendre ma remarque.

Pourtant je pensais qu'en indiquant que je pinaillais, ca ne remettais pas en cause ta réponse et que je ne te contre disais pas et que je ne voulais pas t'attaquer mais uniquement expliquer à Vilerio sont erreurs.
Mais non tu prend tout commentaire pour une attaque personnel même lorsqu'il y a des formes, c'est bien dommage!

La bise à vous :)
 

Portrait de Anonyme

Non mais tu fais beaucoup de vent pour rien dire de plus ! Tu me fais penser à certains cadres on les mettait à chaque extrémité d'un couloir et on avait la clim !

Pour les erreurs de Vilerio je les avais déjà relevées à quoi sert que tu fasses le perroquet ?

Quand quelqu'un pose un problème fait ta propre réponse ne te raccroche pas à ce qui a déjà été dit.

Portrait de Walter

Je vois que tu as dû être promus ingénieur ou cadre sup!

La bise à vous

 

Portrait de Anonyme

On n'est pas promu ingénieur on étudie pour le devenir ! Pour les cadres c'est souvent tout à fait différent !