Mehrere Buttons - if/else

Moinsen, hab da mal wieder ´n paar fragen an euch experten hier.

Ich versuche gerade einen Getränkespender / -automaten zu basteln. Dabei soll eine RFID-Karte oder Transponder das ganze “freischalten” und anschließend soll per Button eines der drei Getränke gewählt werden. Diese werden per Pumpe in einen Becher gefüllt.; Wie auch immer…,

Ich bin nun am Wochenende dran gescheitert die Abfrage der drei Buttons hinzubekommen, nun wollte ich mich informieren, ob ich da alles richtig verstanden habe.

Die Buttons kann ich doch per INPUT_PULLUP integrieren oder? Wenn das zutrifft müssten die Buttons im gedrückten Zustand ja LOW sein.

Nun zum größeren Problem.; Kann ich in die If-Bedingung des RFID-Readers (Medium zur freischaltung berechtigt / Medium unbekannt - Nicht berechtigt) die drei Abfragen der Buttons einfach reinschreiben? Oder muss ich das dann mit else if machen?

//RFID-Abfrage beginn
if ( ! mfrc522.PICC_IsNewCardPresent()) {
    return;
  }
 
  if ( ! mfrc522.PICC_ReadCardSerial()) {
    return;
  }
 
  long code=0;
  
  for (byte i = 0; i < mfrc522.uid.size; i++) {
    code=((code+mfrc522.uid.uidByte[i])*10);
  }
 
  Serial.print(F("Erkannte Kartennummer:"));
  Serial.print(code);
 
  if(PruefeKartenberechtigung(code) == true) {
    Serial.println(F(" [BERECHTIGT]"));
//RFID-Abfrage ende (Berechtigt / Buttons werden "freigegeben")
 
    digitalWrite(RFIDwaiting, LOW); // Leds welche Zeigen, dass RFID korrekt war
    digitalWrite(RFIDright, HIGH);
    digitalWrite(G1PumpLED, HIGH); // leds für die Pumpen (zeigen, dass nun gewählt werden kann)
    digitalWrite(G2PumpLED, HIGH);
    digitalWrite(G3PumpLED, HIGH);
    digitalWrite(BecherLED, HIGH); // Becherfach-Beleuchtung

       label1;
       if (digitalRead(Getraenk1)== HIGH) // erster Button zur Getränke-Wahl
       {
        digitalWrite(G2PumpLED, LOW); //irgendwelche LEDS 
        digitalWrite(G3PumpLED, LOW);
        digitalWrite(G1PumpLED, HIGH);
        delay(1000);
        digitalWrite(G1PumpLED, HIGH);
        digitalWrite(PumpG1, HIGH); //Pumpe soll für drei Sekunden pumpen
        delay(3500);
        digitalWrite(PumpG1, LOW);
        digitalWrite(G1PumpLED, LOW);
        delay(LEDblink);
        digitalWrite(G1PumpLED, HIGH);
        digitalWrite(G2PumpLED, HIGH);
        digitalWrite(G3PumpLED, HIGH);
        delay(LEDblink);
        digitalWrite(G1PumpLED, LOW);
        digitalWrite(G2PumpLED, LOW);
        digitalWrite(G3PumpLED, LOW);
        delay(LEDblink);
        digitalWrite(G1PumpLED, HIGH);
        digitalWrite(G2PumpLED, HIGH);
        digitalWrite(G3PumpLED, HIGH);
        delay(LEDblink);
        digitalWrite(G1PumpLED, LOW);
        digitalWrite(G2PumpLED, LOW);
        digitalWrite(G3PumpLED, LOW);
        delay(LEDblink);
        digitalWrite(G1PumpLED, HIGH);
        digitalWrite(G2PumpLED, HIGH);
        digitalWrite(G3PumpLED, HIGH);
        delay(LEDblink);
        digitalWrite(G1PumpLED, LOW);
        digitalWrite(G2PumpLED, LOW);
        digitalWrite(G3PumpLED, LOW);
        delay(3000);
        digitalWrite(BecherLED, LOW);
        digitalWrite(RFIDright, LOW);
        digitalWrite(RFIDwaiting, HIGH);
       }

       else if (digitalRead(Getraenk2)== HIGH)  // zweiter Button zur Wahl
        {
        digitalWrite(G2PumpLED, HIGH);
        digitalWrite(G3PumpLED, LOW);
        digitalWrite(G1PumpLED, LOW);
        delay(1000);
        digitalWrite(G2PumpLED, HIGH);
        digitalWrite(PumpG2, HIGH);
        delay(3500);
        digitalWrite(PumpG2, LOW);
        digitalWrite(G2PumpLED, LOW);
        delay(LEDblink);
        digitalWrite(G1PumpLED, HIGH);
        digitalWrite(G2PumpLED, HIGH);
        digitalWrite(G3PumpLED, HIGH);
        delay(LEDblink);
        digitalWrite(G1PumpLED, LOW);
        digitalWrite(G2PumpLED, LOW);
        digitalWrite(G3PumpLED, LOW);
        delay(LEDblink);
        digitalWrite(G1PumpLED, HIGH);
        digitalWrite(G2PumpLED, HIGH);
        digitalWrite(G3PumpLED, HIGH);
        delay(LEDblink);
        digitalWrite(G1PumpLED, LOW);
        digitalWrite(G2PumpLED, LOW);
        digitalWrite(G3PumpLED, LOW);
        delay(LEDblink);
        digitalWrite(G1PumpLED, HIGH);
        digitalWrite(G2PumpLED, HIGH);
        digitalWrite(G3PumpLED, HIGH);
        delay(LEDblink);
        digitalWrite(G1PumpLED, LOW);
        digitalWrite(G2PumpLED, LOW);
        digitalWrite(G3PumpLED, LOW);
        delay(3000);
        digitalWrite(BecherLED, LOW);
        digitalWrite(RFIDright, LOW);
        digitalWrite(RFIDwaiting, HIGH);
        }

       else if (digitalRead(Getraenk3)== HIGH) // dritter Button zur Wahl
       { 
        digitalWrite(G2PumpLED, HIGH);
        digitalWrite(G3PumpLED, LOW);
        digitalWrite(G1PumpLED, LOW);
        delay(1000);
        digitalWrite(G2PumpLED, HIGH);
        digitalWrite(PumpG2, HIGH);
        delay(3500);
        digitalWrite(PumpG2, LOW);
        digitalWrite(G2PumpLED, LOW);
        delay(LEDblink);
        digitalWrite(G1PumpLED, HIGH);
        digitalWrite(G2PumpLED, HIGH);
        digitalWrite(G3PumpLED, HIGH);
        delay(LEDblink);
        digitalWrite(G1PumpLED, LOW);
        digitalWrite(G2PumpLED, LOW);
        digitalWrite(G3PumpLED, LOW);
        delay(LEDblink);
        digitalWrite(G1PumpLED, HIGH);
        digitalWrite(G2PumpLED, HIGH);
        digitalWrite(G3PumpLED, HIGH);
        delay(LEDblink);
        digitalWrite(G1PumpLED, LOW);
        digitalWrite(G2PumpLED, LOW);
        digitalWrite(G3PumpLED, LOW);
        delay(LEDblink);
        digitalWrite(G1PumpLED, HIGH);
        digitalWrite(G2PumpLED, HIGH);
        digitalWrite(G3PumpLED, HIGH);
        delay(LEDblink);
        digitalWrite(G1PumpLED, LOW);
        digitalWrite(G2PumpLED, LOW);
        digitalWrite(G3PumpLED, LOW);
        delay(3000);
        digitalWrite(BecherLED, LOW);
        digitalWrite(RFIDright, LOW);
        digitalWrite(RFIDwaiting, HIGH);
       }

       else 
       {
        goto label1 // dauerschleife wenn kein Button gedrückt wird, bis einer gedrückt wird
       }
       
    
  } else {
    Serial.println(F(" [NICHT BERECHTIGT]"));
  }

