augmenter et diminuer la luminosité d'une led à l'aide d'une télécommande

Bonjour à tous,
Mon projet est d’utiliser une télécommande infrarouge pour commander une led, j’aimerais pouvoir l’allumer et l’éteindre mais aussi régler sa luminosité.(la led s’allumerai de plus en plus lorsque j’appuie sur la touche + de la télécommande et inversement avec la touche -)
Jusqu’ici j’ai réussi à décoder les codes émis par la télécommande RC5 que j’ai choisi j’arrive à allumer éteindre la led,mais je n’arrive pas à régler sa luminosité, je sais qu’il faudrait jouer avec l’intensité de cette led mais je ne sais pas quel fonction utiliser.
Voici le programme:
Merci d’avance pour votre aide

#include <IRremote.h>  
#define DEBUG

int BUTTONMORE = 16;
int BUTTONLESS = 17;
int LedRed = 2;

int IR_RECEIVER = 2;            // Pin d'entrée du signal IR
IRrecv ir_receiver(IR_RECEIVER);  // Objet gérant la réception du signal
decode_results result;          // Résultat 

/* Initialisation */
void setup()
{ 
   
   
  ir_receiver.enableIRIn();   // Active le module IR

  #ifdef DEBUG
  Serial.begin(9600);
  Serial.write("Mode Debug : On");
  Serial.println();
  #endif
}

/* Boucle principale */
void loop()
{
  if (ir_receiver.decode(&result))  // Si le module IR reçoit des données
  {
        #ifdef DEBUG
       
         
        #endif
        
        if (result.value==16) {
                digitalWrite(ledRed,HIGH);                                                                                                                                                                                                                                                                                                                                                                                                                 
            }
            
         if (result.value==17) {
                Serial.print("Code telecommande= ");
                Serial.print(result.value);
                Serial.println(" temperature -");
                delay(1000);                                                                                                                                                                                                                                                                                                                                                                                                                 
            } 
                                                                                                                                                                                                                                                                                                                                                                                                                         
            
            

        ir_receiver.resume();  // Attend la prochaine valeur
  }
  
   
  
}[code][code][code]

[/code][/code][/code]

Bonsoir,

int ledState = 0;

if (result.value==16) {
ledState = ledState++;
}
elseif(result.value==17) {
ledState = ledState--;
Serial.print("Code telecommande= ");
Serial.print(result.value);
Serial.println(" temperature -");
delay(1000);                                                                                                                                                                                                                                                                                                                                                                                                                 
} 
                
analogWrite(ledRed,ledState);

Essaye avec ça j’ai pas de quoi tester sous la main :confused:

je dois remplacer toute mes variable avec la tienne ? ou je laisse les variables que j'avais mise ?

J’ai essayer avec ma carte arduino et elle fait que s’allumer lorsque j’appuie sur la touche 16.
Mais sa luminosité ne varie pas lorsque je 'appui sur la touche - (code=17)

Est ce que quelqu’un serait comment commander la diminution de la luminosité de cette led, car je suis novice et je sais pas utiliser les sortie PWN.
Et aussi comment faire en sorte qu’a chaque fois que j’appuie sur une touche la luminosité augmente ou diminue
Merci d’avance.

Il faut que tu utilises la fonction analogWrite avec une variable que tu fais changer à chaque appuis.

Malheureusement je sais pas faire ...
comment je dois faire pour la faire varier à chaque appuie ?
Pour voir la différence entre chaque appuie j'avais penser à faire varier de 51 en 51 car 51 x 5=255

Commence par ici alors:
http://eskimon.fr/wp-content/plugins/filedownload/download.php/?path=http://eskimon.fr/public/ebook/Arduino_-_Premiers_pas_en_informatique_embarquee.pdf&type=&check=&referer=/ebook-tutoriel-arduino

:wink:

#include <IRremote.h>  
#define DEBUG

int BUTTONMORE = 16;
int BUTTONLESS = 17;
int LedRed = 3; // le Pin 2 de l'arduino n'a pas de PWM
int ledState = 0;

int IR_RECEIVER = 2;            // Pin d'entrée du signal IR
IRrecv ir_receiver(IR_RECEIVER);  // Objet gérant la réception du signal
decode_results result;          // Résultat 

/* Initialisation */
void setup()
{ 
      
  ir_receiver.enableIRIn();   // Active le module IR

  #ifdef DEBUG
  Serial.begin(9600);
  Serial.write("Mode Debug : On");
  Serial.println();
  #endif
}

/* Boucle principale */
void loop()
{
  if (ir_receiver.decode(&result))  // Si le module IR reçoit des données
  {
        #ifdef DEBUG
       
         
        #endif
        
if (result.value==16) {
   ledState = ledState++;
}
if(result.value==17) {
   ledState = ledState--;
   Serial.print("Code telecommande= ");
   Serial.print(result.value);
   Serial.println(" temperature -");
   delay(1000);                                                                                                                                                                                                                                                                                                                                                                                                                 
} 
        ir_receiver.resume();  // Attend la prochaine valeur
  }

}

