PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [ERLEDIGT] ASURO Kollisions Problem



SuperManitu
30.03.2012, 17:13
Hallo,
ich hab ein Problem mit den kollisions tastern meines ASUROs: ich muss sie gedrückt halten damit er die schritte ausführt die er soll:

#include "asuro.h"

int main(void)
{
int n = 0, g = 0;
Init();
MotorSpeed(255,250);
while (n<100){
if(g>0){
MotorDir(RWD,RWD);
Sleep(72000);
MotorDir(RWD,BREAK);
Sleep(72000);
g=0;
}
MotorDir(FWD,FWD);
unsigned char taste;
taste = PollSwitch();
if (taste>0){
g=g+1;
}
}
while(1);
return 0;
}

Was mache ich falsch?

radbruch
30.03.2012, 17:27
Sleep(72000);

Da sollte zumindest ein Fehler beim Kompilieren auftreten. Programm gespeichert vor dem Kompilieren?

SuperManitu
30.03.2012, 17:30
ja, aber als ich es mit winAVR komplitiert habe gab es kein problem.
Es lies sich auch ohne weiteres auf den asuro übertragen.

radbruch
30.03.2012, 18:13
Es gibt nur Warnungen, weil der Parameter für Sleep() größer als 8 Bit ist.

So vielleicht?


#include "asuro.h"

int main(void)
{
unsigned char taste;
int g = 0, i;

Init();
MotorSpeed(255,250);
while (1){
if(g>0){
MotorDir(RWD,RWD);
i = 1000;
while(i--) Sleep(72);
MotorDir(RWD,BREAK);
i = 1000;
while(i--) Sleep(72);
g = 0;
StatusLED(GREEN);
}
MotorDir(FWD,FWD);
taste = ((PollSwitch() > 0) && (PollSwitch() > 0));
if (taste){
g = g+1;
StatusLED(RED);
}
}
while(1);
return 0;
}

SuperManitu
31.03.2012, 11:12
Danke, es hat funktioniert.
Aber was habe ich falsch gemacht?

radbruch
31.03.2012, 11:51
Ich vermute, dass eigentliche Problem war Sleep(72000); Hier "weiß" der Kompiler nicht, was er als Wert einsetzen soll, weil der 8-bit Parameter nur von 0 bis 255 reicht. Da ein Sleep(72) eine 1/1000 Sekunde dauert wird es in einer Schleife 1000 mal wiederholt:

i = 1000;
while(i--) Sleep(72);

SuperManitu
31.03.2012, 11:55
Danke, jetzt verstehe ich.
/close