Bonjour,
Voici l'incrémentation progressive que j'utilise :
void loop() {
// Incrémentation des options du Menu à l'aide de Btn_Up <--------------------------------------------------
Incr_Up_Etat = digitalRead(Btn_Up); // Lecture de Btn_Up et stockage de sa valeur
if (Incr_Up_Etat == LOW) // Si Btn_Up est appuyé alors...
{
Incr_Up_Current_millis = millis(); // Incr_Up_Current_millis = Le nombre de millisecondes depuis que l'Arduino a démarré
if (Incr_Up_Mem_Etat == HIGH) // Si Btn_Up est relaché alors...
{
Incr_Up_Mem_First_millis = Incr_Up_Current_millis; // Equivalent à une remise à zéro des compteurs
Incr_Up_Mem_Next_millis = Incr_Up_Current_millis; // Equivalent à une remise à zéro des compteurs
}
if (Incr_Up_Current_millis >= Incr_Up_Mem_Next_millis) // Si le chrono de l'arduino est supérieur ou égale au temps de la prochain incrémentation alors..
{
Incr_Up_Elasped_millis = (Incr_Up_Current_millis - Incr_Up_Mem_First_millis); // Durée depuis que Btn_Up a était enfoncé = ( chronomètre - heure de l'appui )
if (Incr_Up_Elasped_millis < 1000) // Si Btn_Up est appuyé 1 seconde alors...
{
Incr_Up_Mem_Next_millis = (Incr_Up_Current_millis + 500); // Prochaine incrémentation dans 500ms
}
if ((Incr_Up_Elasped_millis > 1000) && (Incr_Up_Elasped_millis < 2000)) // Si Btn_Up est appuyé entre 1 et 2 secondes alors...
{
Incr_Up_Mem_Next_millis = (Incr_Up_Current_millis + 200); // Prochaine incrémentation dans 200ms
}
if (Incr_Up_Elasped_millis > 2000) // Si Btn_Up est appuyé plus de 2 secondes alors...
{
Incr_Up_Mem_Next_millis = (Incr_Up_Current_millis + 50); // Prochaine incrémentation dans 50ms
}
switch (Niveau_Menu) // Selon Niveau_Menu, on incrémente la variable qui clignote au LCD
{
case 0:
if (Niveau_Pause < 1000) // Si Niveau_Pause < Limite Maxi
{
Niveau_Pause++; // On incrémente de 1 Niveau_Pause
}
break;
case 1:
if (Niveau_Interval < 1000) // Si Niveau_Interval < Limite Maxi
{
Niveau_Interval++; // On incrémente de 1 Niveau_Pause
}
break;
case 2:
if (Niveau_Speed < 1000) // Si Niveau_Speed < Limite Maxi
{
Niveau_Speed++; // On incrémente de 1 Niveau_Speed
}
break;
case 3:
if (Niveau_Tspd < 1000) // Si Niveau_Tspd < Limite Maxi
{
Niveau_Tspd++; // On incrémente de 1 Niveau_Tspd
}
break;
}
}
}
Incr_Up_Mem_Etat = Incr_Up_Etat; // Détermine Incr_Up_Mem_Etat à l'état haut quand Btn_Up est relaché, pour le prochain appui de Btn_Up afin de remettre les compteurs à zéro
}
Quand je reste appuyé sur le bouton Up, l'incrémentation monte de 1 toutes les 500ms, puis toutes les 200ms, puis toutes les 50ms.
Suite au 2eme message