Incrementation

Bonjour

Je n 'arrive pas a faire en sorte que mon void led se lance se répéte 25 fois(donc clignote 25 fois)
puis lance le void servo pour activer mon servo moteur.Les deux fonctionne en même temps et pas un part un.

Merci

#include <Servo.h>
 
Servo monServo;
int vitesse;
int angle;

const int angleMin  = 1;
const int angleMax = 179;
void led(void);
void servo(void);
// the setup function runs once when you press reset or power the board
void setup() {
 
  {
    monServo.attach(5);
    angle = angleMin;
    vitesse = 4;
}
  // initialize digital pin 13 as an output.
  pinMode(2, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {

   led();
   for (int ledCompteur=0;ledCompteur<25;ledCompteur++)
   servo();
  }

 void led(void){
  digitalWrite(2, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(100);              // wait for a second
  digitalWrite(2, LOW);    // turn the LED off by making the voltage LOW
  delay(100);              // wait for a second
 }


void  servo(void){
   
    monServo.write(angle);
    /* calcule le nouvel angle */
    angle = angle + vitesse;
 
    if (angle > angleMax) {
        /*
         * le nouvel angle dépasse le maximum
         * on le recale au maximum et on inverse la vitesse
         */
       angle = angleMax;
        vitesse = -4;
    }
    else if (angle < angleMin) {
        /*
         * le nouvel angle dépasse le minimum
         * on le recale au minimum et on inverse la vitesse
         */
        angle = angleMin;
        vitesse = 4;
    }
    delay(75);

}

Quand tu met :

void led (void)

Il faut mettre ledcompteur dans la parenthèse.

Une petite précision.
Je dois faire ?

void led (ledcompteur)
ou
void led (for (int ledCompteur=0;ledCompteur<25;ledCompteur++))

et

dans la déclaration tout en haut ou dans le loop voir les deux mon général ?

PS : je peux avoir c# pour les nuls. Est ce que ça correspond ou vous avez autre chose à me proposer en livre de chevet ?

Merci.

Bonjour,

Ta déclaration void led(void); est correcte bien qu'inutile avec l'ide arduino, mais indispensable en c++ standard.

Je n'ai pas très bien compris ce que tu veux faire si tu veux faire clignoter 25 fois la led tu peux faire

for (int i=0; i<25; i++)
 led();

C# est assez différent de C++ (bien qu'il y ait des ressemblances). Je pense que ça risque plutot te dérouter que t'aider.

Je veux juste que la led clignote x fois et que après le moteur s exécute une fois et ainsi de suite.
j'ai modifier comma ça ,malheureusement la led et le moteur s’exécute en même temps.
Comme je suis un gros noob merci de développer vos réponses

#include <Servo.h>

Servo monServo;
int vitesse;
int angle;

const int angleMin  = 5;
const int angleMax = 179;
void led(void);
void servo(void);
// the setup function runs once when you press reset or power the board
void setup() {

 {
   monServo.attach(5);
   angle = angleMin;
   vitesse = 25;
}
 // initialize digital pin 13 as an output.
 pinMode(2, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {

  led();
 servo();
 }

void led(){

  for (int led=0;led<25;led++)
 
 digitalWrite(2, HIGH);   // turn the LED on (HIGH is the voltage level)
 delay(100);              // wait for a second
 digitalWrite(2, LOW);    // turn the LED off by making the voltage LOW
 delay(100);              // wait for a second
}


void  servo(void){
  for (int servo=0;servo<1;servo++)
   monServo.write(angle);
   /* calcule le nouvel angle */
   angle = angle + vitesse;

   if (angle > angleMax) {
       /*
        * le nouvel angle dépasse le maximum
        * on le recale au maximum et on inverse la vitesse
        */
      angle = angleMax;
       vitesse = -179;
   }
   else if (angle < angleMin) {
       /*
        * le nouvel angle dépasse le minimum
        * on le recale au minimum et on inverse la vitesse
        */
       angle = angleMin;
       vitesse = 179;
   }
   delay(500);

}

Si j'ai bien compris ce que tu veux faire, ton premier programme était presque correct sauf que la boucle for est mal placée et exécute 25 fois servo() au lieu d'exécuter 25 fois led()
Déplace ton for comme ceci:

#include <Servo.h>

Servo monServo;
int vitesse;
int angle;

const int angleMin  = 1;
const int angleMax = 179;
void led(void);
void servo(void);
// the setup function runs once when you press reset or power the board
void setup() {

  {
    monServo.attach(5);
    angle = angleMin;
    vitesse = 4;
  }
  // initialize digital pin 13 as an output.
  pinMode(2, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {

  for (int ledCompteur = 0; ledCompteur < 25; ledCompteur++)
    led();
  servo();
}

void led(void) {
  digitalWrite(2, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(100);              // wait for a second
  digitalWrite(2, LOW);    // turn the LED off by making the voltage LOW
  delay(100);              // wait for a second
}


void  servo(void) {

  monServo.write(angle);
  /* calcule le nouvel angle */
  angle = angle + vitesse;

  if (angle > angleMax) {
    /*
       le nouvel angle dépasse le maximum
       on le recale au maximum et on inverse la vitesse
    */
    angle = angleMax;
    vitesse = -4;
  }
  else if (angle < angleMin) {
    /*
       le nouvel angle dépasse le minimum
       on le recale au minimum et on inverse la vitesse
    */
    angle = angleMin;
    vitesse = 4;
  }
  delay(75);

}

Mets ton code entre balises comme dans ton premier message.

SUPER sa fonctionne mais j'ai du couper ma carte nano car j ai du trop la moddifier depuis 6h du mat et j'ai
ajouter une boucle for pour que l execution de de l instruction servo soit complete j'ai changer le delay de 75 a 600 aussi.
Encore un grand merci a toi pour ton aide.

Sinon je voudrais marquer une pause 15 seconds entre l'aller et le retour du servo.A ton avis j'utilise quoi
un for ou un delay voir autre chose ?

je post le code si sa peux aider quelqu un.

#include <Servo.h>

Servo monServo;
int vitesse;
int angle;

const int angleMin  = 1;
const int angleMax = 179;
void led(void);
void servo(void);
// the setup function runs once when you press reset or power the board
void setup() {

  {
    monServo.attach(5);
    angle = angleMin;
    vitesse = 4;
  }
  // initialize digital pin 13 as an output.
  pinMode(2, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {

  for (int ledCompteur = 0; ledCompteur < 25; ledCompteur++)
    led();
    for (int servoCompteur = 0; servoCompteur < 2; servoCompteur++)
  servo();
}

void led(void) {
  digitalWrite(2, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(100);              // wait for a second
  digitalWrite(2, LOW);    // turn the LED off by making the voltage LOW
  delay(100);              // wait for a second
}


void  servo(void) {

  monServo.write(angle);
  /* calcule le nouvel angle */
  angle = angle + vitesse;

  if (angle > angleMax) {
    /*
       le nouvel angle dépasse le maximum
       on le recale au maximum et on inverse la vitesse
    */
    angle = angleMax;
    vitesse = -179;
  }
  else if (angle < angleMin) {
    /*
       le nouvel angle dépasse le minimum
       on le recale au minimum et on inverse la vitesse
    */
    angle = angleMin;
    vitesse = 179;
  }
  delay(500);

}

Su ton programme n'a rien d'autre à faire, il suffit d'ajouter delay(15000) quand tu inverses le sens de vitesse.

void  servo(void) {

  monServo.write(angle);
  /* calcule le nouvel angle */
  angle = angle + vitesse;

  if (angle > angleMax) {
    /*
       le nouvel angle dépasse le maximum
       on le recale au maximum et on inverse la vitesse
    */
    angle = angleMax;
    vitesse = -4;
    delay(15000);
  }
  else if (angle < angleMin) {
    /*
       le nouvel angle dépasse le minimum
       on le recale au minimum et on inverse la vitesse
    */
    angle = angleMin;
    vitesse = 4;
    delay(15000);
  }
  delay(500);

}

Je n'ai pas compris pourquoi tu as remplacé 4 par 179 dans la valeur de vitesse dans ta dernière version.

merci