Problème d'utilisation de la fonction millis()

Bonjour à tous, petit problème dans mon code je souhaite commander la rotation d'un moteur pas à pas à

des intervalles de temps différents les uns des autres.

Ma 1ère condition est respectée mon moteur tourne au bout d'environ le temps de la 1ère tempo mais

ensuite plus rien.

Voilà si quelqu'un comprends où est l'erreur, parce que là vraiment je sèche….

Merci d'avance de votre aide.

Voici mon code:

//int pinPot = A0;
//int valPot =0;

const int pinMot8 = 8;
const int pinMot9 = 9;
const int pinMot10 = 10;
const int pinMot11 = 11;
int compteur=400;      
const unsigned long tempo = 4000;
const unsigned long tempo2 = 15000;
unsigned long previousMillis = 0;
unsigned long currentMillis = millis();

void setup ()

{
 Serial.begin(9600);
 pinMode(pinMot8, OUTPUT);
 pinMode(pinMot9, OUTPUT);
 pinMode(pinMot10, OUTPUT);
 pinMode(pinMot11, OUTPUT);
}

void loop()
 
 { currentMillis = millis();
   /* Serial.print("Time:   ");
    Serial.println(currentMillis);
   delay(1000); */
                 
 if(currentMillis > tempo) 
  
   {
    previousMillis = millis();
   
   
   while(compteur>0)
   
 {  compteur--;
 
 digitalWrite(pinMot8, HIGH);
 digitalWrite(pinMot11,HIGH);
 digitalWrite(pinMot9,LOW); 
 digitalWrite(pinMot10,LOW);
 delay(5);
 digitalWrite(pinMot8,LOW);
 digitalWrite(pinMot11,LOW);
 digitalWrite(pinMot9,HIGH);
 digitalWrite(pinMot10,HIGH); 
 delay(5);
 }
   }  
 digitalWrite(pinMot8,LOW);
 digitalWrite(pinMot9,LOW);
 digitalWrite(pinMot10,LOW);
 digitalWrite(pinMot11,LOW);    
    
 if(millis() > 15000) 
  
  { while(compteur>0)
   
 {  compteur--;
 
 digitalWrite(pinMot8, HIGH);
 digitalWrite(pinMot11,HIGH);
 digitalWrite(pinMot9,LOW); 
 digitalWrite(pinMot10,LOW);
 delay(5);
 digitalWrite(pinMot8,LOW);
 digitalWrite(pinMot11,LOW);
 digitalWrite(pinMot9,HIGH);
 digitalWrite(pinMot10,HIGH); 
 delay(5);
 }  
 digitalWrite(pinMot8,LOW);
 digitalWrite(pinMot11,LOW);
 digitalWrite(pinMot9,LOW);
 digitalWrite(pinMot10,LOW); 
   }
 }

C’est indenté avec les pieds et pas dans la balise de code mais il semblerait que vous ne changiez pas la valeur de compteur une fois qu’il a atteint 0 dans le premier while...

Votre truc avec millis() est bizarre aussi, première fois vous utilisez une variable et une constante et ensuite directement millis() et une valeur littérale dans le code (alors que vous aviez défini tempo2 pour cela)... ça fait moche

Ensuite je ne sais pas trop ce que vous cherchez à faire, une fois que millis() aura passé tempo2 le if sera vrai pour environ les 50 prochains jours...

Merci pour la réponse

Désolé le vrai code c celui là l'autre était un test, mais celui là non plus ne rentre pas dans la condition 2


[//int pinPot = A0;
//int valPot =0;

const int pinMot8 = 8;
const int pinMot9 = 9;
const int pinMot10 = 10;
const int pinMot11 = 11;
int compteur=400;      
const unsigned long tempo = 4000;
const unsigned long tempo2 = 15000;
unsigned long previousMillis = 0;
unsigned long currentMillis = millis();

void setup ()

{
  Serial.begin(9600);
  pinMode(pinMot8, OUTPUT);
  pinMode(pinMot9, OUTPUT);
  pinMode(pinMot10, OUTPUT);
  pinMode(pinMot11, OUTPUT);
}

void loop()
  
  { currentMillis = millis();
    /* Serial.print("Time:   ");
     Serial.println(currentMillis);
    delay(1000); */
                  
  if(currentMillis > tempo) 
   
    {
     previousMillis = millis();
    
    
    while(compteur>0)
    
  {  compteur--;
  
  digitalWrite(pinMot8, HIGH);
  digitalWrite(pinMot11,HIGH);
  digitalWrite(pinMot9,LOW); 
  digitalWrite(pinMot10,LOW);
  delay(5);
  digitalWrite(pinMot8,LOW);
  digitalWrite(pinMot11,LOW);
  digitalWrite(pinMot9,HIGH);
  digitalWrite(pinMot10,HIGH); 
  delay(5);
  }
    }  
  digitalWrite(pinMot8,LOW);
  digitalWrite(pinMot9,LOW);
  digitalWrite(pinMot10,LOW);
  digitalWrite(pinMot11,LOW);    
     
  if(currentMillis > previousMillis + tempo2) 
   
   { while(compteur>0)
    
  {  compteur--;
  
  digitalWrite(pinMot8, HIGH);
  digitalWrite(pinMot11,HIGH);
  digitalWrite(pinMot9,LOW); 
  digitalWrite(pinMot10,LOW);
  delay(5);
  digitalWrite(pinMot8,LOW);
  digitalWrite(pinMot11,LOW);
  digitalWrite(pinMot9,HIGH);
  digitalWrite(pinMot10,HIGH); 
  delay(5);
  }  
  digitalWrite(pinMot8,LOW);
  digitalWrite(pinMot11,LOW);
  digitalWrite(pinMot9,LOW);
  digitalWrite(pinMot10,LOW); 
    }
  }code]

Bof même remarques... postez correctement, indentez votre code (ctrl-T dans l’IDE) et regardez compteur. Il tombe à 0 dans le premier while et il y reste..

Je suis nouveau dans le forum….

"postez correctement, indentez votre code (ctrl-T dans l'IDE)"

qu'est ce que je fais de mal?

Loidohmix:
Je suis nouveau dans le forum….
qu'est ce que je fais de mal?

rien de bien grave :slight_smile:

Il y a 3 posts épinglés en haut du forum spécial pour les nouveaux... lisez les...

—>
Règles du forum francophone
Faire un Nouveau Sujet avec les Balises
Bien editer son post pour les nuls