Vitesse progressive d'un moteur à courant continu en un temps déterminé

Au lieu de tester l'état du bouton, il faudrait tester son changement d'état et en particulier s'il vient d'être enfoncé. Pour cela il faut comparer l'état du bouton à son état que tu auras mémorisé au cycle précédent.
Ce qui donne ceci (par exemple)

const byte boutonCommande = 3;
int VitesseMCC = 0;
const byte pinMoteur = 6;
bool drapeau = false;

void setup() {
  // put your setup code here, to run once:
  pinMode(boutonCommande, INPUT_PULLUP);
  pinMode(pinMoteur, OUTPUT);
}

void loop() {
  static bool etatBoutonPrecedent = false;
  
  bool etatBoutonCommande = !digitalRead(boutonCommande); // on travaille en logique positive
  if (etatBoutonCommande != etatBoutonPrecedent)
  {
    if (etatBoutonCommande)
    {
      // on a appuyé sur le bouton
      if (drapeau==false)
      {
        // on lance le moteur
        VitesseMCC = 0;
        for (int i = 1; i < 255; i++) {
          VitesseMCC ++;
          analogWrite(pinMoteur, VitesseMCC);
          delay(20);
        }
        drapeau = true; // le moteur est en marche
      }
      else
      {
        // on arrete le moteur
        analogWrite(pinMoteur, 0);
        drapeau = false;
      }
    }
    etatBoutonPrecedent = etatBoutonCommande;
    delay(20);  // pour anti rebond
  }
}