Contrôle de led RGB via 4 Mosfet et PWM pin +4 pushbutton

Bonsoir tout le monde ! Moi c'est Martin, et j'ai un petit souçi de programmation sur le projet mentionné dans le subject donc j'aimerais obtenir un petit coup de pouce Svp :-[

voici le code que j'utilise (je dois mentionner que je ne suis pas grand connaisseur du language c++ et de la programmation en géréral)

const int BUTTON = 2;
const int BUTTON2 = 7;
const int BUTTON3 = 8;
const int BUTTON4 = 12;
const int RED     = 6;
const int BLUE    = 3;
const int GREEN   = 5;
 int FADE    = 10;
 int brightness   = 0;   
 int fadeAmount   = 5;
 int values       = 0;
 int fadeValue    = 0;   

void setup() 
{
pinMode (2, INPUT);
pinMode (7, INPUT);
pinMode (8, INPUT);
pinMode (12,INPUT);
pinMode (6, OUTPUT);
pinMode (3, OUTPUT);
pinMode (5, OUTPUT);

}

  void loop(void)

{
   if (digitalRead(BUTTON) ==HIGH)  

  
{ for (int fadeValue = 0 ; fadeValue <= 255; fadeValue += 10)
    {analogWrite(10, fadeValue);
    delay(100);}
    for (int fadeValue = 255 ; fadeValue >= 0; fadeValue -= 10) 
 {analogWrite(10, fadeValue);
    delay(100);}loop();}
   
   
    
       
   if (digitalRead(BUTTON2) == HIGH)

{analogWrite (FADE, values);
    digitalWrite(RED, LOW);
    digitalWrite(BLUE, LOW); 
    digitalWrite(GREEN, HIGH);
    delay (1000);
    digitalWrite(GREEN, LOW);
    delay (1000);
    loop();}

    

   if (digitalRead(BUTTON3) == HIGH)

{analogWrite (FADE, values);
    digitalWrite(GREEN, LOW);
    digitalWrite(BLUE, LOW);
    digitalWrite(RED, LOW);
    delay (5);
    digitalWrite(BLUE, HIGH);
    delay (250);
    digitalWrite(BLUE, LOW);
    digitalWrite(RED, HIGH);
    delay (250);
    digitalWrite(RED, LOW);
    digitalWrite(BLUE, HIGH);
    delay (250);
    digitalWrite(BLUE, LOW);
    digitalWrite(RED, HIGH);
    delay (250);
    digitalWrite(RED, LOW);
    digitalWrite(BLUE, HIGH);
    delay (250);
    digitalWrite(BLUE, LOW);
    digitalWrite(RED, HIGH);
    delay (250);
    digitalWrite(RED, LOW);
    digitalWrite(BLUE, HIGH);
    delay (250);
    digitalWrite(BLUE, LOW);
    digitalWrite(RED, HIGH);
    delay (250);
    digitalWrite(RED, LOW);
    digitalWrite(BLUE, HIGH);
    delay (250);
    digitalWrite(BLUE, LOW);
    digitalWrite(RED, HIGH);
    delay (250);
    loop();}   

   if (digitalRead(BUTTON4) == HIGH)

{analogWrite (FADE, values);
    digitalWrite(GREEN, LOW);
    digitalWrite(RED, LOW);
    digitalWrite(BLUE, HIGH);
    delay (30);
    digitalWrite(BLUE, LOW);
    delay (30);
    digitalWrite(BLUE, HIGH);
    delay (30);
    digitalWrite(BLUE, LOW);
    delay (30);
    digitalWrite(BLUE, HIGH);
    delay (30);
    digitalWrite(BLUE, LOW);
    delay (30);
    digitalWrite(BLUE, HIGH);
    delay (30);
    digitalWrite(BLUE, LOW);
    delay (30);
    digitalWrite(BLUE, HIGH);
    delay (30);
    digitalWrite(BLUE, LOW);
    delay (30);
    digitalWrite(BLUE, HIGH);
    delay (30);
    digitalWrite(BLUE, LOW);
    delay (30);
    digitalWrite(BLUE, HIGH);
    delay (30);
    digitalWrite(BLUE, LOW);
    delay (30);
    digitalWrite(BLUE, HIGH);
    delay (30);
    digitalWrite(GREEN, LOW);
    digitalWrite(BLUE, LOW);
    digitalWrite(RED, HIGH);
    delay (30);
    digitalWrite(RED, LOW);
    delay (30);
    digitalWrite(RED, HIGH);
    delay (30);
    digitalWrite(RED, LOW);
    delay (30);
    digitalWrite(RED, HIGH);
    delay (30);
    digitalWrite(RED, LOW);
    delay (30);
    digitalWrite(RED, HIGH);
    delay (30);
    digitalWrite(RED, LOW);
    delay (30);
    digitalWrite(RED, HIGH);
    delay (30);
    digitalWrite(RED, LOW);
    delay (30);
    digitalWrite(RED, HIGH);
    delay (30);
    digitalWrite(RED, LOW);
    delay (30);
    digitalWrite(RED, HIGH);
    delay (30);
    digitalWrite(RED, LOW);
    delay (30);
    digitalWrite(RED, HIGH);
    delay (30);
    loop();}  
else 
{ analogWrite (FADE, values);
    digitalWrite(GREEN, HIGH);
    digitalWrite(BLUE, HIGH);
    digitalWrite(RED, HIGH);
    delay (1);
}
}