Lasst euch nicht von den ganzen LEDs irritieren, es geht nur um die if bedingungen, ob die so gehen. Wenn nicht, dann wäre es cool, wenn wer eine Hilfestellung geben könnte und ein beispiel mit drei Bedingungen in einer Bedingung posten könnte.
Hab echt viel probiert, bin mit meinem Latein, Spanisch, C…, was auch immer echt am Ende.

mfg

PS: Ich will das schaffen und helfe gerne mit bzw. bin sehr daran interessiert mir das selbst zu erarbeiten, jedoch bin ich grad echt platt, was diese If-Sache angeht…

Warum machst Du zum gleichen Thema einen 2. Thread auf, und nicht hier weiter?

Moko: Warum machst Du zum gleichen Thema einen 2. Thread auf, und nicht hier weiter?

mmmnnnn... Stimmt eigentlich... naja, beim nächsten mal mach ichs besser. Hab nicht wirklich nachgedacht weil ich einfach nur am recherchieren bin, wie ich das lösen kann..

jandresen: mmmnnnn... Stimmt eigentlich... naja, beim nächsten mal mach ichs besser. Hab nicht wirklich nachgedacht weil ich einfach nur am recherchieren bin, wie ich das lösen kann..

Das ist sehr schlecht. So wird alles zerrissen und unverständlich, zumal du schon zahlreiche Antworten erhalten hast.

