okay danke jetzt gehts
Hallo
Hauptfehler: Sleep(500);
Sleep() erwartet einen Byte-Parameter zwischen 0 und 255. In asuro.c sollte #include <signal.h> durch #include <interrupt.h> ersetzt werden weil signal.h veraltet ist.
Code für eine Sekunde Pause:
int i;
for(i=0; i<1000; i++) Sleep(72); // Sleep(72) dauert eine Millisekunde
Gruß
mic
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
okay danke jetzt gehts
hey noch mal ne frage wies einer ob oder wo es eine Referenz Liste für den asuro gib mit Parametern
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
danke schön
hey ho ich hab da noch ma so nenn Problem hoffentlich könnt ihr mir weiter helfen also ich wollte nenn Programm schreiben das guckt ob es eine Kollision gibt aber es funktioniert nicht so ganz.
also wenn ich das was jetzt aus kommentiert ist hin schreibe und die Funktion motorFWD aus kommentiere dann funktionieren die Tasten alle aber sonst fährt er die ganze Zeit nach vorne.
wo ist mein Fehler?
Code:#include "asuro.h" int main(void) { Init(); int i; MotorSpeed(0,0); MotorDir(FWD,FWD); while(1) { unsigned char sw; //MotorDir(FWD,FWD); //MotorSpeed(0,0); sw = PollSwitch(); StatusLED(OFF); FrontLED(OFF); BackLED(OFF,OFF); if (sw & 0x01) Back(); else if (sw & 0x02) Back(); else if (sw & 0x04) Back(); else if (sw & 0x08) Back(); else if (sw & 0x10) Back(); else if (sw & 0x20) Back(); MotorFWD(); } return 0; } void MotorFWD() { MotorDir(FWD,FWD); MotorSpeed(120,120); FrontLED(ON); return 0; } void Turn (void) { MotorDir(FWD,RWD); MotorSpeed(120,120); BackLED(ON,ON); StatusLED(RED); FrontLED(ON); pSleep(350); return 0; } void Back (void) { MotorDir(RWD,RWD); MotorSpeed(120,120); BackLED(ON,ON); StatusLED(GREEN); FrontLED(ON); pSleep(500); Turn(); return 0; } void pSleep(int p) { int i; for(i=0;i<=p;i++) { Sleep(72); } return 0; }
Ich verstehe deine problem beschreibung nicht.
Was macht er mit das obene program. Und was macht er mit MotorFWD auskommentiert und MotorDir und MotorSpeed wieder eingestellt.
Auserdem söllte dienicht (in diesen fall) im inneren der While-schleife stehen. Variabelen sind nur gultig zwischen der gleich daneben stehenden {} klammern. In dein program wird sw jede schleife durchlauf wieder auf neu deklariert. Ich denke nicht das es die ursache ist deiner problem. Aber schön ist es nicht.Code:unsigned char sw;
Die ganze if-statement kan man auch einkurzen wen er das selbe reagieren mus auf die taster:
Die tastertest mit PollSwitch ist aber empfindlich fur störung von den motoren. Ein einfache lösung ist mehrfach die PollSwitch abfragen, und nur darauf reagieren wan der wert stabiel ist.Code:if (sw & 0x3F) /* irgend einer taster? */ Back(); else MotorFWD();
Code:sw = PollSwitch(); if (sw==PollSwitch()) && (sw & 0x3F) Back(); /* Auwa, meine nase tut wirklich weh! Doppelt gechecked. */ else MotorFWD(); ...
Hey danke für deine Hilfe hab das Programm noch mal nenn bisschen umgeändert und das mit dem PollSwitch geändert jetzt funktioniert es.
Hallo
Schön, dass es nun funktioniert. Könntest du uns noch die aktuelle Version deines Programms zeigen?
Gruß
mic
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Natürlich vll hat ja jemand noch eine Verbesserung Vorschlag dafür.
Ich arbeite grade schon an der Odometrie.
Code:int main(void) { Init(); MotorSpeed(0,0); MotorDir(FWD,FWD); unsigned char sw; MotorFWD(); while(1) { sw = PollSwitch(); if (sw==PollSwitch() && (sw & 0x3F)) { Back(); } else { MotorFWD(); } } return 0; } void MotorFWD(void) { MotorDir(FWD,FWD); MotorSpeed(120,120); FrontLED(ON); return 0; } void Turn (void) { MotorDir(FWD,RWD); MotorSpeed(120,120); pSleep(350); StatusLED(OFF); FrontLED(OFF); BackLED(OFF,OFF); return 0; } void Back (void) { MotorDir(RWD,RWD); MotorSpeed(120,120); BackLED(ON,ON); StatusLED(GREEN); FrontLED(ON); pSleep(500); Turn(); return 0; } void pSleep(int p) { int i; for(i=0;i<=p;i++) { Sleep(72); } return 0; }
Lesezeichen