Ich meine mich zu erinnern, dass ich mal irgendwo gelesen hab das diese formulierung hier problematisch werden kann:
(PollSwitch()!=0) <-- das soll die bedingung sein das er für kurze zeit rückwärs fährt
falls diese schreibweise tatsächlich problematisch ist, was wäre besser?
denn bei meinem aktuellen programm folgt er erst der linie und dann fängt er plötzlich an sich zu dreht? kann das daran liegen? oder sind noch andere fehler in dem programm?
Denn eigendlich soll er ja einer linie folgen und wenn er wo dagegen stößt kurz rückwärtsfahren und dann eine links/rechts kurve machen und dann wieder einer linie folgen.
Kann mir bitte jemand helfen?
#include "asuro.h"
int main(void)
{
Init();
int i;
while(1)
{
if(PollSwitch()!=0)
{StatusLED(RED);
MotorDir(RWD,RWD);
MotorSpeed(120,120);
for (i=0;i<280;i++){Sleep(255);}
MotorSpeed(0,0);
MotorDir(FWD,FWD);
MotorSpeed (0,120);
for (i=0;i<280;i++){Sleep(255);}
MotorSpeed(0,0);
}
else{
int line_data[2];
LineData(line_data); // line_date[0]: linker Sensor, [1]: rechter Sensor
// schwarzer Untergrund: kleine Werte; heller Hintergrund: große Werte
FrontLED(ON); // liefert bessere bzw. konstrastreichere Werte
int limit = 45; // Dieser Vergleichswert ist an die Lichtverhältnisse anzupassen
int speed = 120;
int debug_mode = 0; // 0: aus; 1: an, ASURO sendet die Werte der Sensoren zurück
while (line_data[1] > limit)
{
if (debug_mode)
{
SerWrite("rechts\r\n", 8 );
PrintInt(line_data[1]);
SerWrite("\r\n", 2);
}
BackLED(OFF, ON);
MotorSpeed(0, speed);
LineData(line_data);
}
while (line_data[0] > limit)
{
if (debug_mode)
{
SerWrite("links\r\n", 7);
PrintInt(line_data[0]);
SerWrite("\r\n", 2);
}
BackLED(ON, OFF);
MotorSpeed(speed, 0);
LineData(line_data);
}
MotorDir(FWD, FWD);
MotorSpeed(speed, speed);
}
}
return 0;
}
Lesezeichen