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:
Code:
#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:
Code:
for (zaehler=0; zaehler<100; zaehler++)
{
MotorDir(FWD,RWD);
MotorSpeed(250,250);
Sleep(250);
}
besser so formulieren:
Code:
MotorDir(FWD,RWD);
MotorSpeed(250,250);
for (zaehler=0; zaehler<100; zaehler++)
{
Sleep(250);
}
Gruß
mic
Lesezeichen