PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Hier ist der Wurm drin (Programmierfehler)?



outdoorgamer
21.07.2006, 11:19
Irgendwo ist hier der Wurm drin:
Die Tasenrückgaben kann ich mir auf dem Hyperterminal ansehen
K1,K2,K3 ergeben 1,2,4,8 und so weiter... - das ist alles klar.
nun mach ich so was hier:

#include "asuro.h"

int main(void)
{
Init();
int a,b;

while(1)
{
PollSwitch();
a=PollSwitch();
if(a==1)
BackLED(ON,ON);
if(a==2)
StatusLED(RED);
for(b=0;b=3000;b++)
Sleep(72);
return 0;
}
}

die if Anweisungen werden aber nicht angesprochen.. was mach ich falsch?

m.a.r.v.i.n
21.07.2006, 11:40
setz mal das return 0 außerhalb der while Schleife.

Gruß m.a.r.v.i.n

outdoorgamer
21.07.2006, 14:21
Danke fürt den Hinweis !
Führt leide rimme rnoch nicht zum gewünschen Ergebnis ;(((((
Hab mal gesehen das in einigen programmen die Abfrage
if ( a & 0x1 ) gesehen ... ist doch im Prinzip das selbe (?)

Ich gehe davon aus das ich irgendeas falsch mache bei der If-Abfrage

Wie gesagt im Hyperterminal bekomm ich von den tasten schön 1,2,4,8 und so weiter heraus

ogni42
21.07.2006, 15:42
Du fragst nur einen kurzen Moment die switches ab. Nur wenn in dem Augenblick eine Taste gedrückt ist, wird ein Wert dabei rauskommen. Halte eine Taste (z.B. die, die die '1' liefert) mal _lange_ gedrückt. Dann sollte es eigentlich klappen (sofern das return aus der schleife raus ist).

vajk
21.07.2006, 16:15
Wieso PollSwitch(); x 2 ?
Das erste PollSwitch(); läuft ins Leere .. wenn in PollSwitch(); die Variablen gelöscht werden, dann kann das Zweite nie etwas werden ..
Außerdem ists mit dem Wartebefehl unschön .. nett zum Testen ...
Ich würde Dir raten, die Tastenabfrage (flag setzen bei gedrückt) durch einen Timer zu erledigen und im Hauptporgramm die Flags auswerten und dann löschen .. so würde Dir nix entgehen ..
Timer-Tastenabfrage kann auch zum Entprellen genommen werden, um Mehrfachreaktionen auszulösen oder zw. kurzen und langem Tastendruck zu unterscheiden ...
Du solltest PollSwitch(); auch mal reinstellen ....

gregor_f.
21.07.2006, 16:33
Hallo,

das Programm bleibt in der for Schleife hängen, da keine richtige Abbruchsbedingug besteht!

Die Schleife müsste so aussehen:

for(b=0;b==3000;b++)

So funktioniert es:



#include "asuro.h"

int main(void)
{
Init();
int a,b;

while(1)
{
PollSwitch();
a=PollSwitch();
if(a==1)
BackLED(ON,ON);
if(a==2)
StatusLED(RED);
for(b=0;b==3000;b++)
Sleep(72);
}
return 0;
}

SprinterSB
21.07.2006, 16:52
eher b<=3000 oder b!=3000, sonst wird die SCHleife nie ausgeführt...

gregor_f.
21.07.2006, 17:44
Oh ha ](*,) ,

da hat SprinterSB nicht ganz unrecht :-b .

Hiermal der neue Code in dem die LEDs auch wieder ausgeschaltet werden:


#include "asuro.h"

int main(void)
{
Init();
int a,b;


while(1)
{
PollSwitch();
a=PollSwitch();
if(a==1)
{
BackLED(ON,ON);
for(b=0;b!=3000;b++)
Sleep(72);
BackLED(OFF,OFF);
}
if(a==2)
{
StatusLED(RED);
for(b=0;b!=3000;b++)
Sleep(72);
StatusLED(OFF);
}
}
return 0;
}

outdoorgamer
23.07.2006, 15:12
DANKEE:. Fehler entdeckt. Nun läuft der Asuro einwandfreii *gggggg*
Nun muss ich nur noch mal die Linedata aufs hyperterminal bringen..
danke an alle !!