-         

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 27

Thema: Tasterauswertung

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    07.07.2010
    Alter
    28
    Beiträge
    228

    Tasterauswertung

    Anzeige

    Guten Abend,

    hab bis jetzt nichts dazu gefunden.

    Ist es möglich jeden Taster einzeln auszuwerten, also jedem einzeln eine Funktion zuzuweisen?

    z.B.:
    K1 = StatusLed: rot
    K2 = StatusLed: grün
    K3 = StatusLed: gelb
    K4 = StatusLed: Aus
    K5 = BackLed: On/Off
    K6 = BackLed: Off/On

    MfG

    Ezalo

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.167
    Kannst du im Binaires Zahl-system rechnen? K1 bis K6 haben allen ihres eigene Wert der ein Machte von 2 ist. K6=1 (ganz rechts von hinten gesehen: 2 zum Macht 0), K5=2 (2 zum Macht 1), K4=4 (2 zum Macht 2), usw. bis K1=32. Also jede Wert der PollSwitch zurück liefert ist einer kombination von dieser Tastern, und auch einer Summe von ein oder mehr diesen Werten. Zbs, wir bekommen den Wert 22 von PollSwitch. Das ist 2+4+16, also sind das die taster K5,K4 und K2.

    Code:
    2 zum macht:   7   6   5   4   3   2   1   0
                 128  64  32  16   8   4   2   1
    22 = (binair)  0   0   0   1   0   1   1   0
    Das kann man auswerten in einem if-abfrage mit hilfe von bitweise-UND operatoren:

    http://www.rn-wissen.de/index.php/C-...Bit-Operatoren

    Diese operatoren vergleichen die bits in 2 werten (ein variabele und einer bestimmte wert der ein oder mehrere bits anzeigt) und setzen das antwort an hand der logische funktion (UND, ODER, exclusief-ODER).
    Code:
    char Taster=PollSwitch();
    
    If (Taster & 16) { /* Taster K2 ist geprellt! */ }
    
    If (Taster & 0b00010001) {
          /* bitweise UND mit einer Binaires zahl, 17, gemacht. */
          /*  oder Taster K2=16, oder Taster K6=1 geprellt!  */
        }
    Ich hoffe du kannst hier mit weiter ausprobieren. Ich finde es schwer mich genau auszudrücken auf deutsch.

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    07.07.2010
    Alter
    28
    Beiträge
    228
    Joa, du meinst das jeder Taster einen Binären wert liefert, also: 2 hoch 0, 2 hoch 1 usw. wobei 2 hoch 0 = 1 ist, 2 hoch 1 = 2, 2 hoch 2 = 4. das hab ich soweit verstanden da ich das ja auch in der Ausbildung dran hatte ^^

    Das heißt mit den binären Werten kann ich genau den Taster abfragen den ich haben will

    Gleich mal probieren.

    Danke erstmal

    Edit: Das man da manchmal nicht selber drauf kommt ^^

    Funktioniert prima.

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.167
    Du kannst 6 mal fuhr einer bestimmte Taster testen und den bestimmte funktion anrufen oder code-block ausfuhren.

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.167
    Einfach testen ob den Wert von PollSwitch gleich an 1,2,4,8,16 oder 32 ist geht auch. Aber das funktioniert nicht wan mehrere tasten gleichzeitig angeprellt sind. Dan muss man dieser bit-testen machen.

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.167
    In dem datei Test.c von den SelbTest quell code steht wie das beim Selbtest gemacht wird:

    Code:
    /* ---------------------- */
    /* ----- Switch Test ---- */
    /* K1 -> Status LED Green */
    /* K2 -> Status LED RED   */
    /* K3 -> Line LED         */
    /* K4 -> Break LED Left   */
    /* K5 -> Break LED Rigth  */
    /* K6 -> Motor Left       */
    /* ---------------------- */
    void SwitchTest(void)
    {
    	unsigned char sw,tmp;
    	MotorDir(FWD,BREAK);
    
    	sw = PollSwitch();
    	StatusLED(OFF);
    	FrontLED(OFF);
    	BackLED(OFF,OFF); 
    	MotorSpeed(0,0);
    	tmp = 0;	
    
    	if (sw & 0x01) 
    		MotorSpeed(200,0);
    	if (sw & 0x02) {
    		BackLED(OFF,ON);
    		tmp = ON;
    	}
    	if (sw & 0x04) 
    		BackLED(ON,tmp);
    	if (sw & 0x08) 
    		FrontLED(ON);
    	if (sw & 0x10) 
    		RED_LED_ON;
    	if (sw & 0x20) 
    		GREEN_LED_ON;
    }
    /* END Switch Test ------------------------------ */

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    07.07.2010
    Alter
    28
    Beiträge
    228
    Habs jetzt so:

    Code:
    ...
    	unsigned char sw1, sw2;
    	while(1){
    		sw1 = PollSwitch();
    		sw2 = PollSwitch();
    		if ((sw1 & 0b000001) || (sw2 & 0b000001)){
    			StatusLED(RED);
    		}
    		else if ((sw1 & 0b000010) || (sw2 & 0b000010)){
    			StatusLED(YELLOW);
    		}
    		else if ((sw1 & 0b000100) || (sw2 & 0b000100)){
    			StatusLED(GREEN);
    		}
    		else if ((sw1 & 0b001000) || (sw2 & 0b001000)){
    			StatusLED(OFF);
    		}
    		else if ((sw1 & 0b010000) || (sw2 & 0b010000)){
    			BackLED(ON,ON);
    		}
    		else if ((sw1 & 0b100000) || (sw2 & 0b100000)){
    			BackLED(OFF,OFF);
    		}
    ...
    Allerdings gehts so nicht ^^

    Drücke ich jetzt K2 gehen die BackLed's an und die StautsLed schaltet auf Rot. Die StatusLed lässt sich auch nicht mit K3 ausschalten und Die BackLed's gehen bei betätigen von K1 auch nicht aus.

  8. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.167
    Du liest die Tastern in dem falsche Richtung. K1 sitzt an die IR Sender/Empfänger Seite. Und ist die wert 32. Also stimmt dein Programm im Prinzip, leider sind die Funktion anrufen in dem falsche folge.

  9. #9
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    07.07.2010
    Alter
    28
    Beiträge
    228
    Ich weiß das meine Reihenfolge (Asuro von Batterie richtung taster sehende) von rechts nach links geht. Und K1, K2, K3 sind demzufolge links?

    Dann versteh ich aber Trotzdem nicht wieso das beschriebene bei K1-K3 passiert obwohl das Programm etwas anderes sagt.

  10. #10
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    07.07.2010
    Alter
    28
    Beiträge
    228
    AHA...

    ich dachte es wäre egal ob ich sie von K6 Richtung K1 auswerte oder von K1 Richtung K6 ^^ Aber scheint wohl nicht so.

    Hab jetzt den Code auf K1 (links) nach K6 (rechts) umgeändert und nun funktioniert es wie es soll.

    Danke

    Edit: Wieso schalte ich mit antippen von K5 die BackLed's aus?

    Edit2: Wenn ich die BackLed's mit K5 anschalte (wenn sie dnen anbleiben) kann ich mit K2 die StatusLed nicht mehr auf Gelb stellen, wieso das?

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

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