6 schwartze auf einem Reifen.
Den Umfang habe ich ja berechnet:
Umfang=2*pi*radius
6 schwartze auf einem Reifen.
Ich habe jetzt hier einmal eine kleine Funktion geschrieben, aber ich bin mir nicht sicher ob die auch funktioniert. (bis jetzt nur Theorie)
gesch = Geschwindichkeit Werte von 0-255
weit = Strecke in ! cm ! Werte zwischen -32768 .. +32767
Das er garade fährt und andere Kontrollen während der Funktion muss man hald noch ein bauenCode:unsigned int data[2]; int weit; unsigned char gesch; unsigned int gef; unsigned int mmm; int drive(int weit, unsigned char gesch) { if(weit > 0){ MotorDir(FWD,FWD);} else if(weit < 0){ MotorDir(RWD,RWD);} else{ break;} MotorSpeed (gesch,gesch); OdometrieData(data); if(data[0] < 500){ hellichkeit = 0;} else{ hellichkeit = 1;} OdometrieData(data); while (weit < gef){ if(hellichkeit == 0){ if(data[0] > 500){ mmm = mmm + 68; hellichkeit = 1;}} else{ if(data[0] < 500){ mmm = mmm + 68; hellichkeit = 0;}} gef = mmm/100;} MotorSpeed(BREAK,BREAK);}![]()
gruß
Johannes
Muss man deine Funktion dann so anwenden?
Ich habe deine Funktion als odo.c gespeichert.Code:#include "asuro.h" #include "odo.c" int main(void) { int weit; unsigned char gesch; weit==10; gesch==120; Init(); int drive(int weit, unsigned char gesch) }
Nein
Ich bin mir nur an volgender Stelle nicht sicher in meiner Funktion:Code:#include "asuro.h" #include "odo.c" int main(void) { int weit; unsigned char gesch; weit=10; gesch=120; Init(); drive(weit,gesch); return 0; }
ob dort die Daten richtig eingetragen werden.Code:MotorSpeed (gesch,gesch);
Kannst ja sagen, ob es funktioniert.
Oder findet jemand einen Fehler?
Also die Fehler kriege ich jetzt immer zurück guck sie dir mal an und ich habe glaube ich einen Fehler am Ende deiner Funktion gefundenCode: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 In file included from asuro.h:34, from test.c:1: c:/winavr-20090313/lib/gcc/../../avr/include/avr/signal.h:36:2: warning: #warning "This header file is obsolete. Use <avr/interrupt.h>." In file included from test.c:2: odo.c: In function 'drive': odo.c:15: error: break statement not within loop or switch odo.c:21: error: 'hellichkeit' undeclared (first use in this function) odo.c:21: error: (Each undeclared identifier is reported only once odo.c:21: error: for each function it appears in.) make: *** [test.o] Error 1 > Process Exit Code: 2 > Time Taken: 00:00
Da muss glaube ich noch ein
stehen.Code:return 0;
Ich galube es hängt mit der hellichkeit zusammen die hast die nicht deklariert.
doch die habe ich mal auf 500 gestellt, die musst du aber noch für deinen Asuro anpassen.
Was habe ich falsch gemacht: Er fährt nur stur gerade ausCode:#include "asuro.h" int main(void) { Init(); int zeit; unsigned char taste; MotorDir(FWD,FWD); MotorSpeed(120,124); StatusLED(GREEN); FrontLED(ON); while (1){ taste=PollSwitch(); taste=PollSwitch(); taste=PollSwitch(); taste=PollSwitch(); taste=PollSwitch(); taste=PollSwitch(); taste=PollSwitch(); taste=PollSwitch(); if (taste==1) { MotorSpeed(0,0); StatusLED(RED); BackLED(ON,ON); MotorDir(RWD,RWD); MotorSpeed(150,151); for(zeit=0;zeit<1000;zeit++){ Sleep(72);} BackLED(OFF,OFF); StatusLED(GREEN); MotorDir(FWD,FWD); MotorSpeed(0,180); for (zeit=0; zeit<500; zeit++){ Sleep(72);} MotorSpeed(120,121); for(zeit=0;zeit<500;zeit++){ Sleep(72);} BackLED(OFF,OFF); StatusLED(GREEN); MotorDir(FWD,FWD); MotorSpeed(180,0); for (zeit=0; zeit<500; zeit++){ Sleep(72);} MotorSpeed(120,121); taste=PollSwitch(); taste=PollSwitch(); taste=PollSwitch(); taste=PollSwitch(); taste=PollSwitch(); taste=PollSwitch(); } else if (taste==32) { taste=PollSwitch(); taste=PollSwitch(); taste=PollSwitch(); taste=PollSwitch(); taste=PollSwitch(); taste=PollSwitch(); MotorSpeed(0,0); StatusLED(RED); BackLED(ON,ON); MotorDir(RWD,RWD); MotorSpeed(150,152); for(zeit=0;zeit<1000;zeit++){ Sleep(72);} BackLED(OFF,OFF); StatusLED(GREEN); MotorDir(FWD,FWD); MotorSpeed(180,0); for (zeit=0; zeit<500; zeit++){ Sleep(72);} MotorSpeed(120,122); for(zeit=0;zeit<500;zeit++){ Sleep(72);} BackLED(OFF,OFF); StatusLED(GREEN); MotorDir(FWD,FWD); MotorSpeed(0,180); for (zeit=0; zeit<500; zeit++){ Sleep(72);} MotorSpeed(120,122); } else if (taste==16 || taste==2) { MotorSpeed(0,0); StatusLED(RED); BackLED(ON,ON); MotorDir(150,152); for(zeit=0;zeit<1000;zeit++){ Sleep(72);} BackLED(OFF,OFF); StatusLED(GREEN); MotorDir(FWD,FWD); MotorSpeed(180,0); for (zeit=0; zeit<1200; zeit++){ Sleep(72);} MotorSpeed(120,122); } return(0); } }
Ich hab das ganze jetzt einmal auf die 1 Taste gekürtzt, dass man sehen kann, ob das überhaupt funktioniert.
Versuchs mal mit dem hier:
Code:#include "asuro.h" int main(void) { Init(); int zeit; unsigned char taste,taste1,taste2; MotorDir(FWD,FWD); MotorSpeed(120,124); StatusLED(GREEN); FrontLED(ON); while (1){ taste1 = PollSwitch(); taste2 = PollSwitch(); if(taste1 == taste2); {taste = taste1; if (taste==1) { MotorSpeed(0,0); StatusLED(RED); BackLED(ON,ON); MotorDir(RWD,RWD); MotorSpeed(150,151); for(zeit=0;zeit<1000;zeit++) { Sleep(72); } BackLED(OFF,OFF); StatusLED(GREEN); MotorDir(FWD,FWD); MotorSpeed(0,180); for (zeit=0; zeit<500; zeit++) { Sleep(72); } MotorSpeed(120,121); for(zeit=0;zeit<500;zeit++) { Sleep(72); } BackLED(OFF,OFF); StatusLED(GREEN); MotorDir(FWD,FWD); MotorSpeed(180,0); for (zeit=0; zeit<500; zeit++) { Sleep(72); } MotorDir(FWD,RWD); MotorSpeed(150,151); for(zeit=0;zeit<3000;zeit++) }} return(0); } }
Lesezeichen