#define RED 9 //patte rouge
#define GREEN 10 // patte verte
#define BLEU 11 //patte bleu
#define TAB 3 //taille des tableau
int rouge[TAB] = {0, 255, 255}; //couleur rouge
int blue[TAB] = {255, 255, 0}; //couleur bleu
int vert[TAB] = {255, 0, 255}; //couleur verte
int noir[TAB] = { 255,255,255};
int iblc = 0; //variable pour les boucle for
int cRecu = 0; //
int icouleur1p[3]; // valeur analogique des led pour la monté en intensiter
void led (int iTab[3]) // fonction led qui allume la led avec la couleur decrite par RGB
{
analogWrite(RED, iTab[0]); //led rouge
analogWrite(GREEN, iTab[1]);//led verte
analogWrite(BLEU, iTab[2]);//led bleu
}
void fade (int icouleur1[3]) // monté puis descente en intansiter
{
led(noir); //led off
icouleur1p = {255,255,255}; //valeur de depart de la led soit noir
do // faire
{
if(icouleur1p[0] > icouleur1[0]) //si couleur led rouge > a couleur led rouge voulue
{
icouleur1p[0] = icouleur1p[0] - 1; // alors faire moins 1 a la led rouge
}
if(icouleur1p[1] > icouleur1[1]) //si couleur verte > a couleur led verte voulue
{
icouleur1p[1] = icouleur1p[1] - 1; //alors faire moins 1 a la led verte
}
if(icouleur1p[2] > icouleur1[2]) //si couleur bleu > a couleur bleu voulue
{
icouleur1p[2] = icouleur1p[2] - 1; //alors faire moins 1 a les bleu;
}
led(icouleur1p); // changement de couleur de la led
delay(10); //delay de 10 pour la vitesse de transition
}while((icouleur1p[0]> icouleur1[0]) || (icouleur1p[1] > icouleur1[1]) || (icouleur1p[2] > icouleur1[2]));//tant que la couleur rouge verte est bleu n'est pas celle voulue
/*identique que avant mais la led diminue en intensiter*/
do
{
if(icouleur1p[0] < 255)
{
icouleur1p[0] = icouleur1p[0] + 1;
}
if(icouleur1p[1] < 255)
{
icouleur1p[1] = icouleur1p[1] + 1;
}
if(icouleur1p[2] < 255)
{
icouleur1p[2] = icouleur1p[2] + 1;
}
led(icouleur1p);
delay(10);
}while((icouleur1p[0] < 255) || (icouleur1p[1] < 255) || (icouleur1p[2] < 255));
}
void passage(int iav[3], int iap[3]) //transition d'une couleur a une autre
{
led(iav);//afficher la couleur de depart
do //faire
{
if(iav[0] > iap[0]) //si val rouge de la led > val rouge de la led voulue
{
iav[0]--; // faire -1 a la valeur de la led rouge
}
else if(iav[0] < iap[0]) // sinon si val de la led rouge < val de la led voulue
{
iav[0]++; //faire +1 a la valeur de la led rouge
}
if(iav[1] > iap[1]) //meme chose pour le vert
{
iav[1]--;
}
else if(iav[1] < iap[1])
{
iav[1]++;
}
if(iav[2] > iap[2]) //meme chose pour le bleu
{
iav[2]--;
}
else if(iav[2] < iap[2])
{
iav[2]++;
}
delay(10);
led(iav); // afficheur la valeur de la led modifier
}while(iav[0] != iap[0] || iav[1] != iap[1] || iav[2] != iap[2]);//tant que les couleur RGB sont diffrente des couleur voulue
}
void setup()
{
pinMode(RED, OUTPUT);
pinMode(GREEN, OUTPUT);
pinMode(BLEU, OUTPUT);
}
void loop()
{
passage(rouge, blue); //passage du rouge au bleu
delay(100); // temps d'attente
passage(rouge, vert); //passage du rouge au vert
}
Du premier coup d'oeil je ne vois pas où est le problème dans ton code...
Je te propose donc de faire les essais suivant et de rapporter ce que cela affiche :
Remplace ton void loop par :
void loop()
{
passage(rouge, vert); //passage du rouge au bleu
delay(100); // temps d'attente
passage(rouge, blue); //passage du rouge au vert
}
puis essais
void loop()
{
passage(rouge, blue); //passage du rouge au bleu
delay(100); // temps d'attente
passage(rouge, vert); //passage du rouge au vert
delay(100); // temps d'attente
passage(rouge, blue); //passage du rouge au vert
delay(100); // temps d'attente
passage(rouge, vert); //passage du rouge au vert
}
et essais
void loop()
{
passage(rouge, blue); //passage du rouge au vert
delay(100); // temps d'attente
passage(rouge, vert); //passage du rouge au vert
delay(100);
}
Le but étant de voir si c'est cas 1 : les couleurs rouge -> vert à rouge->bleu
cas 2 le fait de retourner dans le loop
cas 3 le fais de ne pas faire de delay
qui empeche de voir le rouge.
En fonction de ce que tu verras je pourrais peut être t'aider d'avantage ...
à bientôt !
( PS : Très important de commenter du coup j'ai pu comprendre ton programme en moins de 5 min alors qu'il m'aurait fallut une bonne trentaine de minute sinon ... et je sais pas si j'aurais pu prendre le temps ... )