Hallo,
Weiss jemand warum mein Code nicht richtig funktioniert?
Asuro soll einer schwarzen Linie mit Ecken und Gabelungen folgen.
Beide Lichtsensoren sind bestenfalls ausserhalb der Linie.
Code:
#include <asuro.h>
#include <stdbool.h>
//Prototyp
bool isBlack(int seite);
//Variable für Vergleichswerte der Lichtsensoren
unsigned int black [2];
unsigned int lineData [2];
int main(void) {
Init ();
FrontLED (ON);
MotorDir(FWD,FWD);
unsigned int speed [2];
unsigned int i;
//255 Messungen auf schwarzem Untergrund
for (i = 0; i < 255; i++) {
LineData(black);
}
GoTurn (30, 0, 150); // Zum Start der Linie fahren
while (1) {
speed[0] = 150;
speed[1] = 150;
//Solange nicht beide Sensoren auf der Linie sind, also auf keiner Gabelung...
while (isBlack(0) == false && isBlack(1) == false) {
MotorSpeed(speed[0], speed[1]);
if (isBlack(0)) {
speed[0] = 100;
speed[1] = 200;
} else if (isBlack(1)) {
speed[0] = 200;
speed[1] = 100;
} else {
speed[0] = 150;
speed[1] = 150;
}
}
//Bei einer Gabelung solange nach rechts drehen bis Asuro gerade auf dem rechten "Ast" steht
if (isBlack(0) && isBlack(1)) {
while (isBlack(0)){
MotorSpeed(250, 0);
}
}
}
return 0;
}
//Wenn Messung dunkler als Anfangsmessung + 10 als Toleranz
bool isBlack(int seite) {
LineData(lineData);
if (lineData[seite] < black[seite] + 10) {
return true;
} else {
return false;
}
}
}
Der Asuro fährt einfach immer gerade aus. Was ist das Problem?
Lesezeichen