HotSystems: Das ist sehr schlecht. So wird alles zerrissen und unverständlich, zumal du schon zahlreiche Antworten erhalten hast.

Ja, ich habe es verstanden :/ Sorry, tut mir echt leid. Nur ich bin einfach echt am Verzweifeln warum das nicht geht so wie ich das will... xD

Das man hier direkt so viele Antworten bekommt ist auch echt super. Meine Frage ging in diesem Thread jedoch explizit um die If-Bedingung, weil ich denke, dass es nur daran liegen könnte. Deshalb dachte ich mir eben, einfach nochmal fragen, vielleicht hat jemand lust seinen Senf dazuzugeben oder Hilfestellung zu geben. Wenn das keiner möchte ist das ja auch okay. Man kann eben nicht jedem helfen. Dann muss halt Asche für Nachhilfe in "C" dran glauben :D. mfg

jandresen:
Ja, ich habe es verstanden

Dein Problem ist, du hast es nicht verstanden, sonst würdest du den alten Thread nochmal durchlesen.
Da du aber alles zerstückelt hast, muss man sich wieder alles mühsam zusammen suchen. Warum ?

Und nochmal für dich:
Du brauchst kein “if/else” !

Hier ein Beispiel (Pseudocode), wie es funktionieren sollte:

long code = 0;

for (byte i = 0; i < mfrc522.uid.size; i++) {
  code = ((code + mfrc522.uid.uidByte[i]) * 10);
}

Serial.print(F("Erkannte Kartennummer:"));
Serial.print(code);

if (PruefeKartenberechtigung(code) == true)
{
  Serial.println(F(" [BERECHTIGT]"));
  //RFID-Abfrage ende (Berechtigt / Buttons werden "freigegeben")
  isRFID = true;
  // Hier folgt Dein Code
}
else
{
  Serial.println(F(" [NICHT BERECHTIGT]"));
}

if (isRFID)
{
if (digitalRead(Getraenk1) == HIGH) // erster Button zur Getränke-Wahl
  {
    // Hier folgt Dein Bandwurm-Code 1
    isRFID = false;
  }

  if (digitalRead(Getraenk2) == HIGH) // zweiter Button zur Wahl
  {
    // Hier folgt Dein Bandwurm-Code 2
    isRFID = false;
  }

  if (digitalRead(Getraenk3) == HIGH) // dritter Button zur Wahl
  {
    // Hier folgt Dein Bandwurm-Code 3
    isRFID = false;
  }
}

Da wird die if-Abfrage so lange durchlaufen, bis ein Taster gedrückt wurde.
Die Variable “Bool isRFID = false;” musst du noch definieren.

P.S.
An den Moderator:
Uwe bitten die beiden Threads zusammensetzen.

Hmm, danke erstmal.. :)

Soweit geht das mit meinen Kenntnissen auch klar, nur bei bool / boolean bin ich mir nun unsicher. Du (@HotSystems) schriebst, ich solle die isRFID = false noch definieren, also doch unter den else Teil der RFID-Überprüfung.

if(PruefeKartenberechtigung(code) == true) {
    Serial.println(F(" [BERECHTIGT]"));
    //RFID-Abfrage ende (Berechtigt / Buttons werden "freigegeben")
    digitalWrite(RFIDwaiting, LOW);
    digitalWrite(RFIDright, HIGH);
    isRFID = true;
  }
  else
  {
    Serial.println(F(" [NICHT BERECHTIGT]"));
    [b]isRFID = false;[/b] 
  }

