hallo Tzimovo,
glückwunsch zum RP6 erst mal. ich habe mich mittlerweile schon öfter mit Dirks Servo Lib beschäftigt und mit hilfe ihr auch schon meinen Roboterarm angesteuert. darum hoffe ich dir helfen zu können.
bei deinem programm fallen mir einige offensichtliche fehler ein (die bei einem anfänger auch recht normal sind):
1. mSleep(500); in deiner while(true) schleife: mSleep ist eine voll blockierende zeitfunktion. d.h. dein roboter macht während der 500 ms von mSleep(500) nichts anderes mehr als zu warten. das ist besonders dann extrem nachteilig, wenn du zusätzlich zur servobewegung noch andere funktionen wie Z.b. fahren willst.
darum immer eine der Stopwatches nehmen (siehe anleitung), diese sind nämlich nicht blockierende funktionen.
2. das task_SERVO() reicht, wenn es nur einmal in der while- schleife aufgerufen wird.
damit es für dich leichter wird hier ein kurzes beispielprogramm:
Code:
#include "RP6ControlServoLib.h"
int main(void)
{
initRP6Control();
/* Servo1 in die Mittlere Stellung vordefiniert */
initSERVO(SERVO1);
servo1_position = RIGHT_TOUCH;
startStopwatch1();
while(true)
{
if (getStopwatch1() >100 && getStopwatch1() <1000)
{servo1_position = MIDDLE_POSITION;
writeString("Servopos: MIDDLE \n");}
if (getStopwatch1() > 1000 && getStopwatch1() <2000)
{servo1_position = LEFT_TOUCH;
writeString("Servopos: LEFT \n");}
if (getStopwatch1() >2000 && getStopwatch1() <3000)
{servo1_position = RIGHT_TOUCH;
writeString("Servopos: RIGHT \n");
}
if (getStopwatch1() > 3000)
{setStopwatch1(0);}
task_SERVO();
mSleep(3);
}
return 0;
}
hab das programm jetzt nicht getestet. aber so auf die art sollte es funktioneren.
mfg andi
Lesezeichen