Stap 3: Verplaatsen de actuatoren
Er zijn twee functies die het verplaatsen van de actuator. Eén is om uit te gaan naar voren, de andere voor reverse. Ze zijn in wezen hetzelfde, ze verschillen alleen door welke variabelen worden gewijzigd en welke snelheden zijn aangepast. Zie de eerste functie hieronder. Er zijn enkele Serial.prints() opgenomen dat kunnen hebben de opmerkingen verwijderd voor foutopsporing.
void goForwards() { if (prev[0] == 1 && sw[0] == 0) firstRun = true; else firstRun = false;//when the switch changes, use firstRun delay forwards = true; backwards = false;//set direction fullyRetracted = false;//once moved forwards, no longer retracted //Serial.println("Moving forwards"); spd[0] = FWDspd; spd[1] = 0; spd[2] = FWDspd; spd[3] = 0; // set base speeds FWDsync();//update speeds based on hall effect counts getFeedback();//check current draw digitalWrite(enable0, HIGH); digitalWrite(enable1, HIGH);//enable both boards //Serial.print("Dont Extend"), Serial.println(dontExtend); if (dontExtend == true) { digitalWrite(enable0, LOW); digitalWrite(enable1, LOW);//disable both boards if not allowed to extend } delay(10);//slight delay //Serial.print(" Speeds "), Serial.print(spd[0]), Serial.print(", "), Serial.print(spd[1]); //Serial.print(", "), Serial.print(spd[2]), Serial.print(", "), Serial.println(spd[3]); analogWrite(PWMA0, spd[0]); analogWrite(PWMB0, spd[1]); analogWrite(PWMA1, spd[2]); analogWrite(PWMB1, spd[3]);//set speeds if (firstRun == true) delay(timedelay[0]); else delay(timedelay[1]); //small delay to get to speed for current readings dontRetract = false;//once you have moved forwards, you can move back again. firstRun = false; }//end goForwards
De synchroniseren magie gebeurt in de FWDsync()-subroutine. Wij zullen dat behandelen in de volgende stap. Bijgevoegd is de volledige code.