Stap 2: SetUp
90 * 8 = 720 + 450 = 1170us / 5 = 234 is pulsout poort, 234 is 90 graden op deze servo.
Mij stichten te positiebepaling voor zwevende punt vermenigvuldiging en deling in gehele getal wiskunde in de Picaxe handleiding onder wiskunde programmeren. Mijn formule 90 * 5.556 wordt 90 / 10 * 56 in de gehele wiskunde. Het werkt maar het is niet dat juist. De 56 als een vast te stellen en toe te voegen 1 90 / 10 + 1 * 56 is een beetje nauwkeuriger. Ik heb niet alle servo's met een UPD van 5.556 of die een Low Range van 1000. Geen van mijn code gebruikt deze meer. Het was een leuk vinden en het werkt.
90 / 10 * 56 = 504 + 450 = 954 is ongeveer 90 op een servo
90 / 10 + 1 * 56 = 560 + 450 = 1010 is dichter. Dat is de reden waarom ik niet meer gebruiken.
90 * 8 = 720 + 450 = 1170 is 90 op de toren Pro Micro SG90
Zwevende punt processoren zoals de Arduino maken dit gemakkelijk. De Arduino niet hebben een pulsout-opdracht, maar het heeft delayMicroseconds(). De Arduino heeft ook een servo-bibliotheek die vrijwel alles met een servo doen kan.
digitalWrite (pPin, hoge);
delayMicroseconds (pulsAng (unsigned int)); ' pulsAng = 1170
digitalWrite (pPin, laag)
Het zip-bestand bevat programma's voor Basic Stamps 1 & 2, Picaxe en Arduino. Portret foto's gemakkelijk printen van de binaire getallen en details.
Mijn Arduino Servo Math-functie
VOID pulsePin (int pPin, int pAng) {}
Als (bitRead (sFlags, svr1On) == 0) {}
bitWrite (sFlags, svr1On, 1);
}
Als (lastAng! = pAng) {}
cntSetSrv = svrSetR;
RfhSetSrv = 1;
lastAng = pAng;
Als (pAng == 0) {}
pAng = svr1Lrng;
}
else {}
pAng pAng = * curUPD; //Angle * UPD (ons per graad)
pAng pAng + svr1Lrng; = //Add Low Range te maken
} //servo hoek
pulsAng = pAng (unsigned int);
}
digitalWrite (pPin, hoge); //Set Servo hoek
delayMicroseconds(pulsAng);
digitalWrite (pPin, laag);
terugkeer;
}
Basic Stamp 2 Servo Math verrichting
angToInt:
Als sLastAng <> sAngle dan
' Klap pauze & bezoekersteller
sLastAng = sAngle
svoHitT = srvo1Hits
svoRfrsh = srvo1Hpaus
wTmp1 = sAngle
' Hoek omzetten in een PulsOut Int
IF wTmp1 = 0 THEN
wTmp1 = sRangeLow / srvo1Pu
ANDERS
wTmp1 = wTmp1 * curUPD
wTmp1 = wTmp1 + sRangeLow / srvo1Pu
ENDIF
ENDIF
PULSOUT srvo1, wTmp1
TERUGKEER