Oder hab ich da mal wieder was nicht gecheckt? Bool ist doch ein Synonym für boolean und kann einen Wert zwischen 0 & 1 speichern. Nur meckert die IDE jetzt bei dem if Teil der Buttons rum.

  else
  {
    Serial.println(F(" [NICHT BERECHTIGT]"));
    isRFID = false;
  }

 [b] if (isRFID)[/b]
  {
    if (digitalRead(Getraenk1) == LOW) // erster Button zur Getränke-Wahl
    {
      Serial.println("Getraenk 1...");
      isRFID = false;
    }

Müsste das nicht eigentlich if ((isRFID)=true) heißen? Habs auch zum Laufen bekommen, jedoch sagt er, dass die "Keys" nicht berechtigt seien, sprich er kommt immer beim RFID-False Teil an, egal ob der Key bekannt ist oder nicht....

mfg

jandresen: Soweit geht das mit meinen Kenntnissen auch klar, nur bei bool / boolean bin ich mir nun unsicher.

? ?

Du (@HotSystems) schriebst, ich solle die isRFID = false noch definieren, also doch unter den else Teil der RFID-Überprüfung.

Das gehört in den Definitionsbereich (an den Anfang) als Globale Variable und nicht in den else-Zweig.

Müsste das nicht eigentlich if ((isRFID)=true) heißen?

Nein, er fragt ja auf true ab, da reicht die Variable.

Habs auch zum Laufen bekommen, jedoch sagt er, dass die "Keys" nicht berechtigt seien, sprich er kommt immer beim RFID-False Teil an, egal ob der Key bekannt ist oder nicht....

Dann hast du noch einen Fehler drin. Aber aus deinen Codefragmenten kann ich nichts entnehmen.

Edit: Dein Fehler liegt in der "Code-Abfrage"! Du musst da auf den richtigen Code prüfen und nicht nur auf true.

Bin wieder weiter gekommen. :slight_smile:

Der letzte Fehler muss mit den geschweiften Klammern zusammenhängen… irgendwo muss eine fehlen oder zu viel sein.

// *****Arduino Getraenkespender*****

#include <SPI.h>
#include <MFRC522.h>
int pumpendauer = 2500;
int LEDblink    = 500;
//Schalter für Getraenk Wunsch -> Input für Arduino
#define Getraenk1 8
#define Getraenk2 7
#define Getraenk3 3
// LEDs RFID
#define RFIDright 4
#define RFIDwaiting 5
#define RFIDwrong 6
// Beleuchtung - Bechereinstellung
#define BecherLED 0
//Schalter LEDs (GetraenkxPumpenLED)
#define G1PumpLED 14
#define G2PumpLED 15
#define G3PumpLED 16
bool isRFID = false; // <---- Hatte ich anfangs schon so, kam mir aber komisch vor, daher hab ich es dann unten hingeschrieben.
//Pumpendeklarierung
#define PumpG1 17
#define PumpG2 18
#define PumpG3 19
//**RFID**
long erlaubteKarten[] = { 1011520, 2492530, 171762080, 2467860, 363370 };
byte erlaubteKartenCount = 5;
#define SS_PIN 10
#define RST_PIN 9 
MFRC522 mfrc522(SS_PIN, RST_PIN);
void setup() {
  Serial.begin(9600);
  SPI.begin();
  mfrc522.PCD_Init();
  pinMode(Getraenk1, INPUT_PULLUP);
  pinMode(Getraenk2, INPUT_PULLUP);
  pinMode(Getraenk3, INPUT_PULLUP);
  pinMode(RFIDright, OUTPUT);
  pinMode(RFIDwaiting, OUTPUT);
  pinMode(RFIDwrong, OUTPUT);
  pinMode(G1PumpLED, OUTPUT);
  pinMode(G2PumpLED, OUTPUT);
  pinMode(G3PumpLED, OUTPUT);
  pinMode(PumpG1, OUTPUT);
  pinMode(PumpG2, OUTPUT);
  pinMode(PumpG3, OUTPUT);
  pinMode(BecherLED, OUTPUT);
  //Standardmäßige "HIGH-Schaltung"//
  digitalWrite(RFIDwaiting, HIGH);
}

void loop() {
  //RFID-Abfrage beginn
  if ( ! mfrc522.PICC_IsNewCardPresent()) {
    return;
  }

  if ( ! mfrc522.PICC_ReadCardSerial()) {
    return;
  }

  long code = 0;

  for (byte i = 0; i < mfrc522.uid.size; i++) {
    code = ((code + mfrc522.uid.uidByte[i]) * 10);
  }

  Serial.print(F("Erkannte Kartennummer:")); // Key wird gelesen
  Serial.print(code);

  if(PruefeKartenberechtigung(code) == true) { // wenn key richtig,
    Serial.println(F(" [BERECHTIGT]"));
                                               //RFID-Abfrage ende (Berechtigt / Buttons werden "freigegeben")
    digitalWrite(RFIDwaiting, LOW);
    digitalWrite(RFIDright, HIGH);
    digitalWrite(G1PumpLED, HIGH);
    digitalWrite(G2PumpLED, HIGH);
    digitalWrite(G3PumpLED, HIGH);
    isRFID = true;
    // beginn buttons
  }
  else
  {
    Serial.println(F(" [NICHT BERECHTIGT]"));
    digitalWrite(RFIDwrong, HIGH);
    delay(2000);
    digitalWrite(RFIDwrong, LOW);

  }
}
  if (isRFID)
  {
    if (digitalRead(Getraenk1) == LOW) // erster Button zur Getränke-Wahl
    {
      Serial.println("Getraenk 1...");
      isRFID = false;
    }

    if (digitalRead(Getraenk2) == LOW) // zweiter Button zur Wahl
    {
      Serial.println("Getraenk 2...");
      isRFID = false;
    }

    if (digitalRead(Getraenk3) == LOW) // dritter Button zur Wahl
    {
      Serial.println("Getraenk 3...");
      isRFID = false;
    }

}

 
boolean PruefeKartenberechtigung(long KartenUUID) {
  boolean isRFID = false;
  
  for(int i=0; i < erlaubteKartenCount; i++) {
    if(erlaubteKarten[i] == KartenUUID) {
      bool isRFID = true;
    }
  }
  return isRFID;
}

Das ist übrigens der jetzige Stand.
Der bool “PrüfeKartenberechtigung” kommt nicht zur Abfrage… deshalb müsste es an den Klammern liegen oder etwa nicht? Denn vorher ging es ja so und ich habe einiges “rausgeschmissen” um es besser überschauen zu können, dabei muss dann irgendwo eine Klammer zu viel und / bzw. oder gewesen sein…
Ich schau jetzt nochmal nach den Klammern…

mfg

Lies bitte nochmal meinen Post #7 durch. Am Ende habe ich deinen Fehler beschrieben.

HotSystems: Lies bitte nochmal meinen Post #7 durch. Am Ende habe ich deinen Fehler beschrieben.

Hab ich zu spät gesehen :/ ;

Hatte dennoch den ["Nicht Berechtigt"] Teil zweimal, sodass ich einen rausgeworfen habe. Dadurch kommt der bool "PruefeKartenberechtigung" nicht mehr zur if-Abfrage. Das versuche ich gerade in den Griff zu bekommen.

Ja, einen Klammerfehler hast du auch noch drin.

Die Klammer direkt vor “if (isRFID)” muss weg.

>>}<<
  if (isRFID)
  {
    if (digitalRead(Getraenk1) == LOW) // erster Button zur Getränke-Wahl
    {
      Serial.println("Getraenk 1...");
      isRFID = false;
    }

    if (digitalRead(Getraenk2) == LOW) // zweiter Button zur Wahl
    {
      Serial.println("Getraenk 2...");
      isRFID = false;
    }

    if (digitalRead(Getraenk3) == LOW) // dritter Button zur Wahl
    {
      Serial.println("Getraenk 3...");
      isRFID = false;
    }
  }