Il faut changer le pin de la Led ^^
Dit moi si ça marche

Non sa marche pas la led ne s'allume plus du tout la

Rassure-nous tu as bien déplacé la LED sur la broche 3?

oui oui tous a fait

fin c'est juste la ligne qui m'interesse qui marche pas :stuck_out_tongue:

celle la :

if (result.value==16) {
   ledState = ledState++;
}

Elle marche pas ou tu n'es pas assez patient?
A chaque appui sur la touche tu incrémentes la PWM de 1. Pour être au maximum il faut donc appuyer 255 fois.
Si tu veux aller plus vite remplace

ledState = ledState++;

par

ledState = ledState+16;

ainsi il ne faudra plus que 16 appuis pour être au maximum.

Non vraiment sa marche pas je comprend pas…

#include <IRremote.h>  
#define DEBUG

int BUTTONMORE = 16;
int BUTTONLESS = 17;
int LedRed = 3; // le Pin 2 de l'arduino n'a pas de PWM
int ledState = 0;

int IR_RECEIVER = 10;            // Pin d'entrée du signal IR
IRrecv ir_receiver(IR_RECEIVER);  // Objet gérant la réception du signal
decode_results result;          // Résultat 

/* Initialisation */
void setup()
{ 
      
  ir_receiver.enableIRIn();   // Active le module IR

  #ifdef DEBUG
  Serial.begin(9600);
  Serial.write("Mode Debug : On");
  Serial.println();
  #endif
}

/* Boucle principale */
void loop()
{
  if (ir_receiver.decode(&result))  // Si le module IR reçoit des données
  {
        #ifdef DEBUG
       
         
        #endif
        
if (result.value==16) {
   ledState = ledState+21;
}
if(result.value==17) {
   ledState = ledState--;
   Serial.print("Code telecommande= ");
   Serial.print(result.value);
   Serial.println(" temperature -");
   delay(1000);                                                                                                                                                                                                                                                                                                                                                                                                                 
} 
        ir_receiver.resume();  // Attend la prochaine valeur
  }

}

il manque peut etre l’action pour augmenter le luminosité de la led aprés :

if ((result.value==16)||(result.value==2064)) {
   ledState = ledState+21;

Il manque le analogWrite(ledRed,ledState);

Ajouté dans le code

#include <IRremote.h>  
#define DEBUG

int BUTTONMORE = 16;
int BUTTONLESS = 17;
int LedRed = 3; // le Pin 2 de l'arduino n'a pas de PWM
int ledState = 0;

int IR_RECEIVER = 10;            // Pin d'entrée du signal IR
IRrecv ir_receiver(IR_RECEIVER);  // Objet gérant la réception du signal
decode_results result;          // Résultat 

/* Initialisation */
void setup()
{ 
      
  ir_receiver.enableIRIn();   // Active le module IR

  #ifdef DEBUG
  Serial.begin(9600);
  Serial.write("Mode Debug : On");
  Serial.println();
  #endif
}

/* Boucle principale */
void loop()
{
  if (ir_receiver.decode(&result))  // Si le module IR reçoit des données
  {
        #ifdef DEBUG
       
         
        #endif
        
if (result.value==16) {
   ledState = ledState+21;
}
if(result.value==17) {
   ledState = ledState-21;  // autant avoir le même pas pour la décrémentation
   Serial.print("Code telecommande= ");
   Serial.print(result.value);
   Serial.println(" temperature -");
   delay(1000);                                                                                                                                                                                                                                                                                                                                                                                                                 
} 
      analogWrite(ledRed,ledState);  // il manquait cette ligne
        ir_receiver.resume();  // Attend la prochaine valeur
  }

}

j'ai une erreur que je n'arrive pas à rectifier sur cette ligne qui manquait :

forum_aide_my_proejt.ino: In function 'void loop()':
forum_aide_my_proejt:46: error: 'ledRed' was not declared in this scope

Tu as oublier la majuscule a LedRed a la ligne 46 :

analogWrite(ledRed,ledState); // il manquait cette ligne

A remplacer par :

analogWrite(LedRed,ledState); // il manquait cette ligne

La normalement ca fonctionne :slight_smile:

Non toujours pas la led ne s'allume pas ....

en effet je comprend pas, je ne sais pas d’ou sa vient car mon branchage me semble correct, ma sortie n°3 est bien brancher sur l’anode de la la led et sa cathode à la masse et mon récépteur est brancher comme il faut car il marche avec mon moniteur série pour afficher son code.
En revanche, sur ma carte arduino lorsque le signal est bien reçu par la carte la petite led “tx” de la carte arduino s’allume, alors que la elle ne s’allume pas se qui prouve qu’il y a surement un soucis au niveau du programme mais je ne vois pas ou …

TX : c'est juste de la communication entre le PC et l'Arduino. ça s'allume quand tu transferes un programmes ou souvent quand tu utilises le Serial.print().

Tu devrais mettre une résistance sur ta LED non ?
Si tu limites pas le courant tu peux la cramer.

Clément