ok danke wie/wo soll ich dan teoretisch den Sleep einbauen damit der alles macht?
Werbung
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