>>}<<

Und ans Ende des vorstehenden Codes muss noch eine hinzugefügt werden.
Dieser Code gehört mit in die Loop.

Und das nachstehende versteh ich nicht:

boolean PruefeKartenberechtigung(long KartenUUID) {
  boolean isRFID = false;

  for (int i = 0; i < erlaubteKartenCount; i++) {
    if (erlaubteKarten[i] == KartenUUID) {
      bool isRFID = true;
    }
  }
  return isRFID;
}

Zumal du 2 mal “isRFID” definiert hast. Das darf nicht.

Upps, das mit dem doppelten isRFID hab ich wohl aus Müdigkeit verplant… :o :o

// *****Arduino Getraenkespender*****

#include <SPI.h>
#include <MFRC522.h>
int pumpendauer = 2500;
int LEDblink    = 500;
//Schalter für Getraenk Wunsch -> Input für Arduino
#define Getraenk1 8
#define Getraenk2 7
#define Getraenk3 3
// LEDs RFID
#define RFIDright 4
#define RFIDwaiting 5
#define RFIDwrong 6
// Beleuchtung - Bechereinstellung
#define BecherLED 0
//Schalter LEDs (GetraenkxPumpenLED)
#define G1PumpLED 14
#define G2PumpLED 15
#define G3PumpLED 16
bool isRFID = false; // <---- Hatte ich anfangs schon so, kam mir aber komisch vor, daher hab ich es dann unten hingeschrieben.
//Pumpendeklarierung
#define PumpG1 17
#define PumpG2 18
#define PumpG3 19
//**RFID**
long erlaubteKarten[] = { 1011520, 2492530, 171762080, 2467860, 363370 };
byte erlaubteKartenCount = 5;
#define SS_PIN 10
#define RST_PIN 9 
MFRC522 mfrc522(SS_PIN, RST_PIN);
void setup() {
  Serial.begin(9600);
  SPI.begin();
  mfrc522.PCD_Init();
  pinMode(Getraenk1, INPUT_PULLUP);
  pinMode(Getraenk2, INPUT_PULLUP);
  pinMode(Getraenk3, INPUT_PULLUP);
  pinMode(RFIDright, OUTPUT);
  pinMode(RFIDwaiting, OUTPUT);
  pinMode(RFIDwrong, OUTPUT);
  pinMode(G1PumpLED, OUTPUT);
  pinMode(G2PumpLED, OUTPUT);
  pinMode(G3PumpLED, OUTPUT);
  pinMode(PumpG1, OUTPUT);
  pinMode(PumpG2, OUTPUT);
  pinMode(PumpG3, OUTPUT);
  pinMode(BecherLED, OUTPUT);
  //Standardmäßige "HIGH-Schaltung"//
  digitalWrite(RFIDwaiting, HIGH);
}

