Code:
#include <stdlib.h>
#include "asuro.h"
#include "myasuro.h"
void MyGo ( int distance, int speed)
{
uint32_t enc_count;
int tot_count = 0;
int diff = 0;
int l_speed = speed, r_speed = speed;
unsigned char text[8];
// calculation tics/mm
enc_count=abs(distance)*10000L;
enc_count/=MY_GO_ENC_COUNT_VALUE;
EncoderSet(0,0); // reset encoder
MotorSpeed(l_speed,r_speed);
if (distance<0) MotorDir(RWD,RWD);
else MotorDir(FWD,FWD);
while (tot_count<enc_count)
{
tot_count += encoder[RIGHT]; //im Original LEFT ehenkes
diff = encoder[LEFT] - encoder[RIGHT];
if (diff > 0)
{ //Left faster than right
if ((l_speed > speed) || (r_speed > 244)) l_speed -= 10;
else r_speed += 10;
}
if (diff < 0)
{ //Right faster than left
if ((r_speed > speed) || (l_speed > 244)) r_speed -= 10;
else l_speed += 10;
}
EncoderSet(0,0); // reset encoder
MotorSpeed(l_speed,r_speed);
itoa(diff, text, 10);
SerPrint(text);
SerPrint(" ");
itoa(l_speed, text, 10);
SerPrint(text);
SerPrint(" ");
itoa(r_speed, text, 10);
SerPrint(text);
SerPrint("\r\n"); /* Zeilenvorschub */
Msleep(1);
}
MotorDir(BREAK,BREAK);
Msleep(200);
}
int main(void)
{
Init();
EncoderInit();
SerPrint("\r\nMYGo Test\r\n");
while (1)
{
int i;
for(i=0;i<10;++i)
{
MyGo(150,150);
StatusLED(RED);
Msleep(1000);
StatusLED(GREEN);
}
StatusLED(YELLOW);
}
}
Werte aus dem Hyperterminal für diff speed_l speed_r
9 150 230
8 150 240
9 150 250
8 140 250
8 130 250
8 120 250
8 110 250
8 100 250
6 90 250
6 80 250
4 70 250
4 60 250
4 50 250
3 40 250
1 30 250
1 20 250
0 20 250
0 20 250
0 20 250
0 20 250
0 20 250
0 20 250
0 20 250
0 20 250
Was kann man daraus schließen?
Den Hinweis von stochri habe ich leider noch nicht verstanden.
Lesezeichen