-
ASURO Kollisions Problem
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:
Code:
#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?
-
Sleep(72000);
Da sollte zumindest ein Fehler beim Kompilieren auftreten. Programm gespeichert vor dem Kompilieren?
-
ja, aber als ich es mit winAVR komplitiert habe gab es kein problem.
Es lies sich auch ohne weiteres auf den asuro übertragen.
-
Es gibt nur Warnungen, weil der Parameter für Sleep() größer als 8 Bit ist.
So vielleicht?
Code:
#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;
}
-
Danke, es hat funktioniert.
Aber was habe ich falsch gemacht?
-
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);
-
Danke, jetzt verstehe ich.
/close