PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Servo 3 positionen anfahren lassen



Christian3
15.08.2009, 16:21
Hallo,
ich habe hier in RN folgenen code gefunden:


#include "RP6RobotBaseLib.h"
uint16_t servopos = 20;

void servotrim(void)
{
setLEDs(1);
sleep(servopos);
setLEDs(0);
sleep(200-servopos);
}

void servoposi(void)
{
if(servopos==10)
{
while(servopos != 20)
{
servopos++;
servotrim();
mSleep(50);
}
}
else if(servopos==20)
{
while(servopos != 10)
{
servopos--;
servotrim();
mSleep(50);
}
}
}

int main (void)
{
initRobotBase();
while (true)
{
task_RP6System();
servoposi();
}
return 0;
}



so jetzt wollte ich das der servo 3 positionen anfährt
das hab ich auch probiert selber hinzukrigen aber bei mir
hat der nur einmal alle 3 posi angefahren und dann wieder nur
2 posi könnt ihr mir fehlen? der servo soll posi 10 dan 15 und dann 20 anfahren.
LG
Christian

radbruch
15.08.2009, 18:37
Hallo

Da hast du eine meiner Jugendsünden ausgegraben. Das waren meine ersten Versuche mit Servos :)

Vielleicht funktioniert es so, ich habe es nicht getestet:

#include "RP6RobotBaseLib.h"
uint16_t servopos = 20;

void servotrim(void)
{
setLEDs(1);
sleep(servopos);
setLEDs(0);
sleep(200-servopos);
}

void servoposi(uint8_t servosoll)
{
uint8_t i;

while(servopos != servosoll)
{
if(servopos<servosoll) servopos++; else servopos--;
servotrim();
// mSleep(50);
// was das mSleep() hier soll weiß ich auch nicht mehr genau
// richtiger wäre servotrim() mehrfach aufzurufen um dem
// Servo genug Zeit zu geben die neue Position anzufahren:
for(i=0; i<5; i++) servotrim();
}
}

int main (void)
{
initRobotBase();
while (true)
{
//task_RP6System();
servoposi(10);
servoposi(15);
servoposi(20);
}
return 0;
}




Gruß

mic

Christian3
15.08.2009, 23:08
werde es testen DANKE!
zu:
Da hast du eine meiner Jugendsünden ausgegraben
lol naja ich find das is die einfaste servo steuerung die ich bisjetzt gesehen hab
LG