Etape 2: Connexion à MegaMoto
Tout d’abord, nous avons besoin de câbler la MegaMoto. Procédez comme suit :
-Connectez votre alimentation en 12V à la chauve-souris bornes + /
-Raccorder l’actionneur à la MOTA et MOTB
-En option Connect BAT + vin si vous souhaitez alimenter l’Arduino loin de l’ordinateur, ou laisser la clé USB est branchée.
-Définir les broches MegaMoto comme suit :
-Activer = 13
-PW101 = 11
-PWMB = 3
-Capteur = A5
Le bouton de gauche devrait rendre le vérin s’étendent, le bouton de droite devrait rendre le vérin se rétracter. Si vos indications sont inversées, puis inverser les connexions MOTA et MOTB.
Maintenant que les boutons sont configurés, nous pouvons ajouter le programme LCD pour le reste du programme. Nous avons ajouté quatre nouvelles fonctions. Read_LCD_buttons(), updateTrip(), updateLCD() et printFeedback().
Read_LCD_buttons() est le même que le programme de test, il lit l’état des boutons de l’écran LCD.
UpdateTrip() est utilisé pour vérifier les résultats de l’Up et enfoncés et modifier la limite de l’amp pour déclencher l’arrêt sécurité à.
UpdateLCD() est le général LCD écrit la fonction, qui écrit toutes les informations nouvelles sur l’écran LCD.
PrintFeedback() a écrit le courant en ampères dans l’écran LCD. C’est distincte de la fonction principale de updateLCD(), afin que nous puissions voir l’intensité débitée en temps réel, plutôt que d’attente pour le programme de boucle.
Télécharger le programme pour tester est, à l’étape suivante, que nous allons aller sur les différentes sections du code en détail.
Remarque : Les limites de sortie et les commentaires actuels ne sont pas réellement le nombre d’ampères qui sont dessinés, ils sont juste les résultats de la sonde de courante. Vous pouvez ajouter une équation en pour convertir la valeur en ampères avant de vous écrire sur l’écran LCD.
! rightlatch ; bouton = btnNONE ; firstRun = true ; lastButtonpress = millis() ; retour ; //end {} si} //end btnRIGHT} //end latchButtons int read_LCD_buttons() {adc_key_in = analogRead(A0); / / lire la valeur de la sonde delay(20) ; si (adc_key_in > aucun - seuil & & adc_key_in < aucun + seuil) retourner btnNONE ; si (adc_key_in > btnup - seuil & & adc_key_in < btnup + seuil) retourner btnUP ; si (adc_key_in > btndown - seuil & & adc_key_in < btndown + seuil) retourner btnDOWN ; si (adc_key_in > btnleft - seuil & & adc_key_in < btnleft + seuil) return btnLEFT ; Si (adc_key_in > btnright - seuil & & adc_key_in < btnright + seuil) return btnRIGHT ; Si (adc_key_in > sélectionnez - seuil & & adc_key_in < select + seuil) return btnSELECT ; Return btnNONE ; Lorsque tous les autres échouent, retourne none} //end readLCD Sub updateTrip() {si (bouton == btnUP) {currentTimetrip = millis() - lastUpdate ; if (currentTimetrip > updateTime) {maxAmps = maxAmps + 1; if (maxAmps > 999) maxAmps = 0; //check pour roulement lcd.setCursor (13, 1); lcd.print("") ; //clear ancienne valeur si (maxAmps > 99) lcd.setCursor (13, 1) ; ElseIf (maxAmps > 9) lcd.setCursor (14, 1) ; else lcd.setCursor (15, 1); //set curseur en conséquence lcd.print (maxAmps); //write nouvelle valeur lastUpdate = millis() ; //end} si} //end si btnUP ElseIf (bouton == btnDOWN) {currentTimetrip = millis() - lastUpdate ; if (currentTimetrip > updateTime) {maxAmps = maxAmps - 1; if (maxAmps < 0) maxAmps = 999 //check pour roulement lcd.setCursor (13, 1); lcd.print("") ; //clear ancienne valeur si (maxAmps > 99) lcd.setCursor (13, 1) ; ElseIf (maxAmps > 9) lcd.setCursor (14, 1) ; else lcd.setCursor (15, 1); //set curseur en conséquence lcd.print (maxAmps); //write nouvelle valeur lastUpdate = millis() ; {} //end si} //end ElseIf btnDOWN} //end updateTrip Sub moveMotor() {si (leftlatch == haute) motorForward(255) ; //speed = 0-255 si (leftlatch == faible) motorStop() ; if (rightlatch == haute) motorBack(255) ; //speed = 0-255 si (rightlatch == faible) motorStop();} fin moveMotor void motorForward (int speeed) {tandis que (dontExtend == false & & leftlatch == HIGH) {digitalWrite (EnablePin, élevé); analogWrite (PWMPinA, speeed); analogWrite (PWMPinB, 0), //Serial.println (« se déplaçant vers l’avant"); //move if moteur (firstRun == true) delay(firstfeedbacktimedelay) ; else delay(feedbacktimedelay) ; retard de //small de faire getFeedback() de vitesse firstRun = false ; latchButtons();} fin tant que} //end motorForward void motorBack (int speeed) {tandis que (rightlatch == HIGH) {digitalWrite (EnablePin, élevé); analogWrite (PWMPinA, 0); analogWrite (PWMPinB, speeed); //move moteur delay(3), //Serial.println (« Moving Back"); //small retard pour arriver à la vitesse de currentTimefeedback = millis() - lastfeedbacktime ; if (firstRun == true & & currentTimefeedback > firstfeedbacktimedelay) getFeedback() ; //if il n’a pas été longtemps assez, nothing si (firstRun == false & & currentTimefeedback > feedbacktimedelay) getFeedback() ; //if il n’a pas été assez longtemps , ne rien faire firstRun = false ; latchButtons() ; } //end tout en dontExtend = false ; } //end motorBack Sub motorStop() {analogWrite (PWMPinA, 0); analogWrite (PWMPinB, 0); digitalWrite (EnablePin, basse); firstRun = true ; //once le moteur s’arrête, réactiver firstRun pour tenir compte des pointes de courant de démarrage} //end stopMotor Sub getFeedback() {CRaw = analogRead(CPin1) ; if (CRaw == 0 & & hitLimits < hitLimitsmaxback) hitLimits = hitLimits + 1; ElseIf (CRaw == 0 & & hitLimits < hitLimitsmaxfront) hitLimits = hitLimits + 1; else hitLimits = 0; if (hitLimits == hitLimitsmaxback) {rightlatch = bas;} fin si si (hitLimits == hitLimitsmaxfront) {leftlatch = faible ; hitLimits = 0;} fin si si (CRaw > maxAmps) {dontExtend = true ; leftlatch = bas;} fin si printFeedback() ; lastfeedbacktime = millis (); //store écoulée pour la réception des commentaires} //end getFeedback printFeedback() Sub {lcd.setCursor (5, 1); lcd.print("") ; Si (CRaw 99 >) lcd.setCursor (5, 1) ; ElseIf (CRaw > 9) lcd.setCursor (6, 1) ; else lcd.setCursor (7, 1) ; LCD.Print(CRaw) ; } //end printFeedback