void loop() {
  //RFID-Abfrage beginn
  if ( ! mfrc522.PICC_IsNewCardPresent()) {
    return;
  }

  if ( ! mfrc522.PICC_ReadCardSerial()) {
    return;
  }

  long code = 0;

  for (byte i = 0; i < mfrc522.uid.size; i++) {
    code = ((code + mfrc522.uid.uidByte[i]) * 10);
  }

  Serial.print(F("Erkannte Kartennummer:")); // Key wird gelesen
  Serial.print(code);

  if(PruefeKartenberechtigung(code) == true) { // wenn key richtig,
    Serial.println(F(" [BERECHTIGT]"));
                                               //RFID-Abfrage ende (Berechtigt / Buttons werden "freigegeben")
    digitalWrite(RFIDwaiting, LOW);
    digitalWrite(RFIDright, HIGH);
    digitalWrite(G1PumpLED, HIGH);
    digitalWrite(G2PumpLED, HIGH);
    digitalWrite(G3PumpLED, HIGH);
    isRFID = true;
    // beginn buttons
  }
  else
  {
    Serial.println(F(" [NICHT BERECHTIGT]"));
    digitalWrite(RFIDwrong, HIGH);
    delay(2000);
    digitalWrite(RFIDwrong, LOW);
  }


  if (isRFID)
  {
    if (digitalRead(Getraenk1) == LOW) // erster Button zur Getränke-Wahl
    {
      Serial.println("Getraenk 1...");
      isRFID = false;
    }

    if (digitalRead(Getraenk2) == LOW) // zweiter Button zur Wahl
    {
      Serial.println("Getraenk 2...");
      isRFID = false;
    }

    if (digitalRead(Getraenk3) == LOW) // dritter Button zur Wahl
    {
      Serial.println("Getraenk 3...");
      isRFID = false;
    }
  }
}  
else 
{
    Serial.println(F(" [NICHT BERECHTIGT]"));
    digitalWrite(RFIDwrong, HIGH);
    delay(2000);
    digitalWrite(RFIDwrong, LOW);
  }
 
 
 
