ThugBone
19.12.2005, 08:08
Guten Morgen allerseits !
Hab folgendes Problem:
Ich möchte meinen Asuro in Dauerbetrieb nehmen. Später soll er bei einem geringen Batteriestand die Ladestation aufsuchen. Momentan bin ich noch in der Anfangsphase und habe bisher folgenden Code:
#include "asuro.h"
#include <stdlib.h>
#define maxspeed 130
#define medspeed 120
#define quadteiler 30
int speedLeft,speedRight, sR, sL, i;
unsigned int lineData[2];
void Line (void)
{
speedRight = medspeed - ((i*abs(i))/quadteiler);
speedLeft = medspeed + ((i*abs(i))/quadteiler);
if (speedRight > maxspeed) speedRight = maxspeed;
if (speedLeft > maxspeed) speedLeft = maxspeed;
if (speedRight < -maxspeed) speedRight = -maxspeed;
if (speedLeft < -maxspeed) speedLeft = -maxspeed;
if (speedRight < 0) {MotorDir (FWD,RWD); sR=-speedRight;sL=speedLeft;}
else if (speedLeft < 0) {MotorDir (RWD,FWD); sL=-speedLeft;sR=speedRight;}
else {MotorDir(FWD,FWD);sL=speedLeft;sR=speedRight;}
}
int main(void)
{
Init();
FrontLED(ON);
for (i = 0; i < 0xFF; i++) LineData(lineData);
speedLeft = speedRight = 120;
for(;;) {
LineData(lineData);
i = lineData[0] - lineData[1];
if (i > 0) {
StatusLED(GREEN);
Line();
}
else if (i < 0) {
StatusLED(RED);
Line();
}
else {
StatusLED(OFF);
speedLeft = speedRight = medspeed;
MotorDir(FWD,FWD);
sL=speedLeft;sR=speedRight;
}
MotorSpeed(sL,sR);
SerWrite("Akkuladung: ",12);
PrintInt(Batterie());
SerWrite("\n\r",3);
}
}
Bei diesem Code, ist allerdings die Linienverfolgung miserabel. Könnte mir jemand einen Tipp geben, wie man es optimieren könnte ?
Und noch eine Frage:
Kann man die Akkus auch aufladen, wenn der Asuro eingeschaltet ist ?
===========================
Vielen Dank!
Hab folgendes Problem:
Ich möchte meinen Asuro in Dauerbetrieb nehmen. Später soll er bei einem geringen Batteriestand die Ladestation aufsuchen. Momentan bin ich noch in der Anfangsphase und habe bisher folgenden Code:
#include "asuro.h"
#include <stdlib.h>
#define maxspeed 130
#define medspeed 120
#define quadteiler 30
int speedLeft,speedRight, sR, sL, i;
unsigned int lineData[2];
void Line (void)
{
speedRight = medspeed - ((i*abs(i))/quadteiler);
speedLeft = medspeed + ((i*abs(i))/quadteiler);
if (speedRight > maxspeed) speedRight = maxspeed;
if (speedLeft > maxspeed) speedLeft = maxspeed;
if (speedRight < -maxspeed) speedRight = -maxspeed;
if (speedLeft < -maxspeed) speedLeft = -maxspeed;
if (speedRight < 0) {MotorDir (FWD,RWD); sR=-speedRight;sL=speedLeft;}
else if (speedLeft < 0) {MotorDir (RWD,FWD); sL=-speedLeft;sR=speedRight;}
else {MotorDir(FWD,FWD);sL=speedLeft;sR=speedRight;}
}
int main(void)
{
Init();
FrontLED(ON);
for (i = 0; i < 0xFF; i++) LineData(lineData);
speedLeft = speedRight = 120;
for(;;) {
LineData(lineData);
i = lineData[0] - lineData[1];
if (i > 0) {
StatusLED(GREEN);
Line();
}
else if (i < 0) {
StatusLED(RED);
Line();
}
else {
StatusLED(OFF);
speedLeft = speedRight = medspeed;
MotorDir(FWD,FWD);
sL=speedLeft;sR=speedRight;
}
MotorSpeed(sL,sR);
SerWrite("Akkuladung: ",12);
PrintInt(Batterie());
SerWrite("\n\r",3);
}
}
Bei diesem Code, ist allerdings die Linienverfolgung miserabel. Könnte mir jemand einen Tipp geben, wie man es optimieren könnte ?
Und noch eine Frage:
Kann man die Akkus auch aufladen, wenn der Asuro eingeschaltet ist ?
===========================
Vielen Dank!