projet controleur LED rgb anode commune

Salut a tous, c'est mon premier message parmi vous,
Alors je vais commencer par tous vous remercier pour les conseils que j'ai reçu jusque là grâce a vous!
(j'ai 35ans, j'ai débuté l'arduino par les projets du starter kit en anglais, puis l'imprimante 3d (une delta) je m'attaque a mon premier "vrai" projet, j'aime apprendre, un jour peut être je m'attaquerai a un photoduino)

Je poste ici car je me situe en face d'un problème,
j'ai bien avancé dans mon programme,
en récupérant des bouts de codes a droite et a gauche sur la toile,

ce dernier est loin d'être propre et fini...
Je préfère prévenir...

je souhaite contrôler une led rgb, a l'aide d'une télécommande infrarouge.
J'ai réussi a le faire fonctionner "Mais..." (sinon je ne serais pas là...)

il y a différentes fonctions, associées à mes boutons qui nécessitent de boucler à l'infini dans l'attente d'un nouveau signal.

j'ai bien trouvé comment lancer une boucle de plusieurs manières mais pas comment permettre simultanément la lecture du signal infrarouge...

voici mon code complet (désolé c'est un brouillon ET mon premier code...)

désolé également de ne pas afficher mon code directement dans le message mais le forum me dit qu'il y a trop de caractères...

Bonsoir

corriges le lien vers ton code , dans l'état actuel il envoie içi si on le clique :

https://htthttp//pastebin.fr/82743

Quickedit permet de corriger cela facilement

merci :grinning:
c'est mieux comme ça?
(j'ai testé le lien et ça renvoi bien sur mon code)

c'est bon !

super, merci :smiley:
Plus qu'a patienter pour avoir vos lumières alors :smiley:

si j'ai bien compris ce que je trouve sur internet il n'est pas possible pour mon arduino de surveiller la reception d'un nouveau signal et de gérer le clignotement de ma led en meme temps....

j'ai donc tenté de mélanger les deux codes (de mon void clignotement et de mon void loop) comme ce qui suit: (mais aussi d'autres manières, avec un digitalWrite au lieu de l'analogWrite, ainsi que d'inverser les boucles souhaitées...

 void clignotement ()
{
  
  if (irrecv.decode(&results)) 
  {
        analogWrite (alimpin, 255);
        delay(delai);
        analogWrite (alimpin, 0);
        delay(delai);       
    translateIR(); 
    irrecv.resume(); //recevoir la prochaine valeur
}
}

mais ça ne fonctionne pas mieux...
soit il fait un clignotement et attend le nouveau signal en rebouclant quand je presse sur un bouton de la télécommande (sans comprendre le signal envoyé) , soit il clignote infiniment mais ne reçoit pas la signal...

j'ai résolu mon problème :smiley: :smiley: :smiley:
Tout fonctionne a présent (pour le moment du moins)
J'ai utilisé un boolean en déébut de code et un if dans le void loop
(c'est pas le tout mais maintenant que j'ai compris ça j'ai un paquet de ligne a supprimer mdr ça va être le rangement de printemps dans mon code mdr)

salut a tous,
Je retente ma chance pour une nouvelle question…

je viens de nettoyer un peu mon code,
j’utilise désormais des analogWrite pour chaque couleur.
ici l’exemple pour mon orange:

case 0xF710EF: 
        Serial.println("ORANGE 2 <<orange>> ");
        
        arcenciel = false;
        feu = false;
        neon = false;
          
          rouge = 0;
          bleu = 255;
          vert = 210;
          
           analogWrite (redpin, 0);
           analogWrite (bluepin, 255);
           analogWrite (greenpin, 210);
        break;

je souhaiterais me servir de la fonction suivante pour faire un clignotement progressif:

 if (fondu)  {
  // Allume progressivement la composante verte de la LED
    {
        for (int ir = 255; ir > rouge; ir--)
        {
        analogWrite(redpin, ir);
        delay(10);
        }
        for (int ig = 255; ig > vert; ig--)
        {
        analogWrite(greenpin, ig);
        delay(10);
       }
       for (int ib = 255; ib > bleu; ib--)
       {
       analogWrite(bluepin, ib);
       delay(10);
       }

// Éteint progressivement la composante rouge
    for (int ir = 0; ir < rouge; ir++){
        analogWrite(redpin, ir);
        delay(10);
    }
    for (int ig = 0; ig < vert; ig++){
        analogWrite(greenpin, ig);
        delay(10);
    }
    for (int ib = 0; ib < bleu; ib++){
        analogWrite(bluepin, ib);
        delay(10);
    }
}
}

la particularité serait de récupérer les infos sur les couleurs de la led et de les retranscrire sur le clignottement progressif.
example je choisis ma couleur (ici orange) et j’obtiens un clignottement de cette couleur.
si je change ma couleur, le clignotement continue mais sur la nouvelle couleur.
dans ce but j’ai donc fais mon code, pour commencer, de la manière si dessus.
il semble parfaitement fonctionnel mais il execute chaque ligne séparément…
il me reste donc a comprendre comment les lancer simultanément…

si quelqu’un pouvais me guider sur la bonne voie… :smiley:

Cela peut faire environ (non testé):

if (fondu)  {
  // Allume progressivement les composantes de la LED
  {
        for (int i = 255; i > 0; i--)
        {
            analogWrite(redpin, map(i, 255, 0, 255, rouge));
            analogWrite(bluepin, map(i, 255, 0, 255, bleu));
            analogWrite(greenpin, map(i, 255, 0, 255, vert));
            delay(10);
        }
  // Éteint progressivement les composantes
        for (int i = 0; i < 255; i++)
        {
            analogWrite(redpin, map(i, 0, 255, 0, rouge));
            analogWrite(bluepin, map(i, 0, 255, 0, bleu));
            analogWrite(greenpin, map(i, 0, 255, 0, vert));
           delay(10);
        }

Super!
Merci Vileroi!!!
c'est presque parfait!
le temps de rebidouiller un peu ton code pour peaufiner les détails et je retransmet ce qui a marché.
Merci encore!
:grinning:

ça a été vite! :smiley:

j’ai juste eut besoin d’inverser les caractères pour éteindre.
il affichait du blanc, puis la couleur et s’étaignait.

Merci énormément!!!
:smiley: :smiley: :smiley:

 if (fondu)  {

  // Allume progressivement les composantes de la LED
  {
        for (int i = 255; i > 0; i--)
        {
            analogWrite(redpin, map(i, 255, 0, 255, rouge));
            analogWrite(bluepin, map(i, 255, 0, 255, bleu));
            analogWrite(greenpin, map(i, 255, 0, 255, vert));
            delay(10);
        }
  // Éteint progressivement les composantes
        for (int i = 0; i < 255; i++)
        {
            analogWrite(redpin, map(i, 0, 255, rouge, 255));
            analogWrite(bluepin, map(i, 0, 255, bleu, 255));
            analogWrite(greenpin, map(i, 0, 255, vert, 255));
           delay(10);
        }
  }
}

De rien...

Je donne l'idée, après pour les fondus au noir ou au blanc, les vitesses.... c'est effectivement un ajustage à faire.

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