Aide programme arduino

salut tout le monde alors je suis nouveau dans le monde de l'arduino

j'ai effectuer un code qui fait changer de couleur une led RGB

//i/o pin declarations
int rpin = 9;
int gpin = 11;
int bpin = 10;

//function prototypes
void solid(int r, int g, int b, int t);
void fade(int r1, int g1, int b1, int r2, int g2, int b2, int t);

void setup()
{
//empty
}
void loop()
{
  //colour sequence instructions

  //Example sequence one: Rainbow fade over 12 seconds:
  solid(255,0,0,500); // Maintain pure red 1 sec
  fade(255,0,0,0,255,0,1500); //fade from red to green over 3 seconds
  solid(0,255,0,1000); // Maintain pure green 1 sec
  fade(0,255,0,0,0,255,1500); //fade from green to blue over 3 seconds
  solid(0,0,255,1000); // Maintain pure blue 1 sec
  fade(0,0,255,255,0,0,1500); //fade from blue to red over 3 seconds
}

//function holds RGB values for time t milliseconds
void solid(int r, int g, int b, int t)
{

  //map values - arduino is sinking current, not sourcing it
  r = map(r, 0, 255, 255, 0);
  g = map(g, 0, 255, 255, 0);
  b = map(b, 0, 255, 255, 0);

  //output
  analogWrite(rpin,r);
  analogWrite(gpin,g);
  analogWrite(bpin,b);

  //hold at this colour set for t ms
  delay(t);
}

//function fades between two RGB values over fade time period t
//maximum value of fade time = 30 seconds before gradient values
//get too small for floating point math to work? replace floats
//with doubles to remedy this?
void fade(int r1, int g1, int b1, int r2, int g2, int b2, int t)
{
  float r_float1, g_float1, b_float1;
  float r_float2, g_float2, b_float2;
  float grad_r, grad_g, grad_b;
  float output_r, output_g, output_b;

  //declare integer RGB values as float values
  r_float1 = (float) r1;
  g_float1 = (float) g1;
  b_float1 = (float) b1;
  r_float2 = (float) r2;
  g_float2 = (float) g2;
  b_float2 = (float) b2;

  //calculate rates of change of R, G, and B values
  grad_r = (r_float2-r_float1)/t;
  grad_g = (g_float2-g_float1)/t;
  grad_b = (b_float2-b_float1)/t;

  //loop round, incrementing time value "i"
  for ( float i=0; i<=t; i++ )
  {
    output_r = r_float1 + grad_r*i;
    output_g = g_float1 + grad_g*i;
    output_b = b_float1 + grad_b*i;

    //map values - arduino is sinking current, not sourcing it
    output_r = map (output_r,0,255,255,0);
    output_g = map (output_g,0,255,255,0);
    output_b = map (output_b,0,255,255,0);

    //output
    analogWrite(rpin, (int)output_r);
    analogWrite(gpin, (int)output_g);
    analogWrite(bpin, (int)output_b);

    //hold at this colour set for 1ms
    delay(1);
  }
}

voila et j'ai aussi utiliser l'exemple des servos que j'ai modifier

// Sweep
// by BARRAGAN <http://barraganstudio.com> 
// This example code is in the public domain.


#include <Servo.h> 
 
Servo myservo;  // create servo object to control a servo 
                // a maximum of eight servo objects can be created 
 
int pos = 0;    // variable to store the servo position 
 
void setup() 
{ 
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object 
} 
 
 
void loop() 
{ 
  for(pos = 0; pos < 40; pos += 1)  // goes from 0 degrees to 180 degrees 
  {                                  // in steps of 1 degree 
    myservo.write(pos);              // tell servo to go to position in variable 'pos' 
    delay(7);                       // waits 15ms for the servo to reach the position 
  } 
  for(pos = 40; pos>=1; pos-=1)     // goes from 180 degrees to 0 degrees 
  {                                
    myservo.write(pos);              // tell servo to go to position in variable 'pos' 
    delay(7);                       // waits 15ms for the servo to reach the position 
  } 
}

donc voila mon but est de faire fonctionner les deux programmes en meme temps sauf que je n'arrive pas a ecrire un code viable pour ce programme....

j'espere que vous pourrez m'aidez merci d'avoir lu :slight_smile:

Sauf que si on sait pas ce que tu veux faire ...

Salut sparazell,

Deux précautions importantes, à première vue:

  1. Tes deux sketches utilisent la pin 9: il faudra donc brancher le servo ailleurs (par exemple à la pin 6).

  2. Il y a aussi les quelques delay() utilisés dans les deux sketches qui pourraient être problématiques: si tu les laisses tel quel, je suppose que le servo et la LED s'exécuteront un après l'autres, mais pas en même temps. La méthode proposée dans l'incontournable exemple "BlinkWithoutDelay" serait probablement une bonne piste.

Ceci dit, envoies-nous ta tentative de sketch combiné, même si ça ne fonctionne pas: à partir de là, ce sera plus facile de t'aider.

alors merci a vous pour votre reponse rapide

ce que je compte faire c'est un tout petit projet pour une amie fan du celebre "nyan cat" donc mon but est de faire un arc en ciel de couleurs qui changent en fonction du temps (fait dans le 1er programme) et le second c'est juste un servo qui fait des ondulations rapide pour rappeler le mouvement du chat (2nd programme).

voila je sais que c'est inutile mais bon...

ypelletier: 1)merci bon conseil peut etre pour ca que ca fonctionne pas
2)et si les deux sketches doivent s'executer en meme temps

je vais vous poster mon code a mon retour de cours

sparazell:
2)et si les deux sketches doivent s'executer en meme temps

justement la réponse est dans le message de ypelletier

La méthode proposée dans l'incontournable exemple "BlinkWithoutDelay" serait probablement une bonne piste

BlinkWithoutDelay présente une méthode qui permet de gérer des événements liés au temps mais sans utiliser delay qui bloque l'exécution des autres tâches.

Pour compléter les réponses précédentes, voici un passage de la "Bible" qui devrait t'éclairer sur les limites d'utilisation de la fonction delay(), et sur l'intérêt de la fonction millis() dans ce cas de figure.

http://www.siteduzero.com/sciences/tutoriels/arduino-pour-bien-commencer-en-electronique-et-en-programmation/fonction-millis