ok danke wie/wo soll ich dan teoretisch den Sleep einbauen damit der alles macht?
ok danke wie/wo soll ich dan teoretisch den Sleep einbauen damit der alles macht?
Nee eine Endlosschleife. Ein Sleep ist nicht endlos.
Code:while ( 1 ) { DEIN CODE }
Grüße,
Daniel
Was soll er denn genau machen?wie/wo soll ich dan teoretisch den Sleep einbauen damit der alles macht?
Wenn dein Asuro sich immer umdrehen soll, wenn er vorne irgendwo anstößt, kannst du dein Programm so aufbauen:
Motoren einschalten -> Überprüfen, ob Asuro angestoßen ist
-> Wenn Asuro nicht angestoßen ist -> Wieder überprüfen (mit Endlosschleife)
-> Wenn Asuro angestoßen ist -> Drehung ausführen (Du schaltest die Motoren so, dass er sich dreht und lässt den Asuro dann mit dem Sleep-Befehl so lange nichts tun bis er sich weit genug gedreht hat) -> Motoren auf vorwärts stellen -> wieder bei Schritt 2 mit dem Überprüfen beginnen
Alles machen ist ein bisschen viel für ein Atmega8 Roboter.
Das folgende Programm macht das. Aber, ist das wirklich genau das verfahren was du möchtest? Nun wird er meistens nur 2 mal ein Anstoss erkennen, und danach Rückwärts fahren.Er fäht nach vorne----> Stößt an----> Dreht sich---->Stößt wieder an----> Fährt rückwärts
Code:#include "asuro.h" // "Er fäht nach vorne----> Stößt an----> Dreht sich---->Stößt wieder an----> Fährt rückwärts" int main(void){ Init(); // " Er fäht nach vorne" MotorSpeed(112,100); MotorDir(FWD,FWD); StatusLED(GREEN); if (PollSwitch()>0) { // Stößt an----> Dreht sich MotorSpeed(112,100); MotorDir(RWD,FWD); BackLED(ON,ON); FrontLED(ON); StatusLED(RED);} for(i=0;i<200;i++) Sleep(72); // Wartet 200 milisekunden weil es dreht. // Keine ahnung was du mit das hier unter möchtest. Ist kein teil deine Aktion Beschreibung. // Das wurde er machen wan kein Anstoss erkannt wird. Ist aber auch ein art von Drehung! /* else { MotorSpeed(100,0); MotorDir(RWD,BREAK); StatusLED(YELLOW);} */ // Obene else-Block ist aus-kommentiert. if (PollSwitch()>0){ // Stößt wieder an----> Fährt rückwärts MotorSpeed(112,100); MotorDir(RWD,RWD); StatusLED(RED); BackLED(ON,ON);} // Und nun für immer Rückwärts fahren???? while(1); // Ich gehe in Zen-zustand, für immer! Doch fahre auch noch Rückwärts return 0; // Ende der Main-Funktion. Dieses Befehl soll niemals erreicht werden. }
Ich danke ich probiere das dann mal aus und schau ml was raus kommt
Der Gibt mir jetzt ein error raus vllt muss ich noch irgend was einfügen:
Programm:
Errorcode:Code:#include "asuro.h" // "Er fäht nach vorne----> Stößt an----> Dreht sich---->Stößt wieder an----> Fährt rückwärts" int main(void){ Init(); // " Er fäht nach vorne" MotorSpeed(112,100); MotorDir(FWD,FWD); StatusLED(GREEN); if (PollSwitch()>0) { // Stößt an----> Dreht sich MotorSpeed(112,100); MotorDir(RWD,FWD); BackLED(ON,ON); FrontLED(ON); StatusLED(RED);} for(i=0;i<200;i++) Sleep(72); if (PollSwitch()>0){ MotorSpeed(112,100); MotorDir(RWD,RWD); StatusLED(RED); BackLED(ON,ON);} while(1); return 0; }
Code: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: `i' undeclared (first use in this function) test.c:13: error: (Each undeclared identifier is reported only once test.c:13: error: for each function it appears in.) test.c:22: error: parse error at end of input make: *** [test.o] Error 1
Geh in Zeile 13 und guck was du da mit dem i machst. Tippfehler ? Sollte es nicht definiert sein ( Was ja in der Fehlerbeschreibung steht) dann definiere es vorher.
vor
for(i=0;i<200;i++) Sleep(72);
int i;
einfügen
Grüße,
Daniel
Lesezeichen