vielleicht auch mit diesem Programm:
PHP-Code:
#include "asuro.h"
#define STOP 1
int main(void)
{
unsigned int lineData[2];
unsigned int erst[2];
int x;
int i;
Init();
LineData(erst);
for(i = 0; x< 100000000; i++){
for(i = 0; i< 3; i++){
FrontLED(ON);
MotorDir (FWD,FWD);
MotorSpeed(120,120);
LineData(lineData);
if ((lineData[0]- erst[0] < STOP ) && (lineData[1] - erst[1] < STOP)) {
MotorSpeed(120,120);
MotorDir(RWD,RWD);
for(i = 0; i< 200; i++){
Sleep(255);
}
MotorSpeed(140,0);
MotorDir(RWD,BREAK);
BackLED(ON,ON);
for(i = 0; i< 400; i++){
Sleep(255);
}
BackLED(OFF,OFF);
}
else;
{
MotorSpeed(100,100);
MotorDir(FWD,FWD);
}
}
}
while (1);
return (0);
}
mfG
[Edit von radbruch]
Hast du das Programm selbst mal ausprobiert? Mir ist nicht ganz klar wie das funktioniert:
if ((lineData[0]- erst[0] < STOP )...
Wenn ( der immer wieder mit Beleuchtung neu eingelesene Linienwert links) minus ( der beim Start ohne Beleuchtung eingelesene Linienwert links) insgesamt kleiner als STOP ist...
Wäre nicht ein || sinnvoller als das && ? Wenn der Abgrund von einem Liniensensor erkannt wird würde dann gestoppt.
Der else-Zwieg endet direkt nach dem ; hinter else, alles was danach kommt wird unabhängig von der if-Bedingung ausgeführt.
Verschachtelte For-Schleifen dürfen nicht dieselbe Variable verwenden, i wird nie größer als 401. Maxwert einer Integervariable ist 32.767, 100000000 wird deshalb sowieso nie erreicht:
for(i = 0; x< 100000000; i++){
for(i = 0; i< 3; i++){
...
for(i = 0; i< 200; i++)
...
for(i = 0; i< 400; i++)
Etwas umformatiert und mit allen Änderung sieht dein Programm dann so aus:
PHP-Code:
#include "asuro.h"
#define STOP 1
int main(void)
{
unsigned int i, lineData[2], erst[2];
Init();
LineData(erst); // die erste Lesung ist immer Schrott!
LineData(erst);
FrontLED(ON);
Sleep(10);
MotorDir (FWD,FWD); // vorwärts fahren
MotorSpeed(120,120);
while(1)
{
LineData(lineData);
if ((lineData[0]- erst[0] < STOP ) && (lineData[1] - erst[1] < STOP))
{
MotorSpeed(120,120); // zurückstoßen
MotorDir(RWD,RWD);
for(i = 0; i< 200; i++)
Sleep(255);
MotorSpeed(140,0); // drehen
MotorDir(RWD,BREAK);
BackLED(ON,ON);
for(i = 0; i< 400; i++)
Sleep(255);
BackLED(OFF,OFF);
}
else
{
MotorDir (FWD,FWD); // vorwärts fahren
MotorSpeed(120,120);
}
}
return (0);
}
(ungetestet)
Ich hoffe, ich habe nichts übersehen.
Lesezeichen