PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PollSwitch(); funktionirt nicht mit if



Sim Robot
27.01.2008, 13:07
Ich habe ein großes Problem nämlich wenn ich ein Programm schreibe das ein if (PollSwich()...){ enthält funktionirt es nicht.
So sieht mein Programm im ganzen aus

#include "asuro.h"

int main(void){
Init();
unsigned char ta;
while(1){
ta=PollSwitch();
if(ta>0){
StatusLED(RED);
}
else{
StatusLED(GREEN);
}
}
return 0;
}
Wenn ich aller dings einen Taster drücke passiert gar nichts.
Und wenn ich das Programm so schreibe funktionirt es

#include "asuro.h"

int main(void){
Init();
while(1){
while(PollSwitch()==0){
MotorDir(FWD,FWD);
MotorSpeed(120,120);
}
MotorSpeed(0,0);
}
return 0;
}
Das kurze Programm funktionirt so aber ein Langes kann so ja nicht funktioniren.

Hansi41
27.01.2008, 13:44
hmm, ich glaube es könnte daran liegen, dass du die variable unsigned char ta nicht auf null gesetzt hast, versuch mal:

unsigned char ta=0;

und dann ruf einmal die funktion pollswitch mehr mals auf, also so etwa:

PollSwitch();
Sleep(255);
PollSwitch();
Sleep(255);
PollSwitch();
Sleep(50);
PollSwitch();
Sleep(50);

und dann schreibst du:

PollSwitch() = ta;

ich glaube, dass müsste eig nun funktionieren, also bei mir funktioniert es auf jeden fall.

mfg hans

sloti
27.01.2008, 13:56
Hi,

also die Pollswitch funktion mehrmal aufzurufen ist richtig und muss eigentl. auch gemacht werden, aber die Sleep funktion dazwischen brauchst du eigentlich nicht. So geht es etwas eleganter:
a=PollSwitch();
b=PollSwitch();


if ((a==b)&&(b>0))

{mach_irgendwas()}

mfg
Erik

Hansi41
27.01.2008, 13:59
ja da hast du eig recht, bin eben noch am andang meiner programmierkarriere und bin im mom noch glücklich, wenn er überhaupt fährt^^

sloti
27.01.2008, 14:01
Solange es funktioniert und er das macht was er soll ist es ja egal wies aussieht. ;)

Hansi41
27.01.2008, 14:32
ja genau so seh ich es auch so, allerdings versuche ich immer mehr allgemeiner zu programmieren, mit der zeit funktioniert es immer besser

Sim Robot
27.01.2008, 15:06
a=PollSwitch();
b=PollSwitch();


if ((a==b)&&(b>0))

{mach_irgendwas()}
Soo das habe ich in meine Programm eingesetzt. Das sieht jetzt so aus
#include "asuro.h"

int main(void){
unsigned char a;
unsigned char b;
Init();
a=PollSwitch();
b=PollSwitch();
while(1){
if ((a==b)&&(b>0))
{
BackLED(ON,OFF);
}

else{
BackLED(OFF,ON);
}
BackLED(OFF,OFF);
}
return 0;
}

Eigentlich sollte jetzt die Rechte LED leuchten und wenn ich eine Taste drücke sollte die Linke LED leuchten. Doch esleuchtet die Rechte duchgehend und die Linke glimmt.
Wo liegt der Feler? ich kann ihn nicht finden.

sloti
27.01.2008, 15:16
Nimm mal den letzten Befehl, laso BackLED(OFF,OFF) raus vllt klappts dann.

mfg
Erik

Sim Robot
27.01.2008, 15:23
NEE Klappt immer noch nicht. Ist eigentlich auch egal, Weil der Befehl nur die LEDs aus schaltet wass sonstnach der Warteschleife passieren würde. also ist es egal ob er da steht oder nicht.

sloti
27.01.2008, 16:29
Also ich hab den Fehler gefunden eigentlich recht einfach. Du hast nämlich nur einmal ganz am Anfang die Pollswitch funktion, und das auch nur einmal,
d.h. wenn dann keine Taste gedrückt war hat er das für das ganze programm genommen. Hier die berichtigte Variante, ich hab einfach nur die Pollswitch funktionen mit in di Schleife genommen.


#include "asuro.h"

int main(void){
unsigned int a;
unsigned int b;

Init();


while(1)
{
a=PollSwitch();
b=PollSwitch();

if ((a==b)&&(b>0))
{
BackLED(ON,OFF);
}

else
{
BackLED(OFF,ON);
}

}
return 0;
}



mfg
Erik

Sim Robot
27.01.2008, 16:55
Danke,
Jetzt funktionirt es. Dann kann ich ja auch richtige funktionen Programmieren.

Hansi41
27.01.2008, 18:11
na wenns jetzt funktioniert, das freut mich