boolean PruefeKartenberechtigung(long KartenUUID) {
  boolean erlaubt = false;
  
  for(int i=0; i < erlaubteKartenCount; i++) {
    if(erlaubteKarten[i] = KartenUUID) {
       erlaubt = true;
    }
  }
  return isRFID;
}

So sollte es funktionieren, tut es jedoch nicht…

bei

if (digitalRead(Getraenk3) == LOW) // dritter Button zur Wahl
    {
      Serial.println("Getraenk 3...");
      isRFID = false;
    }
  }
}  
----->else <------- DIESEM
{
    Serial.println(F(" [NICHT BERECHTIGT]"));
    digitalWrite(RFIDwrong, HIGH);
    delay(2000);
    digitalWrite(RFIDwrong, LOW);
  }

else, schmeißt der Compiler mir den Fehler “expected unqualified-id before ‘else’” raus, ich find da aber nix, was ihn stören könnte… Das ist ja meistens eine fehlende Klammer oder ein Semikolon… aber da is nix, was ich als Anfänger seh…

PS: die Klammern und den doppelten bool hab ich wieder rückgängig gemacht. Die Variablen unten sind grad noch unnötig.

mfg

Ich vermute, du hast wieder eine geschweifte Klammer zu viel.

HotSystems: Ich vermute, du hast wieder eine geschweifte Klammer zu viel.

Ich schau gleich Zuhause mal

Kann das auch noch etwas anderes bedeuten? Ich finde da keine Klammer zu viel…

// *****Arduino Getraenkespender*****

#include <SPI.h>
#include <MFRC522.h>
int pumpendauer = 2500;
int LEDblink    = 500;
//Schalter für Getraenk Wunsch -> Input für Arduino
#define Getraenk1 8
#define Getraenk2 7
#define Getraenk3 3
// LEDs RFID
#define RFIDright 4
#define RFIDwaiting 5
#define RFIDwrong 6
// Beleuchtung - Bechereinstellung
#define BecherLED 0
//Schalter LEDs (GetraenkxPumpenLED)
#define G1PumpLED 14
#define G2PumpLED 15
#define G3PumpLED 16
bool isRFID = false; // <---- Hatte ich anfangs schon so, kam mir aber komisch vor, daher hab ich es dann unten hingeschrieben.
//Pumpendeklarierung
#define PumpG1 17
#define PumpG2 18
#define PumpG3 19
//**RFID**
long erlaubteKarten[] = { 1011520, 2492530, 171762080, 2467860, 363370 };
byte erlaubteKartenCount = 5;
#define SS_PIN 10
#define RST_PIN 9 
MFRC522 mfrc522(SS_PIN, RST_PIN);
void setup() {
  Serial.begin(9600);
  SPI.begin();
  mfrc522.PCD_Init();
  pinMode(Getraenk1, INPUT_PULLUP);
  pinMode(Getraenk2, INPUT_PULLUP);
  pinMode(Getraenk3, INPUT_PULLUP);
  pinMode(RFIDright, OUTPUT);
  pinMode(RFIDwaiting, OUTPUT);
  pinMode(RFIDwrong, OUTPUT);
  pinMode(G1PumpLED, OUTPUT);
  pinMode(G2PumpLED, OUTPUT);
  pinMode(G3PumpLED, OUTPUT);
  pinMode(PumpG1, OUTPUT);
  pinMode(PumpG2, OUTPUT);
  pinMode(PumpG3, OUTPUT);
  pinMode(BecherLED, OUTPUT);
  //Standardmäßige "HIGH-Schaltung"//
  digitalWrite(RFIDwaiting, HIGH);
}

