Ruban de led par infrarouge

Bonjour,
je suis nouveau sur le forum et j’aurais besoin d’un petit coup de main.
je débute dans le code et l’arduino et mon premier projet est un ruban led RGB qui réagit au bruit ambiant et qui se contrôle par infrarouge.
Alors je rencontre un problème avec l'infrarouge.
Donc j'arrive à allumer et éteindre les led avec une télécommande mais le reste de mon programme pour la gestion des led avec un capteur sonore se bloque et ne se joue pas correctement.
j'appelle votre aide je comprend pas.

#include <Adafruit_NeoPixel.h>
#include <IRremote.h>

//nom de chaque broche 
#define LED_PIN 3
#define N_LED 60
#define CAPTEUR A0 
#define RECV  2

//configuration des leds
Adafruit_NeoPixel strip = Adafruit_NeoPixel(N_LED, LED_PIN, NEO_RGB + NEO_KHZ400);


//variables 
 int RC = 0;
 int GC = 0;
 int BC = 0; 
 int valeur = 0; 
 int val = 0;
 const int lumiON = 10;
 const int lumiOFF = 0;
  
void setup()
{
  strip.begin();
  Serial.begin(9600);
  pinMode(A0, INPUT);
  pinMode(3, OUTPUT);
  IrReceiver.begin(RECV);
}

void loop()
{
  valeur = analogRead(CAPTEUR);
  setcouleur();
  //Serial.println(CAPTEUR);
  delay(10);
    
    
  if (IrReceiver.decode()) {
    unsigned int cmd = IrReceiver.decodedIRData.command;
    switch (cmd) {
      case 0x45:
        Serial.println("ON");
        strip.setBrightness(lumiON); 
        strip.show();
 
       if (valeur > 1001){
        strip.clear();
        strip.fill(strip.Color(0, 255, 0), 0, 60);
        strip.show();
        }
        else if (valeur < 1000 && valeur >= 51){
          strip.clear();
          val = valeur/51;
          strip.fill(strip.Color(RC, GC, BC), 0, val+1);
        for(int i = 20; i < 20+val; i++){
          strip.setPixelColor(i, strip.Color(RC, GC, BC));
        }
        for(int i = 40; i < 40+val; i++){
          strip.setPixelColor(i, strip.Color(RC, GC, BC));
        }
        strip.show();
           }
        else if (valeur == 0){
          strip.clear();
          strip.setPixelColor(0, strip.Color(RC, GC, BC));
          strip.setPixelColor(20, strip.Color(RC, GC, BC));
          strip.setPixelColor(40, strip.Color(RC, GC, BC));
          strip.show();
        } 
        
        else{
          strip.show();
       }
      break;

      case 0x47:
        Serial.print("OFF");
        strip.setBrightness(lumiOFF);
        for( int i = 0 ; i = 60 ; i++ ){
          strip.setPixelColor(i, strip.Color(0,0,0)); // Moderately bright green color.
          strip.show();
          break;
}
        break;
      default:
        Serial.print("Received code: ");
        Serial.println(cmd);
    }
    IrReceiver.resume();
  }
} 

void setcouleur(){ //boucle des couleurs
    RC = 0; //random(100, 150); //VERT //0;
    GC = 70; //random(0, 100);   //ROUGE //70;
    BC = 255; //random(150, 255);  //bLEU  //255; 
  }

Après j'ai refait un code mais je rencontre le même problème mais a l'inverse, ma gestion des led avec le capteur se joue mais je ne peux pas éteindre ou allumer les led par infrarouge.

#include <Adafruit_NeoPixel.h>
#include <IRremote.h>

//nom de chaque broche 
#define LED_PIN 3
#define N_LED 60
#define CAPTEUR A0 
#define RECV  2

//configuration des leds
Adafruit_NeoPixel strip = Adafruit_NeoPixel(N_LED, LED_PIN, NEO_RGB + NEO_KHZ400);


//variables 
 int RC = 0;
 int GC = 0;
 int BC = 0; 
 int valeur = 0; 
 int val = 0;
 const int lumiON = 10;
 const int lumiOFF = 0;
  
void setup()
{
  strip.begin();
  Serial.begin(9600);
  pinMode(A0, INPUT);
  pinMode(3, OUTPUT);
  IrReceiver.begin(RECV);
}

void loop()
{
  valeur = analogRead(CAPTEUR);
  setcouleur();
  infrarouge();
  strip.setBrightness(lumiON);
  //Serial.println(CAPTEUR);
  delay(10);
        if (valeur > 1001){
            strip.clear();
            strip.fill(strip.Color(0, 255, 0), 0, 60);
            strip.show();
            }
            else if (valeur < 1000 && valeur >= 51){
              strip.clear();
              val = valeur/51;
              strip.fill(strip.Color(RC, GC, BC), 0, val+1);
            for(int i = 20; i < 20+val; i++){
              strip.setPixelColor(i, strip.Color(RC, GC, BC));
            }
            for(int i = 40; i < 40+val; i++){
              strip.setPixelColor(i, strip.Color(RC, GC, BC));
            }
            strip.show();
               }
            else if (valeur == 0){
              strip.clear();
              strip.setPixelColor(0, strip.Color(RC, GC, BC));
              strip.setPixelColor(20, strip.Color(RC, GC, BC));
              strip.setPixelColor(40, strip.Color(RC, GC, BC));
              strip.show();
            } 
            
            else{
              strip.show();
           }

}

   
void infrarouge(){ 
  if (IrReceiver.decode()) {
    unsigned int cmd = IrReceiver.decodedIRData.command;
    switch (cmd) {
      case 0x45:   // allumer toutes les led.
        Serial.println("ON");
        valeur = analogRead(CAPTEUR);
        strip.setBrightness(lumiON); 
        strip.show();
        break;

      case 0x47: // eteindre toutes les led.
        Serial.print("OFF");
        strip.setBrightness(lumiOFF);
        for( int i = 0 ; i = 60 ; i++ ){
          strip.setPixelColor(i, strip.Color(0,0,0)); 
          strip.show();
          break;
}
        break;
      default:
        Serial.print("Received code: ");
        Serial.println(cmd);
         }
    IrReceiver.resume();
  }
} 


void setcouleur(){ //boucle des couleurs
    RC = 0; //random(100, 150); //VERT //0;
    GC = 70; //random(0, 100);   //ROUGE //70;
    BC = 255; //random(150, 255);  //bLEU  //255; 
  }

Tu as un break dans la boucle for qui en stoppe l'exécution. De plus, le strip.show doit être en dehors de la boucle :

      case 0x47: // eteindre toutes les led.
        Serial.print("OFF");
        strip.setBrightness(lumiOFF);
        for( int i = 0 ; i = 60 ; i++ )  strip.setPixelColor(i, strip.Color(0,0,0)); 
        strip.show();
        break;

Pour éteindre la bande de leds, le plus simple est strip.clear();

Si ton deuxième code ne marche pas au niveau de la télécommande IR, tu devrais commenter les lignes de la loop après infrarouge(); et voir ce qui s'affiche dans la console. Ajoute après cette ligne :
unsigned int cmd = IrReceiver.decodedIRData.command;
un
Serial.println(cmd);
pour voir les codes qu'elle envoie.

d'accord je vais essayer tous ça merci

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.