Stap 2: Basic codering
Het doel van deze code is te controleren van de knoppen, en afhankelijk van de toestand van hen verplaatsen de motor te verlengen of intrekken. Zodra de motor uit te breiden is, wordt de huidige voortdurend gecontroleerd, om te zien als het overtreft de huidige limiet van max. Als het voorbij de grens, dan de motor stopt, en niet langer uit te breiden zal, totdat u het intrekken.
Aangezien de motoren hebben een grote huidige piek wanneer ze beginnen, heeft de code een kleine vertraging voordat het begint met het huidige lezingen. Dit kan worden veranderd afhankelijk van de motor. De waarde te wijzigen is firstfeedbacktimedelay.
De code controleert ook voor als de actuatoren de eindschakelaars hebben bereikt. Wanneer de huidige tot 0 daalt, weet de bedieningssleutel dat het de grenzen heeft bereikt. De huidige sensor zal de motor alleen stoppen als het een paar keer in een rij 0 heeft gelezen, anders een valse lezing zou stoppen met de motor midden lijn.
De code is gekoppeld, heeft meer gedetailleerde opmerkingen van de code geplakt hieronder. De code maakt gebruik van vele functies, zodat elk deel afzonderlijk kan worden gewijzigd.
! rightlatch; / / als de motor is bewegende, stop, als gestopt, start bewegende firstRun = true; / / set firstRun vlag te negeren van huidige spike lastButtonpress = millis (); //store tijd van laatste knooppers terugkeer; {}} //end als} //end btnRIGHT} //end latchButtons void moveMotor() {als (leftlatch == HIGH) motorForward(255); //speed = 0-255 als (leftlatch == LOW) motorStop(); als (rightlatch == HIGH) motorBack(255); //speed = 0-255 als (rightlatch == LOW) motorStop();} einde moveMotor void motorForward (int speeed) {terwijl (dontExtend == false & & leftlatch == HIGH) {digitalWrite (EnablePin, hoge); analogWrite (PWMPinA, speeed); analogWrite (PWMPinB, 0); //move motor als (firstRun == true) delay(firstfeedbacktimedelay); / / grotere vertraging te negeren van huidige spike anders delay(feedbacktimedelay); //small vertraging om naar snelheid getFeedback() firstRun = false; latchButtons (); //check knoppen weer} //end terwijl} //end motorForward void motorBack (int speeed) {terwijl (rightlatch == HIGH) {digitalWrite (EnablePin HOGE); analogWrite (PWMPinA, 0); analogWrite (PWMPinB, speeed); //move motor als (firstRun == true) delay(firstfeedbacktimedelay); / / grotere vertraging te negeren van huidige spike anders delay(feedbacktimedelay); kleine vertraging om naar de snelheid van de getFeedback(); firstRun = false; latchButtons (); //check knoppen opnieuw} //end terwijl dontExtend = false; //allow motor uit te breiden opnieuw, nadat het is ingetrokken} //end motorBack ongeldig motorStop() {analogWrite (PWMPinA, 0); analogWrite (PWMPinB, 0); digitalWrite (EnablePin, laag); firstRun = true; //once de motor is gestopt, reenable firstRun ter verantwoording voor opstarten huidige spikes} //end stopMotor ongeldig getFeedback() {CRaw = analogRead(CPin1); / / lezen huidige if (CRaw == 0 & & hitLimits < hitLimitsmax) hitLimits = hitLimits + 1; anders hitLimits = 0; / / check om te zien of de motor op de grenzen en de huidige is gestopt als (hitLimits == hitLimitsmax & & rightlatch == HIGH) {rightlatch = laag; / / stop motor fullyRetracted = true;} als anders als (hitLimits == hitLimitsmax & & leftlatch == HIGH) {leftlatch = laag; //stop motor hitLimits = 0;} einde als als (CRaw > maxAmps) {dontExtend = true, leftlatch = laag; //stop als feedback over maximaal} //end als lastfeedbacktime = millis (); //store vorige keer voor het ontvangen van feedback} //end getFeedback