PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : definierte Funktionen



frank1210
09.02.2010, 12:20
Hi bei experimentieren mit Funktionen habe ich folgendes gebastelt:

#include "asuro.h"
int i=0;

void Wende_r(void) //Funktion Wende rechts
{MotorDir(RWD,RWD);
MotorSpeed(100,200);
for(i=0;i<200;i++){Sleep(255);}
}

void Wende_l(void) // Funktion Wende links
{MotorDir(RWD,RWD);
MotorSpeed(200,100);
for(i=0;i<200;i++){Sleep(255);}
}
int main(void)
{


Init();
while(1) // Endlosschleife
{
StatusLED(RED); // Status Rot
MotorDir(FWD,FWD); // Fährt geradeaus
MotorSpeed(200,200);
while((PollSwitch()>=2)&&(PollSwitch()<8)) // bei Kollisieon recht
{
StatusLED(GREEN); // Status Grün
MotorDir(BREAK,BREAK); // beide Motoren Stop
MotorSpeed(0,0); // Geschwindigkeit 0
for(i=1;i<300;i++) Sleep(255); // kurze Pause
Wende_l(); // oben definierte Funktion Wende links ausführen, und danach wieder geradeaus

}

while((PollSwitch()>=8)&&(PollSwitch()<=32)) // bei Kollisieon links
{
StatusLED(YELLOW); // Status gelb
MotorDir(BREAK,BREAK); // beide Motoren Stop
MotorSpeed(0,0); // Geschwindigkeit 0
for(i=1;i<300;i++) Sleep(255); // kurze Pause
Wende_r(); // oben definierte Funktion Wende rechts ausführen, und danach wieder geradeaus

}
}
return 0; // wird nie erreicht
}
Mein ASURO spinnt aber bei diesem Programm. Mal fährt er geradeaus, und fängt plötzlich mit dem abarbeiten der Funktionen an, manchmal fährt er garnicht erst los, und macht gleich Quatsch.
Mit dem Tasterausleseprogramm bekomme ich korrekte Werte;1;2;4;8;16;32
Woran kanns liegen???

Ceos
09.02.2010, 13:13
die funktion pollswitch sollte grundsätzlich zwar mehrfach aufgerufen werrden, aber dann nicht in unterschiedlichen vergleichen!

machs lieber so, dass du 4 mal pollswitch aufrufst, und wenn 4 mal dasserlbe rauskommt, speicher den wert in eine variable und vergleich mit dsieser ... stichwort "prellen" an dieser stelle ^^

Valen
09.02.2010, 18:31
Genau, jede anruf von PollSwitch() ist einer taster messung. Die 2 anruffen im begin von jedem while-schleife werden separat ausgefuhrt. Und könnte im prinzip 2 verschiedene werten geben. In diesen situation wird den && stellung nicht das gewunschte effekt haben.

Weil die PollSwitch messung relatief empfindlich ist fur elektrische störungen von dem motoren, macht er diesen paranoiden bewegungen.



char taster;
...

taster=PollSwitch(); /* Erste PollSwitch messung */
While (taster==PollSwitch()) /* Zweiter Messung und gleichheit-test -> schleife trit nur in bei 'stabiele' taster zustand */
{
...
/* Mach vielleicht etwas mit den taster-wert */
...
}
...