PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit Switch-Anweisung



rocketman123
09.11.2007, 18:29
Hallo,

ich hab seit einem Monat einen Asuro. Das Programmieren funktioniert nach anfänglichen Schwierigkeiten schon recht gut.
Vor kurzem wollte ich eine Switch-Anweisung testen. Doch ich versteh noch nicht ganz den richtigen Aufbau dieser Anweisung.
Ich wollte mit den rechten Kollisionstastern den das linke Rücklicht leuchten lassen und mit den linken Tastern das rechte.
Hier mein Programm:

#include "asuro.h"


int main(viod)
{

Init ();
while(1)
{
switch (PollSwitch)
{case 0x07;
BackLED(ON,OFF);
break;
case 0x38;
BackLED(OFF,ON);
break;
}
}
return 0;
}

Kann mir jemand helfen?
danke
mfg

PicNick
09.11.2007, 18:37
switch (PollSwitch)
{
case 0x07: ! Doppelpunkt !
BackLED(ON,OFF);
break;
case 0x38: ! Doppelpunkt !
BackLED(OFF,ON);
break;
default: ! muss nicht sein, sollte man sich aber angewoehen
break;
}

rocketman123
09.11.2007, 18:44
Habs gerade probiert aber funktioniert nicht. Habs auch direkt kopiert:


#include "asuro.h"


int main(viod)
{

Init ();


switch (PollSwitch)
{
case 0x07:
BackLED(ON,OFF);
break;
case 0x38:
BackLED(OFF,ON);
break;
default:
break;
}


return 0;
}

damaltor
09.11.2007, 19:29
case 0x07 wird dann, und NUR dann, ausgeführt wenn taster eins, zwei UND drei gleichzeitig gedrückt wurden. es reicht nicht wenn ein taster gedrückt wurde. gleiches gilt für 0x38: 0x38 entsteht nur wenn taster 4,5,6 gleichzeitig gedrückt wurden.

war das das ziel?

ausserdem: es heisst PollSwitch() und nicht nur PollSwitch. die klammern sind wichtig! aber eigentlich solltest du dafür eine warning vom compiler gefangen haben...

noch was: es heisst main(void) und nicht main(viod). das sollte einen error geben.


ausserdem muss unbedingt die letzte zeile vor "return 0;" eine endlosschleife enthalten (z.b. "while(1);" oder "for(;;);"), da sonst nach beendigung des programmes der zustand des prozessors nicht sicher ist (man nennt das "undefiniert"). da könnte es sein, dass fragmente alten codes ausgeführt werden, oder zufällige befehle ausgeführt werden.



bitte benutze ab jetzt den code-button wenn du code einfügst. ich werde deine beiträge entsprechend ändern.

rocketman123
10.11.2007, 11:47
ES FUNKTIONIERT!!!!!!!!!!!!!!! \:D/ \:D/ \:D/
Danke für die schnellen Antworten.
mfg

damaltor
10.11.2007, 12:49
kein problem... ;)

rocketman123
11.11.2007, 09:55
Hallo,

ich hätt da nochmal ne kleine Frage.
Soweit funktioniert jetzt alles.
Jedoch das Schalten der LED's erfolgt nur wenn ich die Tasten schon beim Einschalten gedrückt habe.
Wie kann ich das Programm ändern so dass die BackLED's erst leuchten wenn ich die Tasten drücke und wenn ich sie loslasse erlischen.
Hab schon mit der while-Schleife herumexperimentiert, bin aber auf keine Lösung gekommen.

mfg

damaltor
11.11.2007, 11:29
ich denke, dass die while-schleife am ende des programms liegt, und deshalb der programmcode nur einmal und in wenigen millisekunden abläuft...

poste doch nochmal deinen programmcode, so wie er jetzt aussieht.

rocketman123
11.11.2007, 13:37
Hier mein Programm



#include "asuro.h"


int main(void)
{

Init ();
while(1);
{
switch (PollSwitch())
{
case 0x01:
BackLED(ON,OFF);
break;
case 0x08:
BackLED(OFF,ON);
break;
default:
break;
}
}

return 0;
}

liggi
11.11.2007, 14:19
das simikolon hinter while(1) muss weg, dann müsste es eigentlich funktionieren.

mfg liggi

rocketman123
11.11.2007, 14:51
danke. funktioniert so weit.
wenn ich aber möchte das die ausführende Aktion (BackLED on bzw off)nur so lange ausgeführt wird wie der Taster gedrückt ist.
Muss ich dann mit IF programmieren oder gibts da für switch auch ne lösung?
mfg

damaltor
11.11.2007, 17:26
du könntest als letzte option in "switch" den case default einstellen, dieser wird immer ausgeführt wenn kein anderer passt:


case default : BackLED(OFF,OFF); break;