void loop() {
  //RFID-Abfrage beginn
  if ( ! mfrc522.PICC_IsNewCardPresent()) {
    return;
  }

  if ( ! mfrc522.PICC_ReadCardSerial()) {
    return;
  }

  long code = 0;

  for (byte i = 0; i < mfrc522.uid.size; i++) {
    code = ((code + mfrc522.uid.uidByte[i]) * 10);
  }

  Serial.print(F("Erkannte Kartennummer:")); // Key wird gelesen
  Serial.print(code);

  if(PruefeKartenberechtigung(code) == true) { // wenn key richtig,
    Serial.println(F(" [BERECHTIGT]"));
                                               //RFID-Abfrage ende (Berechtigt / Buttons werden "freigegeben")
    digitalWrite(RFIDwaiting, LOW);
    digitalWrite(RFIDright, HIGH);
    digitalWrite(G1PumpLED, HIGH);
    digitalWrite(G2PumpLED, HIGH);
    digitalWrite(G3PumpLED, HIGH);
    isRFID = true;
    // beginn buttons
  }
  else
  {
    Serial.println(F(" [NICHT BERECHTIGT]"));
    digitalWrite(RFIDwrong, HIGH);
    delay(2000);
    digitalWrite(RFIDwrong, LOW);
  }


  if (isRFID)
  {
    if (digitalRead(Getraenk1) == LOW) // erster Button zur Getränke-Wahl
    {
      Serial.println("Getraenk 1...");
      isRFID = false;
    }

    if (digitalRead(Getraenk2) == LOW) // zweiter Button zur Wahl
    {
      Serial.println("Getraenk 2...");
      isRFID = false;
    }

    if (digitalRead(Getraenk3) == LOW) // dritter Button zur Wahl
    {
      Serial.println("Getraenk 3...");
      isRFID = false;
    }
  }
}  
else 
{
    Serial.println(F(" [NICHT BERECHTIGT]"));
    digitalWrite(RFIDwrong, HIGH);
    delay(2000);
    digitalWrite(RFIDwrong, LOW);
  }
 
 
 
boolean PruefeKartenberechtigung(long KartenUUID) {
  boolean erlaubt = false;
  
  for(int i=0; i < erlaubteKartenCount; i++) {
    if(erlaubteKarten[i] = KartenUUID) {
       erlaubt = true;
    }
  }
  return erlaubt;
}

jandresen:
Ich finde da keine Klammer zu viel…

Ich schon, wenn ich in der IDE +t zur Formatierung nutze.

agmue:
Ich schon, wenn ich in der IDE +t zur Formatierung nutze.

meinst du eine vor else? Bitte mach´s nicht zu spannend:D Die Pumpen sind heute gekommen und würde dann mal bauen, wenns heute läuft… :slight_smile:
Am besten sag mir gleich, wie ich sehen kann, wo eine zu viel oder zu wenig ist… ich habe einfach jede angeklickt und geschaut wo sie geschlossen wird, aber das macht überall sinn…

mfg

Ich habe Deine Bibliotheken nicht, daher kann ich keine Compilermeldungen zeigen. Ich hoffe, meine Kommentare helfen Dir:

    if (digitalRead(Getraenk3) == LOW) // dritter Button zur Wahl
    {
      Serial.println("Getraenk 3...");
      isRFID = false;
    }
  }
} // hier wird loop geschlossen, was nicht stimmen kann
else
{ // öfnende Klammer von else
  Serial.println(F(" [NICHT BERECHTIGT]"));
  digitalWrite(RFIDwrong, HIGH);
  delay(2000);
  digitalWrite(RFIDwrong, LOW);
} // schließende Klammer von else
// hier fehlt eine Klammer

agmue: Ich habe Deine Bibliotheken nicht, daher kann ich keine Compilermeldungen zeigen. Ich hoffe, meine Kommentare helfen Dir:

    if (digitalRead(Getraenk3) == LOW) // dritter Button zur Wahl
    {
      Serial.println("Getraenk 3...");
      isRFID = false;
    }
  }
} // hier wird loop geschlossen, was nicht stimmen kann
else
{ // öfnende Klammer von else
  Serial.println(F(" [NICHT BERECHTIGT]"));
  digitalWrite(RFIDwrong, HIGH);
  delay(2000);
  digitalWrite(RFIDwrong, LOW);
} // schließende Klammer von else
// hier fehlt eine Klammer

Hat´s definitiv. Danke.