PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Asuro steuert Servo an, Problem!



schnellerblitz99
14.08.2011, 15:00
Hallo,

ich weiß dass es zu diesem thema unzählige beiträge schon unzählige beiträge gibt, allerdings habe ich ein folgendes Problem:

Die Servo mit Hilfe der FrontLED() funktion anzusteuern klappt, wenn auch im mom noch sehr primitiv, seht ihr ja im quellcode, aber das ist nicht das problem.

am bestern schaut ihr euch das video an, wenn die servo was "greifen" soll, bewegt sie sich so lande auf den gegenstand zu, bis sie diesen berührt und im nächsten moment fährt sie auch schon wieder zurück. wenn ich den "greifer" nur so, also ohne ein gegenstand bewege, funktioniert alles wunderbar,

wisst ihr woran das liegen könnte?



#include <asuro.h>
int main (void)
{
Init();
StatusLED(YELLOW);
int x;
int i;
int p;
FrontLED(ON);
Sleep(80);
FrontLED(OFF);
Sleep(255);Sleep(255);Sleep(255); Sleep(255);Sleep(255);Sleep(255);
FrontLED(ON);
Sleep(80);
FrontLED(OFF);
Sleep(255);Sleep(255);Sleep(255); Sleep(255);Sleep(255);Sleep(255);
FrontLED(ON);
Sleep(80);
FrontLED(OFF);
Sleep(255);Sleep(255);Sleep(255); Sleep(255);Sleep(255);Sleep(255);
FrontLED(ON);
Sleep(80);
FrontLED(OFF);
Sleep(255);Sleep(255);Sleep(255); Sleep(255);Sleep(255);Sleep(255);
FrontLED(ON);
Sleep(80);
FrontLED(OFF);
Sleep(255);Sleep(255);Sleep(255); Sleep(255);Sleep(255);Sleep(255);
StatusLED(RED);
//anders rum
Sleep(255);Sleep(255);Sleep(255); Sleep(255);Sleep(255);Sleep(255);
Sleep(255);Sleep(255);Sleep(255); Sleep(255);Sleep(255);Sleep(255);
Sleep(255);Sleep(255);Sleep(255); Sleep(255);Sleep(255);Sleep(255);
Sleep(255);Sleep(255);Sleep(255); Sleep(255);Sleep(255);Sleep(255);
Sleep(255);Sleep(255);Sleep(255); Sleep(255);Sleep(255);Sleep(255);
FrontLED(ON);
Sleep(175);
FrontLED(OFF);
Sleep(255);Sleep(255);Sleep(255); Sleep(255);Sleep(255);Sleep(255);
FrontLED(ON);
Sleep(175);
FrontLED(OFF);
Sleep(255);Sleep(255);Sleep(255); Sleep(255);Sleep(255);Sleep(255);
FrontLED(ON);
Sleep(175);
FrontLED(OFF);
Sleep(255);Sleep(255);Sleep(255); Sleep(255);Sleep(255);Sleep(255);
FrontLED(ON);
Sleep(175);
FrontLED(OFF);
Sleep(255);Sleep(255);Sleep(255); Sleep(255);Sleep(255);Sleep(255);
FrontLED(ON);
Sleep(175);
FrontLED(OFF);
Sleep(255);Sleep(255);Sleep(255); Sleep(255);Sleep(255);Sleep(255);
StatusLED(RED);


}


http://www.youtube.com/watch?v=zuzIFOnrBCw

vielen DANK für eure tips!

max

radbruch
14.08.2011, 15:51
Hallo

Du sendest pro Richtung jeweils nur 5 Impulse und in der Pause wird gar kein Impuls gesendet. Deshalb "federt" dein Greifer in der Pause mit Schaumstoff zurück. Versuche es mal so:


#include "asuro.h"

// Alle Sleep()s auf Basis der orginalen CD-Library mit 72kHz-Timer
// Sleep(72) dauert dann ca. 1ms

int main (void)
{
//int x;
//int i;
int p;

Init();

while(1) // Programm endlos ausführen
{
// 1 Sekunde Greifer schliesen
StatusLED(YELLOW);
for(p=0; p<50; p++) // 50*22ms ergibt ca. eine Sekunde Richtung "Greifer schließen"
{
FrontLED(ON);
Sleep(80);
FrontLED(OFF);
Sleep(255);Sleep(255);Sleep(255); Sleep(255);Sleep(255);Sleep(255); // 21ms Impulspause
}

// 2 Sekunden halten
StatusLED(RED);
for(p=0; p<100; p++)
{
FrontLED(ON);
Sleep(80);
FrontLED(OFF);
Sleep(255);Sleep(255);Sleep(255); Sleep(255);Sleep(255);Sleep(255);
}

// 1 Sekunde Greifer öffen
StatusLED(GREEN);
for(p=0; p<50; p++) // 50*23ms ergibt ca. eine Sekunde Richtung "Greifer öffnen"
{
FrontLED(ON);
Sleep(175); // 2,5ms?
FrontLED(OFF);
Sleep(255);Sleep(255);Sleep(255); Sleep(255);Sleep(255);Sleep(255);
}

while(PollSwitch() == 0) // Blinken bis Taste gedrückt wird, dann Programm wiederholen
{
StatusLED(RED);
for(p=0; p<200; p++) Sleep(72);
StatusLED(OFF);
for(p=0; p<300; p++) Sleep(72);
}
}
return(0); // wird nie erreicht!
}
ungetestet, die Tabs rauben mir den letzten Nerv *evil*

Gruß

mic