PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Selbsthaltung BackLeds



matlxxx
26.09.2006, 15:23
Hi!
Aufgabe:

Programmiere eine Selbsthaltung:

mit Taster 1 linke BackLED einschalten/ausschalten
mit Taster 2 rechte BackLED einschalten/auschalten
mit Taster 3 FrontLED einschalten/auschalten

Bedingung:
Das jeweilige LED muss nach dem Loslassen des Tasters den Schaltzustand behalten!
zb: Drücken von Taster 1(und wieder loslassen)==> linke BackLED "ein", und durch nochmaliges drücken wieder aus, usw.

michael.bend
29.09.2006, 14:55
Moin,

guck mal unter wikipedia.de bei ´flipflop´, sowas musst du mit Variablen programmieren.

Mit Zauberwort, das wäre perfekt gewesen.


Grüße, (Michael)

uwegw
29.09.2006, 15:45
Du brauchst einen Befehl, der bei jedem Aufruf die LED umschaltet. Der sieht in C so aus:

Allgemeine Form:
PORTx^=(1<<Px);

Für die FrontLED:
PORTD^= (1 << PD6);

Für die BackLEDs:
PORTC^= (1 << PC0);
und
PORTC^= (1 << PC1);

müsste so passen, ich hab keinen Asuro, mit dem ich es testen könnte.

stochri
29.09.2006, 15:49
Möglicherweis kann es ein Problem mit dem Tastenprellen geben.

matlxxx
29.09.2006, 18:25
Hi!
Danke für eure Antworten!!!

unter flipflop bei wikipedia hab ich nur die funktion gefunden, aber nichts programmiertechnisches,

Weil ich noch kein Programmiergenie bin, weiß ich nicht, wie ich die Ports ins Programm einbinden soll

ich hab das mal mit variablen "versucht" zu programmieren:


#include "asuro.h"

int main(void) {
Init ();

int FLED = 1;
int BLED = 1;

while (1) {
if (PollSwitch()==0) {StatusLED(GREEN);SerWrite("00",2);}


else if (PollSwitch()==4, BLED==1)
{BackLED(ON,OFF);BLED = 0;SerWrite("04",2);Msleep(500);
} // wenn taster 3 und bled 1 dann BackLED ein und bled setze 0

else if (PollSwitch()==4, BLED==0)
{BackLED(OFF,OFF);BLED = 1;SerWrite("04",2);Msleep(500);
} // wenn taster 3 und bled 0 dann BackLED aus und bled setze 1

else if (PollSwitch()==2, FLED==1)
{FrontLED(ON);FLED = 0;SerWrite("01",2);Msleep(500);
}

else if (PollSwitch()==2, FLED==0)
{FrontLED(OFF);FLED = 1;SerWrite("01",2);Msleep(500);
}

}
}

Das problem dabei ist aber, dass mit jedem taster nur die BackLED aktiviert wird. Asuro verhält sich so als würde er nur die erste bedingung durchlaufen(der rote Teil)

Was hab ich da falsch gemacht?
Wie könnte man es besser programmieren?

Danke im voraus für eure Antworten,

Gruß matl