PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Asuro und die Sleep funktion



redsnapper
12.10.2005, 14:27
Hallo Forum,

ich bin gerade dabei ein kleines Kollisionsprogramm zu schreiben, leider treten (für mich) unerklärliche Fehler auf vielleicht könnt ihr mir weiter helfen.

Zum testen habe ich Folgenden Code geschrieben, funktioniert auch ohne Probleme.


if (PollSwitch() > 0) {
StatusLED(RED);
MotorDir(RWD,RWD);
MotorSpeed(120,120);
} else {
StatusLED(GREEN);
MotorDir(FWD,FWD);
MotorSpeed(120,120);
}



Sobald ich aber einen Sleep Funktion einbaue spinnt das Teil, Asuor verhält sich als währe eine Taste gedrückt.



if (PollSwitch() > 0) {
MotorDir(RWD,RWD);
MotorSpeed(120,120);
StatusLED(RED);
BackLED(ON,ON);
for (i=0; i<250; i++) {
Sleep (216);
}
MotorDir(RWD,FREE);
for (i=0; i<250; i++) {
Sleep (216);
}
} else {
MotorDir(FWD,FWD);
MotorSpeed(120,120);
StatusLED(GREEN);
BackLED(OFF,OFF);
}


Danke

m.a.r.v.i.n
12.10.2005, 16:13
Hallo redsnapper,

willkommen im Roboternetz Forum.

In der Anleitung zum Asuro findet sich zur PollSwitch Funktion folgender Hinweis:


Evtl. muss diese Funktion mehrfach hintereinander aufgerufen werden, um das „richtige“ Ergebnis
zu erhalten. Der geladene Kondensator C7 muss sich erst entladen. Dies kann ein wenig dauern.
Wenn der A/D-Wandler zu früh abtastet, können verschiedenste Spannungswerte gemessen
werden.


Bei meinem Asuro z.B. muß ich die PollSwitch() Funktion 8x hintereinander aufrufen, bis ich das Ergebnis verwenden kann.



...

while(1) {
...
PollSwitch();
PollSwitch();
PollSwitch();
PollSwitch();
PollSwitch();
PollSwitch();
PollSwitch();
if (PollSwitch() > 0) {
// Taste gedrueckt
...
}
else {
// keine Taste gedrueckt
...
}
...
}


Vielleicht hilft das ja.

Gruß Peter

redsnapper
12.10.2005, 18:39
Erst mal danke für deinen Tipp, leider ändert sich bei mir auch nach 10 PollSwitch ausrufe nichts.

Hab eine andere Code geschrieben, der (bis jetzt :-)) ziemlich gut funtzt.




int tmp1 = PollSwitch();
int tmp2 = PollSwitch();
if (tmp1 > 0 && tmp2 > 0 && tmp1 == tmp2) {