Explication rapide

J'ai (else) qui roule quand les 4 pushbuttons sont au (State LOW)
J'appuie sur le (BUTTON) (PWM pin 2) donc (BUTTON est a State HIGH)
rien ne se produit

par contre (BUTTON2) (BUTTON3) (BUTTON4) A1 les chagements de State sont détecté

la ou je m'y perds est lorsque la (loop():wink: de soit (BUTTON2) (BUTTON3) (BUTTON4)
est activée et que je change le State de (BUTTON) avant la fin de la loop();
la il sera détecté sans problème

Si la loop(); peu importe laquelle se termine avant le chagement de State de (BUTTON)
Résultat rien !

Donc ma grosse question est ... Pourquoi le changement de State de (BUTTON)
n'est jamais détecté a moins qu'une des trois autres loop(); soit active
À noter que j'ai essayé de looper le (else) mais même résultat !

Je ne sais pas si j'ai été assez compréhensible alors espérons que oui haha

Bonne soirée a vous et merci à l'avance à l'âme charitable qui voudra bien se pencher la-dessus :wink:

merci beaucoup encore

Bon et bien j'ai continué à chercher et à chercher et finalement j'ai changé un tout petit peu le code et découvert sur mon circuit il manquerait un pont de diode pour le 4 mosfet (celui qui fade mes led).
Avec un pont de diode mon problème est réglé et le code fait exactement ce que je souhaitais :slight_smile:

maintenant que ceci fonctionne je vais remplacer les 4 pushbuttons par un seul et introduire
dans le code (int buttonPushCounter = 0;) et le configurer pour alterner entre les 4 modes (BUTTONState == HIGH) (if) et le retour au (BUTTONState == LOW) qui est le (else)

donc tout est bien qui fini bien Bonne nuit tout le monde ! (Quebec)

const int BUTTONnul    = 9;
const int BUTTON       = 2;
const int BUTTON2      = 7;
const int BUTTON3      = 8;
const int BUTTON4      = 12;
const int RED          = 6;
const int BLUE         = 3;
const int GREEN        = 5;
 int FADE              = 10;
 int brightness        = 0;    
 int fadeAmount        = 5;
 int values            = 0;
 int fadeValue         = 0;      
 int BUTTONState       = 0;         
   
 
void setup() 
{
pinMode (2, INPUT);
pinMode (7, INPUT);
pinMode (8, INPUT);
pinMode (9, INPUT);
pinMode (12,INPUT);
pinMode (6, OUTPUT);
pinMode (3, OUTPUT);
pinMode (5, OUTPUT);

}

