Télécommande IR, une LED, un Fade.

Portrait de steadam

Bonjour tout le monde, et merci aux membres de l'équipe pour le travail que vous faites pour partager vos connaissances.

Vos vidéos sont vraiment intéressantes et offrent la possibilité aux non spécialistes de pouvoir se projeter dans des projets qui mêlent électronique et programmation.

Pour ma part, c'est dans un but artistique que j'utilise des arduinos.

En ce moment je mélange photographie au collodion humide avec des leds et des façons de contrôler des effets ou des allumages.

Mon petit souci du jour, (enfin des deux derniers jours...) se situe dans le code qui permet :

1 : à l'appuie d'une touche de la télécommande de contrôler l'allumage d'une Led

2 : faire un fade sur cette Led

3 : pourvoir recommencer autant de fois que l'on souhaite.

C'est sur cette dernière partie que je bute... J'ai essayer de placer le  : monRecepteurInfrarouge.resume();  , rien n'y fait je ne peux pas relancer la séquence pour rallumer ma led...

En sachant qu'a terme il me faudrait pouvoir contrôler plusieurs rubans leds.

voici l'ébauche de code :

#include <IRremote.h>

int led = 9;          
int brightness = 0;  
int fadeAmount = 5;

const char DIN_RECEPTEUR_INFRAROUGE = 2;
IRrecv monRecepteurInfraRouge (DIN_RECEPTEUR_INFRAROUGE);

decode_results messageRecu;

void setup() {
  pinMode(led, OUTPUT);
  Serial.begin(9600);
  monRecepteurInfraRouge.enableIRIn();
  monRecepteurInfraRouge.blink13(true);
}

void loop()
{
  if (monRecepteurInfraRouge.decode(&messageRecu))
  {
   
    if (messageRecu.value == 0xFD08F7)

    {
      analogWrite(led, brightness);   
      brightness = brightness + fadeAmount;
    }

    if (brightness == 0 || brightness == 255) {
      fadeAmount = -fadeAmount ;
    }
    brightness = constrain (brightness,0,254);
    analogWrite(led, brightness);

    delay(50);

    // monRecepteurInfraRouge.resume();
  }
  delay(1);
  // analogWrite(led, 0);

}

Encore merci et à bientôt !

Portrait de brossden

Bonjour steadam

Je n'ai pas testé mais un truc me chiffonne. Tu initialises le port Série 1, mais tu ne l'utilises pas !

Tiens moi au courant si tu veux bien.

Portrait de steadam

Bonjour brossden, merci pour ta réponse.

Effectivement je n'utilise pas le port série, j'ai oublié de supprimer cette ligne...

Par contre ma led est bien sur la pin 9 : int led = 9;    que je met ensuite en pinMode OUTPUT.

Ce que l'on retrouve avec le 0 dans sa variable est le brightness qui variera ensuite cette valeur et 255.

Tu me dira.

Encore merci !

Portrait de brossden

C'est juste, une étourderie de ma part !

par contre  :          // monRecepteurInfraRouge.resume()

est en commentaire !

Portrait de steadam

Oui, c'était un test...

Je n'arrive pas à trouver là où il doit être... y a pas 10 000 lignes non plus...

Portrait de brossden

A la fin du loop()

Portrait de brossden

steadam

Essaye ce code :

#include <IRremote.h>

int led = 9;
int brightness = 0;
int fadeAmount = 5;

const char DIN_RECEPTEUR_INFRAROUGE = 2;
IRrecv monRecepteurInfraRouge (DIN_RECEPTEUR_INFRAROUGE);

decode_results messageRecu;

void setup() {
  pinMode(led, OUTPUT);
  Serial.begin(9600);
  monRecepteurInfraRouge.enableIRIn();
  monRecepteurInfraRouge.blink13(true);
}

void loop()
{
  if (monRecepteurInfraRouge.decode(&messageRecu))
  {
    if (messageRecu.value == 0xFD08F7)
    {
      analogWrite(led, brightness);
      brightness = brightness + fadeAmount;
    }
    if (brightness == 0 || brightness == 255) {
      fadeAmount = -fadeAmount ;
    }
    analogWrite(led, brightness);
    delay(50);
    monRecepteurInfraRouge.resume();
  }
}

Portrait de steadam

Avec ce code quand j'appuie sur le bouton 1, la led s'allume de sa valeur fadeAmount, et viens incrémenter à chaque nouvel appuie.

Portrait de brossden

Ce n'est pas ce que tu veux ?

Portrait de steadam

Pas tout à fait, l'idée est qu'à l'appuie de la touche de la télécommande le fade se lance passe de 0 à 255 et reviens à 0.

Ensuite quand je réappuies sur la touche ça relance le fade. 

Portrait de brossden

Mais rien dans ton code ne permet cela ?

Portrait de steadam

Je pensais que le .resume(); permettais justement de pouvoir renvoyer une nouvelle information de la télécommande.

Portrait de brossden

Je pense que le code qui suit te conviendra, tu peux faire varier la vitesse d'incrémentation en changeant la valeur de tempo :

#include <IRremote.h>

int led = 9;
int brightness = 0;
int fadeAmount = 5;
int tempo = 50;

const char DIN_RECEPTEUR_INFRAROUGE = 2;
IRrecv monRecepteurInfraRouge (DIN_RECEPTEUR_INFRAROUGE);

decode_results messageRecu;

void setup() {
  pinMode(led, OUTPUT);
  //Serial.begin(9600);
  monRecepteurInfraRouge.enableIRIn();
  monRecepteurInfraRouge.blink13(true);
}

void fade() {
  for (brightness = 0; brightness <= 255; brightness = brightness + fadeAmount)
  {
    analogWrite(led, brightness);
    //Serial.println(brightness);
    delay(tempo);
  }
  for (brightness = 250; brightness >= 0; brightness = brightness - fadeAmount)
  {
    analogWrite(led, brightness);
    //Serial.println(brightness);
    delay(tempo);
  }
}
void loop()
{
  if (monRecepteurInfraRouge.decode(&messageRecu))
  {
    if (messageRecu.value == 0xFD08F7)
    {
      monRecepteurInfraRouge.resume();
      fade();
    }
  }
}