⇒HelvePic32
Servo Detailsteuerung
Wenn man sich die PWM Signale der normalen Servo Bibliothek anschaut, sieht man, dass die Puls-weite zwischen ca. 500 μs und 2300 μs variiert. Das bedeutet, dass man mit Hilfe der SoftPWMServo Bibliothek die Position eines Servos in Zehntel-Grad ansteuern kann. Da die Bibliothek aber in der Voreinstellung die Puls-weite auf 2 ms begrenzt, muss man diese Werte anpassen. Der zugehörige Code sieht so aus:
const uint8_t LEFT=0;
const uint8_t RIGHT=1;
uint8_t nP[2][8] = {{ 0,17, 9,10,11,12,13,14},{18,17, 1, 2, 3, 6, 7, 8}};
const int Smax=1800;
const int Smin=500;
#include <SoftPWMServo.h>
int pos = 0;
const int pin = nP[RIGHT][7]; // Choose _any_ pin number on your board
void setup()
{
SoftPWMServoInit();
SoftPWMServoSetFrameTime(100000); // 2500 us are 100000 tics for 40 MHz CPU!
SoftPWMServoSetServoFrames(8); // 8 frames make 20 ms wavelength
}
void loop()
{
for (pos=0; pos <= 1800; pos+=2) // use deci-degree in 0.2 degree steps
{
SetServoPos_decidegree(pos);
delay(5);
}
for (pos=0; pos <= 1800; pos+=2) // use deci-degree in 0.2 degree steps
{
SetServoPos_decidegree(1800-pos);
delay(5);
}
for (pos=0; pos <= 180; pos++) // use degree in 1 degree steps
{
SetServoPos_degree(pos);
delay(25);
}
for (pos=0; pos <= 180; pos++) // use degree in 1 degree steps
{
SetServoPos_degree(180-pos);
delay(25);
}
SetServoPos_degree(90);
delay(1000);
SetServoPos_degree(180);
delay(1000);
SetServoPos_degree(0);
delay(1000);
}
void SetServoPos_degree(int degree)
{
SoftPWMServoServoWrite(pin, 10*degree+Smin);
}
void SetServoPos_decidegree(int decidegree)
{
SoftPWMServoServoWrite(pin, decidegree+Smin);
}
Der Code fährt einmal den Servo von 0 bis 180 Grad in 0.2 Grad Schritten und dann wieder zurück, danach die gleiche Aktion aber in Gradschritten. Zum Schluss werden die Positionen 90°, 180° und 0° für je eine Sekunde angefahren.
⇒HelvePic32