Ungedrückter Button nimmt trotz Widerstand den Wert HIGH an

Hallo Community!
Verzweifle jetzt schon seit längerem an einem Projekt. Ich versuche mittels 2 Buttons unterschiedliche Vorgänge zu steuern jedoch machen die Knöpfe nicht das was sie tun sollte. Ich verwende einen 100kOhm Widerstand für jeden Knopf. Ich hoffe ihr könnt mir helfen. :frowning: :frowning:
Das ist mein Code:

// Look for new cards
  if ( ! mfrc522.PICC_IsNewCardPresent()) {
    return;
  }

  // Select one of the cards
  if ( ! mfrc522.PICC_ReadCardSerial()) {
    return;
  }

  //----------------------------------------------------------------------

  Serial.print(F("Card UID:"));    //Dump UID
  for (byte i = 0; i < mfrc522.uid.size; i++) {
    Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
    Serial.print(mfrc522.uid.uidByte[i], HEX); 

    content.concat(String(mfrc522.uid.uidByte[i] <0x10 ? "0" : " "));
    content.concat(String(mfrc522.uid.uidByte[i],HEX));
    }

    content.toUpperCase();
    String UID= content.substring(1);  

        //------------------------------------------------------------------------

          len=18;
          block=1;

           status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, 1, &key, &(mfrc522.uid));
           status = mfrc522.MIFARE_Read(block, Read, &len);

             for (uint8_t i = 0; i < 16; i++) {
              Status += (Read[i] );
            }
 
          if(digitalRead(ButtonLOGIN == HIGH) && Status == Abmeldung)
          {
             byte buffer[18] = {"Anmeldung"};
             block = 1;
                                                                                    
             status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(mfrc522.uid));
                                                                                    
                                                                                  
             // Write block
             status = mfrc522.MIFARE_Write(block, buffer, 16);
             Serial.println(F("MIFARE_Write() success: "));
            
            Protokoll = "Eingeloggt/";
             Protokoll += UID+"/";
             Protokoll += String(t.hour) +":" + String(t.min)+":" + String(t.sec) + "/";
             Protokoll += rtc.getDateStr();
              Serial.println("TOSEND =" + Protokoll);
            }
 if(digitalRead(ButtonLOGOUT == HIGH) && Status == Anmeldung)
          {
             byte buffer[18] = {"Abmeldung"};
             block = 1;
                                                                                    
             status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(mfrc522.uid));
                                                                                    
                                                                                  
             // Write block
             status = mfrc522.MIFARE_Write(block, buffer, 16);
             Serial.println(F("MIFARE_Write() success: "));
            
            Protokoll = "Ausgeloggt/";
             Protokoll += UID+"/";
             Protokoll += String(t.hour) +":" + String(t.min)+":" + String(t.sec) + "/";
             Protokoll += rtc.getDateStr();
              Serial.println("TOSEND =" + Protokoll);
            
          }

Wie hast du den Widerstand angeschlossen ?
Und 100 kOhm können unter bestimmten Umständen zu groß sein.
Nimm mal 10 k.

Vll erstmal die LED mit den Buttons ein und ausschalten oder was seriell ausgeben, dann weißt du das der Teil schon mal funktioniert.

Auch meiner Meinung hast Du den Widerstand falsch angeschlossen.
Mach mal ein gutes Foto von deinem Aufbau.

Grüße Uwe

felix_0704:
... Ich verwende einen 100kOhm Widerstand für jeden Knopf. ...
Das ist mein Code: ...

Du brauchst eigentlich keine Widerstände. Hattest Du die als Pullup-/Pulldown-Widerstände vorgesehen?

Wenn Du digitale Eingänge mit

pinMode(blaPin, INPUT_PULLUP);

konfigurierst, muss ein Taster diesen Pin im gedrückten Zustand lediglich mit GND verbinden. Den aktuellen Zustand kannst Du dann mit

if(digitalRead(blaPin)==LOW) {...}

ermitteln. Wenn gedrückt, ist das Ergebnis der Abfrage „LOW“, sonst „HIGH“ (wg. dem mit INPUT_PULLUP aktivierten Pullup-Widerstand des Pins).

Deinen Code habe ich nur sehr schnell überflogen. Der scheint hauptsächlich durch copy+paste zustande gekommen zu sein. Probiere das mit den Knöpfen erst mal mit einem supersimplen ultrakurz-Sketch, wie er sich bei den Beispielen befindet.

Gruß

Gregor

gregorss:
Du brauchst eigentlich keine Widerstände. Hattest Du die als Pullup-/Pulldown-Widerstände vorgesehen?

Wenn Du digitale Eingänge mit

pinMode(blaPin, INPUT_PULLUP);

konfigurierst,.....

Das ist genau das Problem. Da wir ja nur Sketchfragmente vom TO bekommen, müssen wir raten.
Ein kompletter Sketch und genauere Angaben sind für korrekte Aussagen immer besser.

Nun ja, wir müssen damit leben. :wink:
Aber evtl. kommt ja noch mal etwas.

Hi

Ganz nebenbei wirst Du feststellen, daß die Taster öfter Unsinn treiben - also der Arduino Dir mitteilt, daß der Taster öfter gedrückt wurde, wo Du Selber den Taster gerade eben aber nur ein Mal gedrückt hast.

Dagegen hilft 'entprellen' oder 'debounce'
Und nur einen Klick entfernt

MfG

PS: Sehe die gemachten Aussagen aber ähnlich: zerhacke Dein Programm in Einzelprobleme und versuche Diese einzeln zu lösen.
Niemandem ist geholfen, wenn Du versuchst per Tastendruck, RFID, IR-Fernbedienung und Touch-Sensoren, mittels Stepper einen Sekundenzeiger am Laufen zu halten und gleichzeitig ein mehrstimmiges Lied wiederzugeben - und Das dann noch mit Q&P-Schnipseln.
Das MUSS scheitern (und wenn's läuft weißt Du nicht, warum, wodurch Änderungen/Anpassungen nicht möglich sind)
... vll. etwas überspitzt formuliert :wink: