Accélération d'un moteur CC

Bonjour,
J'aimerais piloter un moteur CC alimenté en 12V. Lorsque j'appuie sur un bouton, le moteur doit pouvoir accélérer jusqu'à atteindre sa vitesse maximale. Tant que je reste appuyé sur le bouton, il doit continuer de tourner, et quand je lâche le bouton, il doit s'arrêter.

Cependant, avec ce programme, le moteur accélère mais s'arrête après l'accélération. Comment faire pour obtenir ce que je veux ?
Merci

const int BOUTON_5 = 6; // Bouton 5 branché sur la borne 6
int etatBOUTON_5; // Déclaration de la variable définissant l'état du bouton 5
int i;

void setup ()
{
  pinMode(BOUTON_5, INPUT); // Le bouton 5 est une entrée
  pinMode(12, OUTPUT);
  digitalWrite(BOUTON_5, HIGH); // Position initiale du bouton 5 en position haute
  etatBOUTON_5 = HIGH ; //Etat du bouton 5 en position haute
  
}
void loop() 
{
   etatBOUTON_5 = digitalRead(BOUTON_5); // Lire l'état du bouton 5
 
  if (etatBOUTON_5 == LOW) // Si l'on appuie sur le bouton 5
  {
    // BOUCLE ACCELERATION
   for (i = 0 ; i <= 255 ; i++)
   {
     delay(10); // Le moteur met 10 millisecondes pour atteindre sa vitesse maximale
     digitalWrite(12, LOW); // Le moteur tourne dans le sens horaire
     analogWrite(3,i);
     }
     
     // BOUCLE VITESSE MAXIMALE
     
     while (etatBOUTON_5 == LOW) // Tant que le bouton est appuyé
     {
       etatBOUTON_5 = digitalRead(BOUTON_5); // Lire l'état du bouton 5
       analogWrite(3,i); // Le moteur tourne à vitesse maximale
       
       if(etatBOUTON_5 == HIGH) // Si on lâche le bouton
       {
         analogWrite(3,0); // Le moteur arrête de tourner
         }
       }}
     
 else // Si l'on n'appuie pas sur le bouton 5
 {
 analogWrite(3,0); // Le moteur ne tourne pas
 }}

Ton while est pas indispensable

Merci de votre réponse.
J'ai modifié mon programme, j'ai enfin obtenu ce que je voulais, même si j'ai gardé une boucle "while" car elle me paraissait nécessaire.
Voici le programme:

const int BOUTON_5 = 6; // Bouton 5 branché sur la borne 6
int etatBOUTON_5; // Déclaration de la variable définissant l'état du bouton 5
const int BOUTON_6 = 7; // Bouton 6 branché sur la borne 7
int etatBOUTON_6; // Déclaration de la variable définissant l'état du bouton 6
int i;
void setup ()
{
  pinMode(BOUTON_5, INPUT); // Le bouton 5 est une entrée
  pinMode(BOUTON_6, INPUT); // Le bouton 6 est une entrée
  pinMode(12, OUTPUT);
  digitalWrite(BOUTON_5, HIGH); // Position initiale du bouton 5 en position haute
  digitalWrite(BOUTON_6, HIGH); // Position initiale du bouton 6 en position haute
  etatBOUTON_5 = HIGH ; //Etat du bouton 5 en position haute
  etatBOUTON_6 = HIGH ; //Etat du bouton 6 en position haute
}
void loop() 
{
   etatBOUTON_5 = digitalRead(BOUTON_5); // Lire l'état du bouton 5
   etatBOUTON_6 = digitalRead(BOUTON_6); // Lire l'état du bouton 6
    
  if (etatBOUTON_5 == LOW)
 {
 for (int i = 0 ; i <= 255 ; i++)
    {
        //envoyer la valeur de 0 à 255
        analogWrite(3, i);
        // attendre 10 millisecondes pour donner le temps de réaliser l'accélération
        delay(10);
        
        while (i >= 254 && etatBOUTON_5 == LOW)
      {
        
        etatBOUTON_5 = digitalRead(BOUTON_5); // Lire l'état du bouton 5
        
        if (etatBOUTON_5 == HIGH)
        {
          analogWrite(3,0);
          }
          else
          {
            analogWrite(3,i);
            }
        
        
    }}}
 else 
     {
       analogWrite(3,0);
       }}

Ne pas prendre en compte la présence de "bouton 6" évidemment, le programme n'en tient pas compte.

La boucle while ne sert à rien, elle vérifie les même conditions que la boucle if et la valeur de i est donnée par la boucle for qui contient le while.....

Et ton while contient une autre condition if qui recontrôle ce que les deux autres ont déjà fait....

Tu doit être le genre à mettre une ceinture, des bretelles et encore faire un tour de scotch à tes pantalons :grin:

De plus le i est déjà déclaré dans l'entête, ce n'est pas nécessaire de le re-déclarer pour la boucle for, simplement le mettre à 0.

aie, ca fait mal

digitalWrite(BOUTON_5, HIGH); // Position initiale du bouton 5 en position haute
digitalWrite(BOUTON_6, HIGH); // Position initiale du bouton 6 en position haute

on n'écrit pas sur une entrée

dfgh:
aie, ca fait mal

digitalWrite(BOUTON_5, HIGH); // Position initiale du bouton 5 en position haute
digitalWrite(BOUTON_6, HIGH); // Position initiale du bouton 6 en position haute

on n'écrit pas sur une entrée

Et pourtant si, ça active la résistance de pullup interne. Ceci :

pinMode(BOUTON, INPUT);
digitalWrite(BOUTON, HIGH);

est équivalent à :

pinMode(BOUTON, INPUT_PULLUP);

milles excuses, suis fatigué

Bonsoir et merci pour vos réponses.
Effectivement Jean-François, je pourrais être ce genre de personne.
A vrai dire, c'est mon tout premier programme, donc je fais des trucs très simples mais avec (probablement) beaucoup de fonctions inutiles.
Certes au final j'ai eu ce que je voulais, mais le programme est trop long et bordélique pour une simple accélération. Je vais essayer de revoir tout ça avec vos propositions.

Merci à dfgh, B@tto et Jean-François.