PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PollSwitch reagiert falsch?



weisserAdler
05.06.2007, 15:43
Hallo zusammen, vor einigen Tagen habe ich meinen Asuro fertig gelötet, Alle Tests liefen einwandfrei.

Mein ersten Programm die Lichter blinken zu lassen läuft auch :D aber nun heng ich sei dgestern mittag an der PollSwitch funktion.

hier mal mein Programm:


#include "asuro.h"

int main()
{
Init();

int ps;
int ps1;
int ps2;
int i;

ps = PollSwitch();
ps1 = PollSwitch();
ps2 = PollSwitch();

for (i=1;i<=200;i++) {
Sleep(255); }

for (;;) {

if ((ps == ps1) && (ps == ps2) && (ps1 == ps2) > 0 ) {
StatusLED(RED);
MotorDir(FREE,FREE);
for (i=1;i<=350;i++) {
Sleep(255);}
SerWrite("Stop\n\r",20);
MotorDir(RWD,RWD);
MotorSpeed(200,200);
for (i=1;i<=300;i++) {
Sleep(255);}
SerWrite("zurück\n\r",20);
MotorDir(RWD,FWD);
MotorSpeed(150,150);
for (i=1;i<=120;i++) {
Sleep(255);}
SerWrite("drehen\n\r",20);
}
else if ((ps == ps1) && (ps == ps2) && (ps1 == ps2) == 0 ){
StatusLED(GREEN);
MotorDir(FWD,FWD);
MotorSpeed(200,200);
SerWrite("Jetzt gehts los\n\r",20);
}
}
}

ich schalte ihn ein und er tut nix anderes als das er stoppt, rückwärts fährt, dreht und von vorne. das zeigt er mir auch im hyper terminal durch SerWrtie.

er fährt nicht einmal vorwärts. im forum habe ich schon gelesen das es wohl am kondensator liegt das de rnoch geladen sei. da witzige ist wenn ich die einzelnen Taster abfrage und bei druck jeweils nur mit einer LED belege funktioniert alles wunderbar, ich drück den taster, die LED geht an und danach wieder aus. wieso geht das hier nicht? ;(

habe mir die Werte der Taster ausgeben lassen und sie zeigen folgendes an:

1,2,4,8,16,32

summe = 63

das stimmt sobald ich alle auf einmal drücke zeigt er auch 63 an und alle 20sek. vlt mal ein 64.

kann mir irgendjemand helfen?

mfg Adler

radbruch
05.06.2007, 16:10
Hallo

Ich denke, deine Logik hat dich überrollt:

((ps == ps1) && (ps == ps2) && (ps1 == ps2) > 0 )

wenn alle ps == 0 sind, ergibt das:

(true && true && true > 0)

Ab hier bin ich mir nicht ganz sicher, entweder:

((true && true && true) > 0) oder (true && true && (true > 0))

wobei das erste (true>0) also true ergibt und das zweite

wäre dann (true && true && true) und ergäbe auch true. Das heist, immer wenn alle drei ps gleich sind, wird der if-Zweig ausgeführt, also auch bei 0(=keine Taste). Btw: Wenn ps==ps1 und ps==ps2 dann muss ps1==ps2 sein.

Versuche es mal so:

((ps == ps1) && (ps == ps2) && (ps > 0) )

Ist nur true wenn alle gleich sind und größer 0.

Gruß

mic

weisserAdler
05.06.2007, 16:26
danke für die schnelle antwort:

habe es mal wie folgt abgeändert:


#include "asuro.h"

int main()
{
Init();

int ps;
int ps1;
int ps2;
int i;

ps = PollSwitch();
ps1 = PollSwitch();
ps2 = PollSwitch();

for (i=1;i<=200;i++) {
Sleep(255); }

for (;;) {

if ((ps == ps1) && (ps == ps2) && (ps > 0) ) {
StatusLED(RED);
MotorDir(FREE,FREE);
for (i=1;i<=350;i++) {
Sleep(255);}
SerWrite("Stop\n\r",20);
MotorDir(RWD,RWD);
MotorSpeed(200,200);
for (i=1;i<=300;i++) {
Sleep(255);}
SerWrite("zurück\n\r",20);
MotorDir(RWD,FWD);
MotorSpeed(150,150);
for (i=1;i<=120;i++) {
Sleep(255);}
SerWrite("drehen\n\r",20);
}
else if ((ps == ps1) && (ps == ps2) && (ps == 0) ) {
StatusLED(GREEN);
MotorDir(FWD,FWD);
MotorSpeed(200,200);
SerWrite("Jetzt gehts los\n\r",20);
}
}
}


doch nun fährt er nur vorwärts^^ egal ob taster gedrückt oder nicht.
ich glaub ich habe derzeit wirklich ein logik problem, hm.

was nun?

m.a.r.v.i.n
05.06.2007, 17:02
Hi,

bau mal die PollSwitch Funktionen in die for Schleife ein. So werden die Taster ja nur einmal beim Programmstart abgefragt und dann nie wieder.

weisserAdler
05.06.2007, 17:05
danke euch 2 :D

*FREUDE*

er fährt korrekt soweit ich das im trockenlauf beurteilen konnte.

radbruch
05.06.2007, 17:56
So werden die Taster ja nur einmal beim Programmstart abgefragt und dann nie wieder.
Tatsächlich. Es ist eben nicht einfach, fremden Code zu lesen.

Glückwunsch zum Erfolg. O:)

Und herzlich willkommen im RN-Forum.

mic

damaltor
06.06.2007, 09:36
ich glaub du hast die besten taster werte die ich seit langem gesehen habe... ;)

weisserAdler
06.06.2007, 15:50
hrhr also geschummelt habe ich nicht ;)

mir ist nur aufgefallen, dass wenn bei meinem Asuro die Motoren angehen, dass dann teilweise ein wert zurückgegeben wird, als wenn ein schalter betätigt wäre. deswegen muss ichs immer zichmal einlesen und vergleichen. solange es geht^^

radbruch
06.06.2007, 15:52
... und trotzdem klappts nicht. Auf PollSwitch() liegt ein Fluch...

Aber trotz allem "Hut ab". Sehr gut, dass du selbst die meisten Tastenprobleme erkannt und gelöst hast.

regnal10
21.06.2007, 12:45
Ich habe seid ca. 8 Wochen einen ASURO. Habe die Odomie und die Linienverfolgung schon verwendet, aber mit den Pollswitches klappt es einfach nicht. Kann mir mal jemand ein Musterprogramm zusenden?
z.B. Wenn ich Pollswitch drücke soll LED leuchten oder Motor stoppen! =D>

damaltor
22.06.2007, 23:39
Bitte

-lies die anleitung
-lies im forum
-benutze die suchfunktion
-denk selbst ein wenig nach

in diesem forum wirst du nicht einfach mal ein programm zugeschickt bekommen. das ist weder der sinn des forums noch hilft es irgendwas, denn lernen tust du dadurch auch nix.
besser ist es, wenn du ein wenig in der anleitung liest, und die dort aufgeführten beispielprogramme mal durchgehst und versuchst zu verstehen. wenn du dann selbst eine idee hast, dann schreibe ein programm, und versuche es. wenn es geht - herzlichen glückwunsch. wenn nicht, dann poste es hier im forum (benutze den code button bitte) und beschreibe genau, was das programm machen soll und was der fehler ist. fehlemeldungen des compilers kannst du natürlich auch posten. dann helfen wir dir alle gern!

die pollswitch funktion ist in der anleitung ganz gut beschrieben.