ok danke euch allen,
mein asuro is mittlerweile da und zusammengebaut.
hab da programm noch mal überarbeitet!
hab das mit den strecken und der odometrie weggelassen dafür findet er die linie jetzt mit den photosensoren vorne.
außerdem kann er der linie entlagfahren auch wenn er nicht auf ihr gestartet wird.
hier der code:
Code:
#include "asuro.h"
int main(void) {
unsigned int data[2];
int diff;
char Nummer;
int Zahl; // Variablen deklarieren
Init();
FrontLED(ON); // LiniensuchLED einschalten
MotorDir(FWD,FWD); // Motor vorwärt Laufen lassen
MotorSpeed(150,150); // mit mitlerer Geschwindigkeit
diff=0; // Variable Null setzen
while (diff<50) // Solage fortfahren bis ein Unterschied von mindestens 50
{ // zwischen den Liniensensoren vorliegt
LineData(data);
diff = data [0]- data [1];
Sleep(255); // Zwischendurch Pausen machen um den Prozessor
} // Nicht unnötig zu belasten
Zahl=0; // Variable Null setzen
while (Zahl<100) // Noch etwa eine 1/3 Sekunde weiterfahren,
{ // Sodass die Drehachse über der Linie liegt
Sleep(216);
Zahl++;
}
MotorDir(FWD,RWD); // Im Uhrzeigersinn drehen
MotorSpeed(100,100); // Mit eher schwacher Motorleistung
BackLED(ON,ON); // Rücklichter anschalten
diff=0; // Variable Null setzen
while (diff<50) // Drehen bis die Linie gefunden ist
{
LineData(data);
diff = data [0]- data [1];
Sleep(255);
}
while(1){ // Endlosschleife
StatusLED(GREEN); // StatusLED auf grün Schalten
MotorDir(FWD,FWD); // Geradeaus fahren
while(PollSwitch() < 4){ // Schleife: Bis ein Taster anstößt wird folgendes gemacht:
LineData(data); // Liniensensoren auslesen
if (data [0] > data [1] ) // Wenn der rechte Sensor dunkler ist
{MotorSpeed(190,140);} // => linker Motor schneller fahren
else // Sonst
{MotorSpeed(140,190);} // => rechter Motor schneller fahren
}
StatusLED(RED); // StatusLED auf rot Schalten
MotorSpeed(0,0); // Motoren stoppen
Nummer=0; // Variable Null stzen
while (Nummer<5) // schleife: Fünf mal folgendes machen:
{Zahl=0; // Variable null setzen
while (Zahl<100) // 0,3 Sekunden warten
{
Sleep(216);
Zahl++;
}
Zahl=0; // Variable wieder Nul setzen
BackLED(ON,OFF); // Linke BackLED anschalten, die rechte aus
while (Zahl<100) // 0,3 Sekunden warten
{
Sleep(216);
Zahl++;
}
BackLED(OFF,ON); // Jetzt rechte BackLED anschalten und die linke aus
Nummer++;} // =>Die hinteren LEDs blinken abwechselnd
Zahl=0; // fünf mal im 0,3 Sekundentakt
MotorDir(RWD,RWD); // Rückwärts fahren
MotorSpeed(100,100); // Langsam
BackLED(ON,ON); // BackLEDs beide an
while (Zahl<200) // 0,6 sek lang so weitermachen
{
Sleep(216);
Zahl++;
}
MotorDir(FWD,RWD); // Im Uhrzeigersinn drehen
MotorSpeed(100,100); // Nicht zu schnell!
Zahl=0; // Variable null setzen
while (Zahl<100) // Kurz warten um nicht die selbe Linie auf welcher
{ // Man steht zu registrieren
Sleep(216);
Zahl++;
}
diff=0; // Variable null stzen
while (diff<50) // Schleife: Solange weiterdrehen bis ein Unterschied von
{ // mehr als 50 zwischen den beiden Liniensensoren ist
LineData(data);
diff = data [0]- data [1];
Sleep(255);
} // Linie gefunden? Dann wieder hoch zur Endlosschleife
}
return 0;
}
es funktioniert!
Lesezeichen