Archiv verlassen und diese Seite im Standarddesign anzeigen : [ERLEDIGT] ASURO Kollisions Problem
SuperManitu
30.03.2012, 18: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, 18:27
Sleep(72000);
Da sollte zumindest ein Fehler beim Kompilieren auftreten. Programm gespeichert vor dem Kompilieren?
SuperManitu
30.03.2012, 18: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, 19: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, 12:12
Danke, es hat funktioniert.
Aber was habe ich falsch gemacht?
radbruch
31.03.2012, 12: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, 12:55
Danke, jetzt verstehe ich.
/close
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.