Bonjour ,
voici un code avec lequel j'ai fait beaucoup d'essais . Il marchais très bien . Mais voila , je le remet en route, mais avec une carte méga 2560 et un nouveau écran LCD 1602A .
Le soucis c'est que le moteur pas a pas ne tourne pas .
Toutes les infos à l'écran s'affichent comme demandé dans le code . Ligne 182 , Start press init pour commencer . Ligne 141 , J'appuis sur le bouton init , l'écran affiche initiatisation en cour , mais le moteur ne tourne pas . Je simule la buté , la led s'allume . L'écran affiche butés à 30 cm comme prévu . tout vas bien coté commande . Tous les boutons et la led fonctionnent .
Mais le moteur ne tourne pas .
Pour info quand je rentre mon code dans la carte 2560 mega , le moteur tourne , pourquoi je sais pas, mais cela me fait dire que le pilote et moteur fonctionnent .
Le moniteur serie affiche les bonnes infos en fonction du code .
. Je suis perplexe , cela viendrai de la carte qui n'est plus une uno ?
Comment je peux savoir dans le moniteur serie se qui se passe quand j'appuis sur le bouton init en ce qui concerne le moteur ?
#include <AccelStepper.h> AccelStepper stepper (1, 0, 1); // 1 pour dire je sais pas. 0 c'est le pul + sur l’arduino et 1 le dir + #include <LiquidCrystal.h> LiquidCrystal lcd(9, 8, 7, 6, 5, 4); const int PinBoutonInit = 26; //Bouton qui déplacera le chariot vers la buté à 30 cm const int PinContactBute = 42;// Contact qui stope le chariot à 30 cm const int PinBoutonReglageDistanceCm = 28;//Bouton de reglage distance en Cm const int PinBoutonReglageDistanceMm = 30;//Bouton de reglage distance en Mm const int PinBoutonReglageDistancePlus5Mm = 32;//Bouton de reglage distance + 5 Mm const int PinBoutonReglageDistanceMoins5Mm = 34;//Bouton de reglage distance - 5 Mm const int PinBoutonConfigurationPlateau = 36;//Bouton pour envoyer les 4 Plateaux à la distance écrite sur écran LCD const int LED = 37;// initialisation OK const float distanceMin = 30.0 ; // reglage mécanique minimum de mon guide const float distanceMax = 290.0 ; // reglage mécanique maximum de mon guide //stepper.setPinsInverted(true, false, false); float ReglageAffichageDistance (float NouvelleDistance) { while (digitalRead(PinBoutonReglageDistancePlus5Mm) == 0) {// Bouton + 5 mm NouvelleDistance = NouvelleDistance + 0.5 ; if (NouvelleDistance > distanceMax ) { NouvelleDistance = distanceMin ; } attendreMs(300); Serial.println(NouvelleDistance); AfficherLaDistance(NouvelleDistance); AfficherLaDistancePouce(NouvelleDistance); } while (digitalRead(PinBoutonReglageDistanceMoins5Mm) == 0) { // Bouton - 5 mm NouvelleDistance = NouvelleDistance - 0.5 ; if (NouvelleDistance < distanceMin ) { NouvelleDistance = distanceMax ; } attendreMs(300); Serial.println(NouvelleDistance); AfficherLaDistance(NouvelleDistance); AfficherLaDistancePouce(NouvelleDistance); } while (digitalRead(PinBoutonReglageDistanceMm) == 0) { // Bouton réglage des millimetres NouvelleDistance = NouvelleDistance + 0.01 ; if (NouvelleDistance > distanceMax ) { NouvelleDistance = distanceMin ; } attendreMs(100); Serial.println(NouvelleDistance); AfficherLaDistance(NouvelleDistance); AfficherLaDistancePouce(NouvelleDistance); } while (digitalRead(PinBoutonReglageDistanceCm ) == 0) { // Bouton réglage des cm NouvelleDistance = NouvelleDistance + 1 ; // Le compteur s'incrémente de 1 cm if (NouvelleDistance > distanceMax) { NouvelleDistance = distanceMin ; } attendreMs(200); // on attend 500 ms sans utiliser la fonction delay() Serial.println(NouvelleDistance); AfficherLaDistance(NouvelleDistance); AfficherLaDistancePouce(NouvelleDistance); } return NouvelleDistance; // quand on a fini d'incrémenter on retourne la valeur au reste du programme } int32_t ConversionDistanceCmEnPas (float DistanceEnCm) { // On met un type d'entier car le nombre de pas c'est un entier int32_t DistanceEnPas = DistanceEnCm * 3905.4 ;// 1tour = 11cm = 42960 pas soit 390.54 pas pour 1 mm avec le signe - car inversion Serial.println("C"); // print utile que pour du débug à commenter ou supprimer plus tard ... Serial.println(DistanceEnPas); // idem return DistanceEnPas ; // aprés la conversion, on retourne la valeur au reste du programme } void ConfigurationPlateau (float Distance) { if (digitalRead(PinBoutonConfigurationPlateau) == 0) { stepper.moveTo(ConversionDistanceCmEnPas(Distance));// move to prend en paramètre une distance en pas. stepper.runToPosition () ; attendreMs(100); } else { stepper.stop(); } } 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 ( " BUTEE " ); lcd.setCursor(7, 0); lcd.print ( Distance ); lcd.setCursor(13, 0); lcd.print ( " cm " ); } void AfficherLaDistancePouce (float Distance) { lcd.setCursor(1, 1); lcd.print ( Distance / 2.54 ); lcd.setCursor(11, 1); lcd.print ( " inch " ); } 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 " ); } float initMoteur (float InitDistance ) { if (digitalRead(PinBoutonInit) == 0) { AfficherInitEnCours (); stepper.setSpeed(-400); while (digitalRead(PinContactBute) == 1) { stepper.runSpeed(); digitalWrite(37, LOW); // initialisation non réalisé // on attends la buté } stepper.stop(); // On remet à 0 les consignes de vitesse ... digitalWrite(37, HIGH); // initialisation réalisé InitDistance = distanceMin ; stepper. setCurrentPosition (ConversionDistanceCmEnPas(distanceMin)) ;// Permet de mettre le moteur à sa position cible de 30 cm à la butée Serial.println (InitDistance); AfficherInitTermine (); attendreMs(1000); AfficherLaDistance(InitDistance) ; } return InitDistance; // quand on a fini d'initialisé on retourne la valeur au reste du programme } void setup() { Serial.begin(9600); pinMode(26, INPUT_PULLUP); // pour le mettre en INPUT_PULLUP pinMode(28, INPUT_PULLUP); // pour le mettre en INPUT_PULLUP pinMode(30, INPUT_PULLUP); // pour le mettre en INPUT_PULLUP pinMode(32, INPUT_PULLUP); // pour le mettre en INPUT_PULLUP pinMode(34, INPUT_PULLUP); // pour le mettre en INPUT_PULLUP pinMode(36, INPUT_PULLUP); // pour le mettre en INPUT_PULLUP pinMode(42, INPUT_PULLUP); // pour le mettre en INPUT_PULLUP pinMode(37, OUTPUT); stepper.setMaxSpeed(400); stepper. setAcceleration (100 ) ; lcd.begin(16, 2); lcd.print("START PRESS INIT"); } void loop() { static float maDistance = 29; // Variable qui va stocker la distance de consigne maDistance = initMoteur (maDistance); // Permet d'initialisé ma distance sur 30 cm maDistance = ReglageAffichageDistance (maDistance); // réglage de la distance de 30 à 290 cm Serial.println (maDistance ); ConfigurationPlateau (maDistance) ; }