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
}
}