void loop()
{

 BUTTONState = digitalRead(BUTTON);
  if (BUTTONState == HIGH)  

{   
    digitalWrite(GREEN, LOW);
    digitalWrite(BLUE, LOW);
    digitalWrite(RED, LOW);
    for (int fadeValue = 0 ; fadeValue <= 255; fadeValue += 10)
{analogWrite(10, fadeValue);
    delay(100);}
    for (int fadeValue = 255 ; fadeValue >= 0; fadeValue -= 10) 
{analogWrite   (10, fadeValue);
    delay(100);}
    loop();}
    
   
 BUTTONState = digitalRead(BUTTON2);
  if (BUTTONState == HIGH)

{analogWrite    (FADE, values);
    digitalWrite(RED, LOW);
    digitalWrite(BLUE, LOW); 
    digitalWrite(GREEN, HIGH);
    delay (1000);
    digitalWrite(GREEN, LOW);
    delay (1000);
    loop();}

 BUTTONState = digitalRead(BUTTON3);
  if (BUTTONState == HIGH)

{analogWrite    (FADE, values);
    digitalWrite(GREEN, LOW);
    digitalWrite(BLUE, LOW);
    digitalWrite(RED, LOW);
    delay (5);
    digitalWrite(BLUE, HIGH);
    delay (250);
    digitalWrite(BLUE, LOW);
    digitalWrite(RED, HIGH);
    delay (250);
    digitalWrite(RED, LOW);
    digitalWrite(BLUE, HIGH);
    delay (250);
    digitalWrite(BLUE, LOW);
    digitalWrite(RED, HIGH);
    delay (250);
    digitalWrite(RED, LOW);
    digitalWrite(BLUE, HIGH);
    delay (250);
    digitalWrite(BLUE, LOW);
    digitalWrite(RED, HIGH);
    delay (250);
    digitalWrite(RED, LOW);
    digitalWrite(BLUE, HIGH);
    delay (250);
    digitalWrite(BLUE, LOW);
    digitalWrite(RED, HIGH);
    delay (250);
    digitalWrite(RED, LOW);
    digitalWrite(BLUE, HIGH);
    delay (250);
    digitalWrite(BLUE, LOW);
    digitalWrite(RED, HIGH);
    delay (250);
    loop();}   

   BUTTONState = digitalRead(BUTTON4);
  if (BUTTONState == HIGH)

{analogWrite    (FADE, values);
    digitalWrite(GREEN, LOW);
    digitalWrite(RED, LOW);
    digitalWrite(BLUE, HIGH);
    delay (30);
    digitalWrite(BLUE, LOW);
    delay (30);
    digitalWrite(BLUE, HIGH);
    delay (30);
    digitalWrite(BLUE, LOW);
    delay (30);
    digitalWrite(BLUE, HIGH);
    delay (30);
    digitalWrite(BLUE, LOW);
    delay (30);
    digitalWrite(BLUE, HIGH);
    delay (30);
    digitalWrite(BLUE, LOW);
    delay (30);
    digitalWrite(BLUE, HIGH);
    delay (30);
    digitalWrite(BLUE, LOW);
    delay (30);
    digitalWrite(BLUE, HIGH);
    delay (30);
    digitalWrite(BLUE, LOW);
    delay (30);
    digitalWrite(BLUE, HIGH);
    delay (30);
    digitalWrite(BLUE, LOW);
    delay (30);
    digitalWrite(BLUE, HIGH);
    delay (30);
    digitalWrite(GREEN, LOW);
    digitalWrite(BLUE, LOW);
    digitalWrite(RED, HIGH);
    delay (30);
    digitalWrite(RED, LOW);
    delay (30);
    digitalWrite(RED, HIGH);
    delay (30);
    digitalWrite(RED, LOW);
    delay (30);
    digitalWrite(RED, HIGH);
    delay (30);
    digitalWrite(RED, LOW);
    delay (30);
    digitalWrite(RED, HIGH);
    delay (30);
    digitalWrite(RED, LOW);
    delay (30);
    digitalWrite(RED, HIGH);
    delay (30);
    digitalWrite(RED, LOW);
    delay (30);
    digitalWrite(RED, HIGH);
    delay (30);
    digitalWrite(RED, LOW);
    delay (30);
    digitalWrite(RED, HIGH);
    delay (30);
    digitalWrite(RED, LOW);
    delay (30);
    digitalWrite(RED, HIGH);
    delay (30);
    loop();}

  else 

{analogWrite     (FADE, values);
    digitalWrite (GREEN, HIGH);
    digitalWrite (BLUE, HIGH);
    digitalWrite (RED, HIGH);
    delay (1);}  
}