- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 6 von 6

Thema: RP6 Blinker per Tastendruck (M32)

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    28.07.2010
    Ort
    Aachen
    Beiträge
    64

    RP6 Blinker per Tastendruck (M32)

    Anzeige

    Praxistest und DIY Projekte
    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 :

    Code:
    .....
    
    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 \/

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    @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

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    29.12.2010
    Beiträge
    55
    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

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    28.07.2010
    Ort
    Aachen
    Beiträge
    64
    Zitat Zitat von Ingo1988
    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.

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    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

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    28.07.2010
    Ort
    Aachen
    Beiträge
    64
    Super....

    hat geklappt!!

    Vielen Dank

    hier noch der code:

    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 \/

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test