Bonsoir à tous
J'ai bricoler mon code suite à la remarque de Guy et j'ai implémenté une notion de "point de départ"
avec l'ajoût de quelques frioritures qui aide dans la vraie vie
le menu se présente comme ceci
Code:
// initialisation du menu
char menu_text [7][8][17] = {
{
{"Nb de spires =>"}, {"Millier =>"}, {"Centaine =>"}, {"Dizaine =>"}, {"Unite =>"}, {"Dizieme "}, {"null"}, {"null"}
},
{
{"Cumul compt =>"}, {"Comptage =>"}, {"Decomptage "}, {"null"}, {"null"}, {"null"}, {"null"}, {"null"}
},
{
{"Spire/couche =>"}, {"Centaine =>"}, {"Dizaine =>"}, {"Unite =>"}, {"Debut Gauche =>"}, {"Debut Droite "}, {"null"}, {"null"}
},
{
{"Guide fil =>"}, {"+ 1/2 tour =>"}, {"- 1/2 tour =>"}, {"+ 1/8 tour =>"}, {"- 1/8 tour =>"}, {"Change de cote "}, {"null"}, {"null"}
},
{
{"Position init =>"}, {"Enregistrer =>"}, {"Retour a 0 =>"}, {"- 10 tours =>"}, {"+10 tours =>"}, {"- 1 tour =>"}, {"+ 1 tour =>"}, {"null"}
},
{
{"Compteur =>"}, {"+ 1/10 =>"}, {"- 1/10 "}, {"null"}, {"null"}, {"null"}, {"null"}, {"null"}
},
{
{"Sauvegarde =>"}, {"Choix numero =>"}, {"Sauver =>"}, {"Recharger "}, {"null"}, {"null"}, {"null"}, {"null"}
}
};
La ligne position initiale permet d'enregistrer cette position et aussi de positionner le guide fil en avançant
ou reculant par 10 tours ou 1 tours , et de revenir à zéro ou au "point initial" ainsi que de remettre le compteur
à 0 ( logique
)
La suite du code se présente comme ceci pour la boucle principale
Code:
void loop() {
Selection();
if (choixmenu == 0)
{
Comptage();
Compteimpulsion();
AfficheCompteur();
Retournerestecompteur ();
Diamfil();
AfficheDiamFil();
Nombrespirecouche();
Gestionstep();
Avanceguidefil();
Positioncourante();
}
if (choixmenu == 1)
{
Gestionboutons ();
Gestionvaleur ();
Affichagemenutext();
delay(20);
}
}
La fonction position courante est très simple
Code:
// Fonction qui enregistre la position du guide fil
void Positioncourante()
{
Position = Position + Steps;
}
de manière à cumuler le nombre de steps que fait le moteur donc
vu la fonction Avanceguidefil() qui est dépendante du nombre de spire par couche
le cumul du nombre de step croit puis décroit par couche, ce qui permet de revenir
à "0" juste en soustrayant (-step) le cumul de step
Reste à gérer les autres frioritures , dont voici un aperçu
Code:
if (*menu_valeur[up][droit] == -11)// Enregistre la position initiale
{
if (choix == 1)
{
Position = 0;
choix = !choix;
lcd.setCursor(0,1);
lcd.print(" Enregistree ");
delay(500);
Effaceligne2 ();
}
}
if (*menu_valeur[up][droit] == -12)// Retourne à la position initiale
{
if (choix == 1)
{
Compteur = 0;
myStepper.step(-Position);
choix = !choix;
lcd.setCursor(0,1);
lcd.print(" Retour à 0 ");
delay(500);
Effaceligne2 ();
}
}
if (*menu_valeur[up][droit] == -13)// Recule de 10 tours
{
if (choix == 1)
{
myStepper.step(-480*Sensdebutcouche);
choix = !choix;
lcd.setCursor(0,1);
lcd.print(" -10 tours ");
delay(500);
Effaceligne2 ();
}
}
if (*menu_valeur[up][droit] == -16)// Avance de 1 tours
{
if (choix == 1)
{
myStepper.step(48*Sensdebutcouche);
choix = !choix;
lcd.setCursor(0,1);
lcd.print(" +1 tour ");
delay(500);
Effaceligne2 ();
}
}
Il se fait tard mais demain je teste un peu plus le code avant de vous joindre le code complet
via le dossier Github
Bonne nuit