Exécution d'une fonction pendant un certain délai


bonjour,

pour mon projet de si, je dois contrôler un moteur en fonction d'un profil bien particulier. je m'explique : ce profil possède une accélération de 0 à 12cm/s en 3s, une vitesse max de 12cm/s pendant 7s et une décélération en 1s. j'ai déjà fais tous les calculs pour determiner l'alimentation du moteur pour atteindre les 12cm/s à savoir 6v si je ne me trompe pas.

voici mon début de code :

code: [select]
int m1 = 4;         // pin shield moteur --> état du moteur                 
int e1 = 5;         // pin shield moteur --> vitesse du moteur
int etat = 0;       // vitesse du moteur : 0 --> 0v ; 255 --> 12v
int etape = 0;      // etat de la course : 0 --> initialisation ; 1 --> debut ; 2 --> fin

void setup() {
  serial.begin(9600);
  pinmode(m1,output);
}

void loop() {
 if (etape == 0) {
 initialisation();
 }
 else if (etape == 1) {
 course();
 }
 else if (etape == 2) {
 fin();
 }
}

void initialisation() {
  serial.println("initialisation de la caméra");
  serial.println("---------------------------");
  serial.println("");
 
  digitalwrite(m1,low);
  analogwrite(e1,0);
  etape = 1;
}

void course() {
  serial.println("début de la course de la caméra");
  serial.println("-------------------------------");
  serial.println("");
   
  for(etat; etat < 128; etat++) {                                       
    digitalwrite(m1,high); 
    analogwrite(e1,etat);                         // le moteur est alimenté à 6v, la camera se deplace à 0,12m/s
  }
  etape = 2;
  delay(7000);
}

void fin() {
  serial.println("fin de la course de la caméra");
  serial.println("-----------------------------");
  serial.println("");
   
  for(etat; etat > 0; etat--) {                                               
    digitalwrite(m1,high); 
    analogwrite(e1,etat);                                     // le moteur est alimenté à 0v, la camera est à l'arret
  }
  digitalwrite(m1,low);
  etape = 3;
}


mais ce qu'il me faut c'est exécuter la boucle de course() pendant 3s afin d'avoir mon accélération.
en espérant avoir été assez claire.

merci d'avance.

vos boucles for vont s'exécuter super vite et for(etat; etat > 0; etat--) {    vous ne croyez pas qu'il manque un truc dans la première partie?

concrètement pour bien gérer cela il faudrait soit attendre un peu dans la boucle for, soit utiliser millis() pour contrôler ce qu'il se passe et quand chnager de vitesse


Arduino Forum > International > Français (Moderators: jfs, Snootlab) > Exécution d'une fonction pendant un certain délai


arduino

Comments

Popular posts from this blog

Error compiling for board Arduino/Genuino Uno.

Installation database is corrupt

esp8266 (nodemcu 0.9) client.write très lent ???