PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Ich bekomm es einfach nicht gebacken: PollSwitch funktion



faken
01.09.2006, 20:32
Ich probiere jetzt hier schon seit knapp 1.5 stunden rum und bekomm es einfach nicht gebacken den asuro zu auch nur einer reaktion zu bewegen wenn ich einen taster an der front drücke...


Hier mein Code

#include <asuro.h>
int main(void) {
Init();

PollSwitch();
while(PollSwitch()>0)
{
MotorDir(FWD,FWD);
MotorSpeed(120,10);
}
while(1);
return 0;
}


Ps.:

Der Switch test funktioniert supper ....

linux_80
01.09.2006, 22:22
Hallo,

in deinem Programm wird der obere Teil solange ausgeführt, wie eine Taste gedrückt wird,
in dem Fall das keine mehr gedrückt wird, springt das Programm in die untere Endlosscheife, und kommt da auch nimer raus !

Also wenn beim einschalten des Asuro schon kein Taster betätigt wurde, macht der Asuro einfach garnix merkbares !

faken
02.09.2006, 20:28
Vielleicht kann jemand von euch mir ja nochmal weilterhelfen...
Ich versuche gerade ein Programm zu schreiben, welches Feststellen kann ob sich ein rad nicht mehr dreht (asuro hängt am teppich fest o.ä.)


Ich habe bis jetzt schon folgendes Fertig:



#include "asuro.h"

int main(void)
{
unsigned int Rmin = 1024, Rmax = 0, Lmin = 1024, Lmax = 0, Rmitte = 512, Lmitte = 512, data[2];
unsigned int wegr=0, wegl=0;
unsigned char flagl=FALSE, flagr=FALSE;
Init();
MotorDir(FWD,FWD);
MotorSpeed(100,125);
while(1) {
OdometrieData(data); // 0. links, 1. rechts
// max links
if (data[0] > Lmax)
Lmax += (data[0] - Lmax) / 2;
// min links
if (data[0] < Lmin)
Lmin -= (Lmin - data[0]) / 2;
// max rechts
if (data[1] > Rmax)
Rmax += (data[1] - Rmax) / 2;
// min rechts
if (data[1] < Rmin)
Rmin -= (Rmin - data[1]) / 2;
Rmitte=(Rmax+Rmin)/2;
Lmitte=(Lmin+Lmax)/2;
if ((data[0] < Lmitte) && (flagl == TRUE)) {
flagl = FALSE;
wegl++;
}
if ((data[0] > Lmitte) && (flagl == FALSE)) {
flagl = TRUE;
wegl++;
}
if ((data[1] < Rmitte) && (flagr == TRUE)) {
flagr = FALSE;
wegr++;
}
if ((data[1] > Rmitte) && (flagr == FALSE)) {
flagr = TRUE;
wegr++;
}

unsigned int test[2];

wegr = test[1];


if (wegr == wegaltr)
{
StatusLED(RED);
serwrite(wegr,20);
serwrite(wegaltr,20);
}



}
return 0;
}






Mein Problem ist jetzt, wie schaffe ich es den Alten wert zu speichern also was z.b das rechte rad von der z.b. 2. messung hatte.


Wäre nett wenn mir jemand helfen könnte