Archiv verlassen und diese Seite im Standarddesign anzeigen : Hindernisausweichprogramm-Asuro fährt nur rükwerz
Sebastian F.
01.11.2008, 12:24
Hallo leute,
ich habe ein Programm zum Hindernisausweichen geschriben. Dieses programm funktionirt aber nicht.
WARUM?
#include "asuro.h"
int main(void)
{
Init();
int zaeler;
StatusLED(YELLOW);
MotorDir(FWD,FWD);
while(1){
if (PollSwitch()>0) {
if (PollSwitch()>0){
MotorDir(RWD,RWD);
for (zaeler=0; zaeler<300; zaeler++) {
Sleep(255);}
for (zaeler=0; zaeler<30; zaeler++) {
FrontLED(ON);
MotorSpeed(140,140);
Sleep(250);}
MotorSpeed(0,0);
for (zaeler=0; zaeler<100; zaeler++) {
MotorDir(FWD,RWD);
MotorSpeed(250,250);
Sleep(250);}}}
else {FrontLED(OFF);}
else {MotorDir(FWD,FWD);
MotorSpeed(140,140);}
}
return 0;
}
:cry: :cry: ](*,)
Vielleicht solltest du etwas genauer beschreiben, was nicht funktioniert?
Kompiliert es nicht oder macht er nicht das, was du erwartest?
radbruch
01.11.2008, 14:41
Hallo,
willkommen im RN-Forum.
Irgendwie bist du über deine Klammern gestolpert, ich konnte dein Programm nicht fehlerfrei übersetzen:
avr-gcc -mmcu=atmega8 -Os -mno-interrupts -funsigned-char -funsigned-bitfields -Wall -Wstrict-prototypes -ggdb -c -DF_CPU=8000000UL -Wa,-acdhlmns=temp.lst temp.c -o temp.o
temp.c: In function `main':
temp.c:28: error: syntax error before "else"
temp.c: At top level:
temp.c:31: error: syntax error before "return"
make: *** [temp.o] Error 1
2
Nachdem ich deinen Code etwas umgestellt habe (ich finde das so übersichtlicher, aber jeder kann's machen wie er will!) funktioniert es fast:
#include "asuro.h"
int main(void)
{
Init();
int zaehler;
StatusLED(YELLOW);
MotorDir(FWD,FWD);
while(1)
{
if (PollSwitch()>0)
{
if (PollSwitch()>0)
{
StatusLED(YELLOW);
MotorDir(RWD,RWD);
for (zaehler=0; zaehler<300; zaehler++)
{
Sleep(255);
}
for (zaehler=0; zaehler<30; zaehler++)
{
FrontLED(ON);
MotorSpeed(140,140);
Sleep(250);
}
MotorSpeed(0,0);
for (zaehler=0; zaehler<100; zaehler++)
{
MotorDir(FWD,RWD);
MotorSpeed(250,250);
Sleep(250);
}
}
else
{
FrontLED(OFF);
}
}
else
{
StatusLED(GREEN);
MotorDir(FWD,FWD);
MotorSpeed(140,140);
}
}
return(0);
}
Da mein asuro zur Zeit keine Räder hat weiß ich allerdings nicht, ob er sich wie gewünscht bewegt. Das FrontLED(OFF) muss wohl in den else-Zweig der ersten if-Abfrage, sonst geht die LED nie mehr aus. (Außer man läßt den Taster genau nach dem ersten if los ;)
Die zusätzlichen StatusLED-Befehle dienen dem debuggen, damit man sieht, was er grad treibt.
Noch ein Tipp: Möglicherweise stört ein zu häufiges MotorSpeed(x,x); die PWM, deshalb sollte man solche Dinge:
for (zaehler=0; zaehler<100; zaehler++)
{
MotorDir(FWD,RWD);
MotorSpeed(250,250);
Sleep(250);
}
besser so formulieren:
MotorDir(FWD,RWD);
MotorSpeed(250,250);
for (zaehler=0; zaehler<100; zaehler++)
{
Sleep(250);
}
Gruß
mic
Sebastian F.
06.11.2008, 17:37
Danke jetzt funktionirz!
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.