Bonjour, j'ai beaucoup de mal à comprendre le codage du loop . J'ai repris le code du post #94 , j'ai besoin de revoir quelque chose. Pour les petit soucis d'affichage je verrai après.
Ce qui m’interroge vraiment c'est le passage des variables. Pour m'aider j'ai modifier la fonction float ReglageAffichageDistance .
Certe plus compliqué ou plus long à écrire (tant pis si il faut pas le faire, je nettoierai après , c'est juste pour comprendre ) . Au fonctionnement c'est identique .
Ma question est es ce que la modif à du sens parce que je la comprends mieux comme cela ou c'est le hasard qui fait que ça marche encore ?
#include <AccelStepper.h> AccelStepper stepper (1, 9, 8); #include <LiquidCrystal.h> LiquidCrystal lcd(12, 11, 5, 4, 3, 2); const int PinBoutonInit = A0; //Bouton qui déplacera le chariot vers la buté à 30 cm const int PinContactButé = A1;// Contact qui stope le chariot à 30 cm const int PinBoutonReglageDistanceCm = A2;//Bouton de reglage distance en Cm const int PinBoutonReglageDistanceMm = A3;//Bouton de reglage distance en Mm float ReglageAffichageDistance (float maDistance) { float startValue=maDistance; float NouvelleDistance = startValue; while (digitalRead(PinBoutonReglageDistanceCm ) == 0) { // J'appuis sur réglage des cm NouvelleDistance = NouvelleDistance + 1 ; // Le compteur s'incrémente de 1 cm if (NouvelleDistance > 290) { NouvelleDistance = 30; } attendreMs(500); // on attend 500 ms sans utiliser la fonction delay() Serial.println(NouvelleDistance); } return NouvelleDistance; // quand on a fini d'incrémenter on retourne la valeur au reste du programme } void attendreMs (unsigned int attente) { unsigned long InstantouJappuis = millis(); // Variable qui enregistre le déroulement du temps qui passe depuis l'appuis while (millis() - InstantouJappuis < attente ) { // décompte de 500ms en cours } } void AfficherLaDistance (float Distance) { lcd.clear(); lcd.setCursor(0, 0); lcd.print ( " Butée " ); lcd.setCursor(7, 0); lcd.print ( Distance ); lcd.setCursor(13, 0); lcd.print ( " cm " ); } void AfficherInitTermine () { lcd.clear(); lcd.setCursor(0, 0); lcd.print (" Initialisation " ); lcd.setCursor(0, 1 ); lcd.print (" terminée " ); Serial.println ("Initialisation terminée " ); } void AfficherInitEnCours () { lcd.clear(); lcd.setCursor(0, 0); lcd.print (" Initialisation " ); lcd.setCursor(0, 1 ); lcd.print (" en cours " ); Serial.println (" Initialisation en cours " ); } void initMoteur () { if (digitalRead(PinBoutonInit) == 0) { AfficherInitEnCours (); stepper.setSpeed(3900); while (digitalRead(PinContactBute) == 1) { stepper.runSpeed(); // on attends la buté } stepper.stop(); // On remet à 0 les consignes de vitesse ... float Distance = 30.0; AfficherInitTermine (); delay(3000); AfficherLaDistance(Distance) ; } } void setup() { Serial.begin(9600); pinMode(A0, INPUT_PULLUP); // pour le mettre en INPUT_PULLUP pinMode(A1, INPUT_PULLUP); // pour le mettre en INPUT_PULLUP pinMode(A2, INPUT_PULLUP); // pour le mettre en INPUT_PULLUP stepper.setMaxSpeed(4000); }