- LiTime Speicher und Akkus         
Ergebnis 1 bis 9 von 9

Thema: zwei Taster in C Programm als XOR

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    04.04.2005
    Ort
    weit weg
    Alter
    38
    Beiträge
    117

    zwei Taster in C Programm als XOR

    Anzeige

    Praxistest und DIY Projekte
    Hallo Leute!!!

    Habe mich schon mit Bücher und googel rumgeschlagen, aber ich finde leider nichts, oder ich bin zu blöd.

    Folgedes Problemm habe ich...

    Ich möchte gerne zwei Taster als XOR Funktion einbinden.
    Der Taster zwei an PIND2 soll die Variable um eins addieren (+ 1),
    der Taster drei an PIND3 soll die Variable um eins subtrahieren (-1).

    Hier das Programm das ich geschrieben habe, leider ohne funktion (wird nur 10 angezeigt)

    Code:
    int variable = 10;
    
    
    		if  (PIND & (1 << PIND2))
    			{
    			variable + 1;
    			lcd_clrscr();
    			itoa (variable, buffer, 10);
        		lcd_puts( buffer);
    			delay_ms (500);
    			}
    
    		else if (PIND & (1 << PIND3))
    			
    			variable - 1;
    			lcd_clrscr();
    			itoa (variable, buffer, 10);
        		lcd_puts( buffer);
    			delay_ms (500);
    Ich benuzte die LCD library von Peter Fleury

    Kann mir jemand helfen???
    MfG:P

    Woftschik

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    41
    Beiträge
    2.009
    Naja, eigentlich klar.
    Was macht denn das hier:
    Code:
     variable + 1;
    Er zählt zwar 1 zu variable dazu... nur wo speichert er das Ergebnis? Nirgendwo.
    Es sollte eine der folgenden Varianten sein:
    Code:
    variable++;
    variable = variable + 1;
    variable += 1;
    Für Minus genau so.
    #ifndef MfG
    #define MfG

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    04.04.2005
    Ort
    weit weg
    Alter
    38
    Beiträge
    117
    Oh ja Danke!
    durch das wilde rumexperemenietren habe ich dort was vergessen.

    Trotzdem funktioniert das nicht, die Taster werden irgendwie nicht erkannt oder so, auf jeden fall ändert sich nichts.
    MfG:P

    Woftschik

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    41
    Beiträge
    2.009
    Was mir noch auffällt: um den unteren Textblock (im Else If) fehlen die { }, es wird also bei dem Else If NUR das Variable -1 durchgeführt.
    Der andere Teil wird immer ausgeführt:
    Code:
           lcd_clrscr();
             itoa (variable, buffer, 10);
              lcd_puts( buffer);
             delay_ms (500);
    #ifndef MfG
    #define MfG

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    04.04.2005
    Ort
    weit weg
    Alter
    38
    Beiträge
    117
    @Jaecko

    Jaecko schrieb
    es wird also bei dem Else If NUR das Variable -1 durchgeführt.

    Ok ich weiß zwar nicht wieso das so ist aber ich habe die Klammer jetzt mit reingenommen.
    Leider habe ich immer noch nicht die gewünschte Funktion.
    Wenn ich den Taster an PIND2 betätige zeigt mir das Display eine 9 an???????


    Danke das du dir Zeit nimmst um mir zu helfen!

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    41
    Beiträge
    2.009
    Das mit den Klammern muss deshalb rein, da u.a. bei if... else... nur immer die nachfolgende Anweisung ausgeführt wird.

    Also hier wird F1 nur dann ausgeführt, wenn die Bedingung wahr ist. F2 wird immer ausgeführt, unabhängig von der Bedingung.

    if (Bedingung)
    F1();
    F2();

    Setzt man das ganze in Klammern { }, wird der gesamte Block ausgeführt:
    if (Bedingung)
    {
    F1();
    F2();
    }

    Hier werden beide Anweisungen ausgeführt, wenn die Bedingung wahr ist.

    Wie hast du denn die Taster angeschlossen? Also welchen Pegel hat der Pin im Ruhezustand und welchen, wenn er gedrückt wird?

    Schreib auch mal den jetzigen Zustand des Programms rein.
    #ifndef MfG
    #define MfG

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    04.04.2005
    Ort
    weit weg
    Alter
    38
    Beiträge
    117
    Hi

    Ok bin dann was schlauer geworden, DANKE!!

    Die Taster führen Null signal!
    Lass dich von den # Zeichen nicht irretieren, sind nur da um die Zeichnung vernünftig darzustellen.

    Masse (0 V)
    # |
    # |
    |-\
    # |------- Widerstand ------ +5V
    # |
    # ° PIND2


    genauso auch bei PIND3

    Der aktuelle stand des Programmes



    Code:
    int variable = 10;
    
    
    		if  (PIND & (1 << PIND2))
    			{
    			variable++; 
    			lcd_clrscr();
    			itoa (variable, buffer, 10);
        		lcd_puts( buffer);
    			delay_ms (500);
    			}
    
    		else if (PIND & (1 << PIND3))
    			{
    			variable--;
    			lcd_clrscr();
    			itoa (variable, buffer, 10);
        		lcd_puts( buffer);
    			delay_ms (500);	
    			}
    MfG:P

    Woftschik

  8. #8
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    41
    Beiträge
    2.009
    D.h. im "Leerlauf" liegen 5V an, beim Drücken des Tasters wird der Pin auf Masse gezogen.
    Im Programm ist die Abfrage aber genau andersrum:
    if (PIND & (1 << PIND3)) ist dann wahr, wenn der auf 5V liegt; bei dir also, wenn der Taster _nicht_ gedrückt ist.

    Du müsstest also abfragen, ob der Pin 0 ist. Auch hier gibts wieder 2 Möglichkeiten:

    Code:
    if (!(PIND & (1 << PIND3)))
    if ((PIND & (1 << PIND3)) == 0)
    #ifndef MfG
    #define MfG

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    04.04.2005
    Ort
    weit weg
    Alter
    38
    Beiträge
    117
    @Jaecko

    Super, DANKE für deine Hilfe, es funktioniert jetzt!! :P
    MfG:P

    Woftschik

Berechtigungen

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

LiFePO4 Speicher Test