Projet Scanner 3D

Bonjour, nous réalisons en ce moment un scanner 3D, pour cela nous utilisons une carte arduino.
Nous avons créé un programme pour automatiser le scanner, le fonctionnement ce fait par un appareil photo qui est enclenché grâce à un servo moteur, puis une plateforme rotative permet de faire tourner l'objet avec un moteur pas à pas afin de prendre un cliché tous les 20°.

Le programme a était réalisé sans soucis, sauf que nous voulons mettre une boucle afin que celui ci ce répète 18 fois mais le boucle ne fonctionne pas.

#include  <Servo.h>
#define pinEnable 13 
#define pinStep    9 
#define pinDir     8 

const int potar = 0;
Servo monServo;

void setup(){
  {
    Serial.begin(9600);
    Serial.println("Test A4988");

    pinMode( pinEnable, OUTPUT );
    pinMode( pinDir   , OUTPUT );
    pinMode( pinStep  , OUTPUT );
  }
  monServo.attach(2);
  Serial.begin(9600); 
}

void loop(){
  [color=red]for ( int z=1; z<5; z++)[/color]{
    {
      int val = analogRead(potar);
      delay (2000);    
      int angle = map(val, 0, 1023,0, 180);  
      monServo.write(0);
    }

    int i = 0;

    digitalWrite( pinDir   , HIGH); 
    digitalWrite( pinStep  , LOW);  

    {
      delay(3000);
      for( i=0; i<200; i++){
        {
          Serial.println( i );
          digitalWrite( pinStep, HIGH );
          delay( 10 );
          digitalWrite( pinStep, LOW );
          delay( 10 );
        }
      }
    }

    Serial.println("Axe bloqué");
    delay( 5000 );

    Serial.println("Deblocage axe");
    digitalWrite( pinEnable, HIGH ); 

    Serial.println("Fin de programme");
  }
}

Salut,

Merci de mettre le code entre balises codes </> en haut a gauche.

La boucle surlignée en rouge est sensée se répéter 4 fois et non 18. Qu'est ce qui ne fonctionnes pas ?

Il y a un empilage de parenthèses bizarres lignes 36 à 47. Il te faut utiliser la fonction "Formatage automatique" de l'IDE (Ctrl T) pour vraiment lire le code correctement

Effectivement j'avais mis qu'elle se répète 4 fois juste pour faire des tests, et le problème est que le programme ne s'éxécute qu'une seule fois.
La bouche en rouge n'est pas pris en compte par le programme.

Salut,
Il me semble que ta boucle z s'exécute bien 4 fois mais les serial.print que tu fais à la fin sont hors boucle z, donc ils ne s'exécute qu'une fois.
Bonne chance.

J'ai procéder par sous programme en mettant une boucle ''compteur'' mais une fois de plus le programme ne s'éxécute qu'une seule fois.

#include  <Servo.h>
#define pinEnable 13 
#define pinStep    9 
#define pinDir     8 

const int potar = 0;
Servo monServo;

void setup(){
  {
    Serial.begin(9600);
    Serial.println("Test A4988");

    pinMode( pinEnable, OUTPUT );
    pinMode( pinDir   , OUTPUT );
    pinMode( pinStep  , OUTPUT );
  }
  monServo.attach(2);
  Serial.begin(9600); 
}

void loop(){
  for(int compteur = 0; compteur < 18; compteur++){
    servomoteur();
    delay(3000);
    plateau ();
  }
}

void servomoteur () 
{
  int val = analogRead(potar);
  delay (2000);    
  int angle = map(val, 0, 1023,0, 180);  
  monServo.write(0);
}

void plateau () 
{

  digitalWrite( pinDir   , HIGH); 
  digitalWrite( pinStep  , LOW);  

  {
    for( int i=0; i<200; i++){
      {
        Serial.println( i );
        digitalWrite( pinStep, HIGH );
        delay( 10 );
        digitalWrite( pinStep, LOW );
        delay( 10 );
      }
    }
  }

  Serial.println("Axe bloqué");
  delay( 5000 );

  Serial.println("Deblocage axe");
  digitalWrite( pinEnable, HIGH ); 

  Serial.println("Fin de programme");

}

Bonjour,

A quoi tu vois que ton programme ne s'exécute qu'une fois?
De toute façon comme il est dans la loop, il va s'exécuter un nombre infini de fois.

Vire la ligne ' Serial.println( i );' car ça métonnerait que tu vois correctement les autres traces noyées dans l'affichage de cette valeur en continu.

Pour résumer, j'ai un servo moteur qui doit tourner à 90° et revenir à sa position, ensuite mon moteur pas à pas doit faire 200 pas, lorsque je lance le programme j'aimerais que cette boucle se répète 18 fois sauf que le servo moteur et le moteur pas à pas ne s'éxécute qu'une seule fois.

Et les traces sur le moniteur série, elles s'affichent combien de fois?

bonjour,
aucun sens ce code

  {
    for( int i=0; i<200; i++){
      {

C'est bon ! j'ai trouvé le problème, dans le programme, je bloque l'axe de mon moteur pas à pas, j'ai sortie cette partie de la boucle en la mettant à la fin.