I am trying to regularize

int bobine = 13; // Alimentation de la bobine
int capteur = A0; // Analyse du capteur a effet capteur
long startTime  = 0;                    // start time for stop watch
long elapsedTime = 0 ;
long startTp = 0 ;                    // start time for stop watch
long elapsedTp ;
long lastTime;
float per ;

unsigned long valeur; //Donnees directes du capteru a effet capteur
float tension; // Valeur actuelle en voltage du capteur
float pretension; //  Valeur precedente en voltage du capteur

void setup() // Effectuer une seule fois
{
  pinMode (bobine, OUTPUT); // Declarer bobine comme OUTPUT
  digitalWrite(bobine, HIGH); 
  delay (50);
  digitalWrite(bobine, LOW);
  Serial.begin (115200); // Vitesse du retour des donnees
}


void loop() // Effectuer à chaque fois
{


  pretension = tension; // Tension precedente vs tension actuelle
  valeur = analogRead (capteur); // Lecture du capteur a effet capteur
  tension = valeur * 5.0 / 1024; // Formule de calcul du voltage du capteur a effet capteur
  long time = per * elapsedTime;
  long add = time ;
  long RPMactuel = 60000000  / elapsedTime;
  long RPMconsigne = 600;
  long consigne = 60000000 / RPMconsigne;

  if(tension == pretension)
  {
    long startTp = millis();
    pretension = tension; // Tension precedente vs tension actuelle
    valeur = analogRead (capteur); // Lecture du capteur a effet capteur
    tension = valeur * 5.0 / 1024; 
    while (tension == pretension)
    {
      pretension = tension; // Tension precedente vs tension actuelle
      valeur = analogRead (capteur); // Lecture du capteur a effet capteur
      tension = valeur * 5.0 / 1024; 
      if ((millis() - startTp) > 200)
      {
        blink(); 
      }
    }
  }




  if (tension > 2.51 && tension < (pretension - 0.005))
  {    
    lastTime = elapsedTime;
    elapsedTime =   micros() - startTime ;   
    startTime = micros(); 
    digitalWrite(bobine, HIGH); 


    if (per < 0.28 && elapsedTime > consigne)
    {
      per = per + 0.001; 
    }


    if (elapsedTime < consigne)
    {
      per = per - 0.001;
    }



    delayMicroseconds (time);
    digitalWrite(bobine, LOW); // do something, they are different


    while (tension > 2.51)
    {
      pretension = tension;
      valeur = analogRead (capteur);
      tension = valeur * 5.0 / 1024;
      if(tension == pretension)
      {
        long startTp2 = millis();
        pretension = tension; // Tension precedente vs tension actuelle
        valeur = analogRead (capteur); // Lecture du capteur a effet capteur
        tension = valeur * 5.0 / 1024; 

        while (tension == pretension)
        {
          pretension = tension; // Tension precedente vs tension actuelle
          valeur = analogRead (capteur); // Lecture du capteur a effet capteur
          tension = valeur * 5.0 / 1024; 
          Serial.print("tension= ");  // Imprimer les valeurs pecedentes du capteur 
          Serial.println(tension);	
          Serial.print("pretension= ");  // Imprimer les valeurs pecedentes du capteur 
          Serial.println(pretension);
          if ((millis() - startTp2) > 200)
          {
            blink(); 
          }
          else 
          {
            digitalWrite(bobine, LOW);
          }

        }
      }
    }

  } 



  Serial.print("consigne = ");
  Serial.println(consigne);
  Serial.print("rpm actuel = ");
  Serial.println(RPMactuel);
  Serial.print("rpm consigne = ");
  Serial.println(RPMconsigne);
  Serial.print("lastelapsedTime= ");  // Imprimer les valeurs pecedentes du capteur 
  Serial.println(lastTime);
  Serial.print("elapsedTime= ");  // Imprimer les valeurs pecedentes du capteur 
  Serial.println(elapsedTime);
  Serial.print("tension= ");  // Imprimer les valeurs pecedentes du capteur 
  Serial.println(tension);	
  Serial.print("pretension= ");  // Imprimer les valeurs pecedentes du capteur 
  Serial.println(pretension);
  Serial.print("valeur= ");  // Imprimer les valeurs pecedentes du capteur 
  Serial.println(valeur);
  Serial.print("time= ");  // Imprimer les valeurs pecedentes du capteur 
  Serial.println(time);
  Serial.print("per= ");  // Imprimer les valeurs pecedentes du capteur 
  Serial.println(per);

  Serial.println();  // Sauter une ligne lors de l'affichage
  Serial.println();
}





void blink(){
  digitalWrite(13, HIGH);
  delay(60);
  digitalWrite(13, LOW);
}

Hi everyone I am trying to figure out a way to regularize using the increment.
So I want it to increment until 0.29 and if elapsedTime is less than CONSIGNE decrement and after increment and decreemnt until it’s arround the number that I chose in CONSIGNE.
The problem is actually that it’s decrementing and incrementing but not regularize.
thank you everyone!!!
It is this part;

    lastTime = elapsedTime;
    elapsedTime =   micros() - startTime ;   
    startTime = micros(); 
    digitalWrite(bobine, HIGH); 


    if (per < 0.28 && elapsedTime > consigne)
    {
      per = per + 0.001; 
    }


    if (elapsedTime < consigne)
    {
      per = per - 0.001;
    }



    delayMicroseconds (time);
    digitalWrite(bobine, LOW); // do something, they are different

Post all the code from the little bit you did post no can tell what is right/wrong That types are your vars?

Mark

Successive analogRead()s of the same voltage may not give exactly the same digital value so that the use of “tension == pretension” in this part of the code may not work as expected. Better design your code around “>=” or “<=”

…R

 if(tension == pretension)
  {
    long startTp = millis();
    pretension = tension; // Tension precedente vs tension actuelle
    valeur = analogRead (capteur); // Lecture du capteur a effet capteur
    tension = valeur * 5.0 / 1024; 
    while (tension == pretension)