Wer oder was sagt Error?
Der Compiler? Oder der Programmer? Oder der Asuro, wie auch immer?
Eine etwas genauere Fehlerbeschreibung könnte es einfacher machen, den Fehler zu erkennen
Mfg Thegon
Könnt ihr mir helfen?
Ich hab den Asuro mal wieder ausgepackt und wollte malwieder ein Programm draufwerfen. Aber der sagt mir ein error! Hier mal das Programm:
[#include "asuro.h"
int main(void){
Init();
while(1){
do {
MotorSpeed(112,100);
MotorDir(RWD,RWD);
StatusLED(RED);
BackLED(ON,ON);
}
while (PollSwitch()==0);
{
else
MotorSpeed(112,100);
MotorDir(FWD,FWD);
StatusLED(GREEN);
FrontLED(ON);}
}
}
Und den error wenn ich "make" mache:
avr-gcc -c -mmcu=atmega8 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=test.lst test.c -o test.o
test.c: In function `main':
test.c:13: error: parse error before "else"
make: *** [test.o] Error 1
> Process Exit Code: 2]--> Gelöst
Bitte um schnelle Hilfe ist für meine Technik Fachinterne.
Geändert von NicMaxFen (05.02.2012 um 18:11 Uhr)
Wer oder was sagt Error?
Der Compiler? Oder der Programmer? Oder der Asuro, wie auch immer?
Eine etwas genauere Fehlerbeschreibung könnte es einfacher machen, den Fehler zu erkennen
Mfg Thegon
habs editiert sag einfach wenn was fehlt
Hallo NicMaxFen,
hab den Code gerade überflogen.
Bei der 2. While-Schleife hast du zuerst
einen Strichpunkt gemacht und dann eine
geschweifte Klammer auf, aber das While ist mit dem
Strichpunkt schon abgeschlossen, also lösche den Strichpunkt einmal
weg!
Außerdem fällt mir auf, dass vor dem Else gar kein if steht!
mfg masasibe
[WICHTIG] Ah ok ty und könnt ihr mir pls sagen wie ich das mach, das Der roboter mehr als 2 Befehle ausfürt:
z.B:
Er fäht nach vorne----> Stößt an----> Dreht sich---->Stößt wieder an----> Fährt rückwärts
Ich weis nicht wie ich das machen soll und find nichts . Ich weiß auch garnicht wie sowas aussieht
IIIIIIIIIIIIIII
IIIIIIIIIIIIIII
IIIIIIIIIIIIIII
VVVVVVVV
Bitte Hier beschäftigen
Geändert von NicMaxFen (05.02.2012 um 18:14 Uhr)
Bitte keine solche Eile!
Du kannst das z.B. mit einer Wartefunktion der delay.h Bibliothek machen.
Wenn der Asuro vorne angestoßen ist, setzt du die Motoren so, dass der Asuro
die Kurve fährt und führst dann einen Wartebefehl aus. Du musst halt ausprobieren
wieviel Zeit dein Asuro braucht um sich so weit zu drehen wie du möchtest.
Nach dem Wartebefehl setzt du dann die Motoren wieder auf vorwärts oder rückwärts
oder wie du das halt möchtest usw.
Vorteil der Wartefunktion ist, dass man das sehr schnell und einfach programmieren kann.
Der Nachteil ist aber, dass der Asuro sich´, während der Wartebefehl ausgeführt wird,
um nichts anderes kümmern kann.
Die andere Möglichkeit wäre die Verwendung eines Timers. Ein Timer löst immer nach einer
gewissen Zeit eine bestimmte Routine die sogenannte Interrupt-Service Routine aus und so
könntest du auch den Asuro eine gewisse Zeit drehen und dann wieder vorwärts fahren lassen.
Über die genaue Verwendung eines Timers liefert dir Google die Antwort!
Muss ich für delay.h ihrgend eine Dati runterladen oder einfach nur einfugen: #include "delay.h" und dann wo ichs brauch
"void _delay_ms(double ms)"
Das solle eigentlich auch ohne etwas herunterzuladen mit dem Befehl: #include <avr/delay.h> gehen,
aber probiere es doch einfach aus und schau, ob der Compiler
eine Fehlermeldung ausspuckt!
Das kannst du dir übrigens auch noch durchlesen:
http://www.rn-wissen.de/index.php/Warteschleife
Da geht es um Warteschleifen und wann sie vom Compiler wegoptimiert wird.
Ganz unten steht auch etwas über die delay.h
mfg masasibe
So ich hab mal des mit der delay.h und so probiert und der Compiler hat mir dann ein Error rausgegeben:
Programm:
#include "asuro.h"
#include <avr/delay.h>
int main(void){
Init();
while(1)
MotorSpeed(112,100);
MotorDir(FWD,FWD);
StatusLED(GREEN);
while (PollSwitch()==0){
_delay_ms(200);
MotorSpeed(112,0);
MotorDir(FWD,FWD);
StatusLED(YELLOW);
FrontLED(ON);
if (PollSwitch()>0){
_delay_ms(200);
MotorDir(RWD,RWD);
MotorSpeed(112,100);
StatusLED(RED);
BackLED(ON,ON);
FrontLED(ON);}
else
_delay_ms(200);
MotorDir(FWD,FWD);
MotorSpeed(112,0);
StatusLED(YELLOW);
FrontLED(ON);}
}
/edit: ok habs problem gelöst.
Könnte jeman trotzdem noch drüber schauen
/edit: mhmm er macht nur das was in dem Ersten befehl steht
Geändert von NicMaxFen (07.02.2012 um 20:25 Uhr)
Probier mal #include <util/delay.h> dann wirds was. Btw. benutz mal die Code-Tags.
Außerdem fehlen noch geschweifte Klammern bei den if/else-Blöcken.
Dann solltest du, wenn du es ernst meinst, dir die Tutorials anschauen.Bin in dem Ganzen noch unerfahren!
Grüße,
Daniel
Lesezeichen