inka
07.01.2007, 15:23
hi allerseits,
nun habe ich schon den halben tag mit diesem progrämmchen verbracht, es mit kommentaren versehen um es zu verstehen - sind die richtig?
#include "asuro.h"
#define SPEED 200
int speedLeft,speedRight;
unsigned int lineData[2];
int ADOffset;
void LineLeft (void) //fahre nach rechts zu linie
{
speedRight -=2; //rechts bremsen
if (speedRight < 100) speedRight = 100; //min speed rechts
}
void LineRight (void) //fahre nach links zu linie
{
speedLeft -=2; //links bremsen
if (speedLeft < 100) speedLeft = 100; //min speed links
}
void LineDemo(void)
{
int i;
unsigned char j;
FrontLED(ON);
for (j = 0; j < 255; j++) LineData(lineData); //differenzberechnung li-re
LineData(lineData);
ADOffset = lineData[0] - lineData[1];
speedLeft = speedRight = SPEED;
MotorSpeed(speedLeft,speedRight);
for(;;) {
LineData(lineData);
i = (lineData[0] - lineData[1]) - ADOffset;
SerWrite("\n\r i: ",9);
PrintInt(i);
if ( i > -50) {
//StatusLED(GREEN);
BackLED(OFF,ON); //blinker rechts
LineLeft(); //fahre nach rechts zu linie
}
else if ( i < 100) {
//StatusLED(RED);
BackLED(ON,OFF); //blinker links
LineRight(); //fahre nach links zu linie
}
else {
StatusLED(YELLOW);
speedLeft = speedRight = SPEED;
}
MotorSpeed(speedLeft,speedRight);
}
}
int main(void)
{
Init();
LineDemo ();
while(1);
return 0;
}
die "i" werte habe ich mir ausgeben lassen, sie verändern sich m.e. nach richtig (bzw. die reaktion des programms ist richtig), je nachdem ob ich beim aufgebockten asuro den schwarzen streifen unter den linken, oder rechten transistor drunterschiebe, die LED´s leuchten auf, die räder bremsen ab.
Komisch ist nur, dass nach dem abbremsen die geschwindigkeit niedrig bleibt und dass, wenn ich den asuro auf dem testblatt fahren lasse diese nur rechtsherum im kreis fährt. Woran kann das liegen?
Hängt es vielleicht von den am anfang (beim starten des asuro) eingelesenen 255 werten ab? Ob überm weissen hintergrund, oder ein sensor schwarz, der andere weiss?
gruß inka
nun habe ich schon den halben tag mit diesem progrämmchen verbracht, es mit kommentaren versehen um es zu verstehen - sind die richtig?
#include "asuro.h"
#define SPEED 200
int speedLeft,speedRight;
unsigned int lineData[2];
int ADOffset;
void LineLeft (void) //fahre nach rechts zu linie
{
speedRight -=2; //rechts bremsen
if (speedRight < 100) speedRight = 100; //min speed rechts
}
void LineRight (void) //fahre nach links zu linie
{
speedLeft -=2; //links bremsen
if (speedLeft < 100) speedLeft = 100; //min speed links
}
void LineDemo(void)
{
int i;
unsigned char j;
FrontLED(ON);
for (j = 0; j < 255; j++) LineData(lineData); //differenzberechnung li-re
LineData(lineData);
ADOffset = lineData[0] - lineData[1];
speedLeft = speedRight = SPEED;
MotorSpeed(speedLeft,speedRight);
for(;;) {
LineData(lineData);
i = (lineData[0] - lineData[1]) - ADOffset;
SerWrite("\n\r i: ",9);
PrintInt(i);
if ( i > -50) {
//StatusLED(GREEN);
BackLED(OFF,ON); //blinker rechts
LineLeft(); //fahre nach rechts zu linie
}
else if ( i < 100) {
//StatusLED(RED);
BackLED(ON,OFF); //blinker links
LineRight(); //fahre nach links zu linie
}
else {
StatusLED(YELLOW);
speedLeft = speedRight = SPEED;
}
MotorSpeed(speedLeft,speedRight);
}
}
int main(void)
{
Init();
LineDemo ();
while(1);
return 0;
}
die "i" werte habe ich mir ausgeben lassen, sie verändern sich m.e. nach richtig (bzw. die reaktion des programms ist richtig), je nachdem ob ich beim aufgebockten asuro den schwarzen streifen unter den linken, oder rechten transistor drunterschiebe, die LED´s leuchten auf, die räder bremsen ab.
Komisch ist nur, dass nach dem abbremsen die geschwindigkeit niedrig bleibt und dass, wenn ich den asuro auf dem testblatt fahren lasse diese nur rechtsherum im kreis fährt. Woran kann das liegen?
Hängt es vielleicht von den am anfang (beim starten des asuro) eingelesenen 255 werten ab? Ob überm weissen hintergrund, oder ein sensor schwarz, der andere weiss?
gruß inka