PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RP6 Blinker per Tastendruck (M32)



Philsuro
26.02.2011, 10:10
Hallo

habe an meinen RP6 vorne zwei Leds dran gelötet, die mit zwei Transistoren angesteuert werden.

Jetzt wollte ich mit den Taster 4 die Rechte Led "unendlich" Blicken lassen bis ich Taster 3 drücke und die Linke Led "unendlich" Blinken lasse.

Geht das, wenn ja wie?

Hier noch die Ports:

PORTC &= ~IO_PC4; //Led Rechts
PORTC &= ~IO_PC6; //Led Links

Hier mein mini programm was aber nicht so will wie ich :



.....

uint8_t key = getPressedKeyNumber();
while(true)
{



if(key == 4) {

showScreenLCD("", "Rechter Blinker");
PORTC |= IO_PC4;
mSleep(500);
PORTC &= ~IO_PC4;
mSleep(500);

}
if(key == 5) {


showScreenLCD("", "Linker Blinker");
PORTC |= IO_PC6;
mSleep(500);
PORTC &= ~IO_PC6;
mSleep(500);



}



mfg
Philip \:D/

Dirk
26.02.2011, 15:10
@Philip:
Ich denke mal, dass du die Portpins und die Tasten von der Control M32 für die LEDs nutzt.

Wenn du getPressedKeyNumber() VOR der while(true)-Schleife aufrufst, wird key wahrscheinlich in der Schleife den Wert 0 haben, es sei denn, du bist ein Weltmeister in Reaktionsschnelle und hast vor dem Funktionsaufruf noch schnell eine Taste drücken können.
Wenn nicht, wird also auch nichts blinken und es tut sich scheinbar gar nichts.

Du must also getPressedKeyNumber() IN der while(true)-Schleife benutzen.
Dann must du auch noch auf den Fall (key == 0) reagieren, das heißt, dass keine Taste gedrückt wurde. Normalerweise würde man getPressedKeyNumber() in eine while-Schleife packen: while(!key) {}
Damit würde die Funktion solange blockierend aufgerufen, bis eine Taste gedrückt wurde.

Probier mal so, dein Programm weiter zu entwickeln ...

Gruß Dirk

Ingo1988
28.02.2011, 19:39
wäre hier nicht ein weiteres Problem, dass nur so lange der key gedrückt ist die jeweilige if- Bedingung erfüllt wird und somit auch nur solang die lampen leuchten??

LG

Philsuro
01.03.2011, 13:58
wäre hier nicht ein weiteres Problem, dass nur so lange der key gedrückt ist die jeweilige if- Bedingung erfüllt wird und somit auch nur solang die lampen leuchten??

LG

Leider ist es so, habe aber noch keine Lösung gefunden.
Also die Led blinkt nur solange wie ich die Taste gedrückt halte.

Dirk
01.03.2011, 16:03
die Led blinkt nur solange wie ich die Taste gedrückt halte
Da sind Ideen gefragt!

Z.B. könnte man eine 2. Variable zusätzlich zu key definieren, z.B.:
uint8_t choice;

Die Variable wird dann gleich key gesetzt, wenn key ungleich 0 ist:
if (key) choice = key;
Dadurch ändert sich choice nur, wenn wirklich eine andere Taste gedrückt wird.

Natürlich müßten dann die if-Abfragen für die Blinker geändert werden, indem man anstelle von key choice nimmt:
if(choice == 4) {
...

Probier's mal aus!

Gruß Dirk

Philsuro
01.03.2011, 18:15
Super....

hat geklappt!!

Vielen Dank

hier noch der code:


while(true)
{
uint8_t key;
uint8_t choice;
key = getPressedKeyNumber();

if(key) {choice = key;}

if(choice == 3)
{
showScreenLCD("", "Rechter Blinker");
PORTC |= IO_PC4;
mSleep(500);
PORTC &= ~IO_PC4;
mSleep(500);
}
if(choice == 4)
{
showScreenLCD("", "Linker Blinker");
PORTC |= IO_PC6;
mSleep(500);
PORTC &= ~IO_PC6;
mSleep(500);
}
}
return 0;
}



Philip \:D/