Étape 2: Codage de base
Le but du présent code est de vérifier les boutons et selon l’état de leur passer le moteur d’étendre ou de se rétracter. Une fois que le moteur est en extension, le courant est constamment surveillé, pour voir si il dépasse la limite de courant max. S’il a passé la limite, puis le moteur s’arrête et ne pourront plus s’étendent, jusqu'à ce qu’il vous rétractez.
Étant donné que les moteurs ont une grande pointe actuelle quand ils commencent, le code a un petit délai avant qu’elle commence à effectuer des lectures actuelles. Ceci peut être changé selon le moteur. La valeur à modifier est firstfeedbacktimedelay.
Le code surveille également lorsque les actionneurs ont atteint la fin de course. Lorsque le courant passe à 0, l’actionneur sait qu’il a atteint les limites. Le capteur de courant ne s’arrêtera que le moteur s’il a lu 0 plusieurs fois d’affilée, sinon une fausse lecture s’arrêterait le moteur mi course.
Le code est fixé, le code collé ci-dessous a des observations plus détaillées. Le code utilise beaucoup de fonctions, afin que chaque partie peut être modifiée individuellement.
! rightlatch; / / si le moteur est émouvant, s’arrêter, s’arrêter, démarrer firstRun mobile = true; / / set firstRun drapeau d’ignorer actuel spike lastButtonpress = millis (); //store moment de la dernière touche de retour ; {} //end si} //end btnRIGHT} //end latchButtons void 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, HIGH); analogWrite (PWMPinA, speeed); analogWrite (PWMPinB, 0); //move if moteur (firstRun == true) delay(firstfeedbacktimedelay); / / plus gros retard d’ignorer courant spike d’autre delay(feedbacktimedelay) ; //small retard pour obtenir à la vitesse getFeedback() ; firstRun = false ; latchButtons (); //check boutons nouveau} //end tout en} //end motorForward void motorBack (int speeed) {tandis que (rightlatch == haute) {digitalWrite (EnablePin ÉLEVÉ) ; analogWrite (PWMPinA, 0) ; analogWrite (PWMPinB, speeed); //move if moteur (firstRun == true) delay(firstfeedbacktimedelay); / / plus gros retard d’ignorer courant spike d’autre delay(feedbacktimedelay) ; petit retard pour arriver à la vitesse de getFeedback() ; firstRun = false ; latchButtons (); //check boutons nouveau} //end tout en dontExtend = false ; //allow moteur d’étendre encore une fois, après il a été rétractée} //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); / / actuel si lire (CRaw == 0 & & hitLimits < hitLimitsmax) hitLimits = hitLimits + 1; else hitLimits = 0; / / vérifier si le moteur est à la limite et le courant a cessé si (hitLimits == hitLimitsmax & & rightlatch == HIGH) {rightlatch = bas; / / stop moteur fullyRetracted = true;} fin si ElseIf (hitLimits == hitLimitsmax & & leftlatch == HIGH) {leftlatch = faible ; //stop moteur hitLimits = 0;} fin si si (CRaw > maxAmps) {dontExtend = true ; leftlatch = faible ; //stop si la rétroaction est maximum} //end si lastfeedbacktime = millis (); //store écoulée pour la réception des commentaires} //end getFeedback