RFID Counter problem

Ahoi, I am trying to establish when 5 different RFID cards have been read.
P1 to P5 are set as 0, when the card is read the counter C=C+1 is set then the coresponding P is set to 1. If the same card is read again C remains unchanged. My problem is that after reading only one card C returns a value of 2! Can anyone see where I have gone wrong?

// Includes
#include <TM1637Display.h>
#include <Bounce2.h>
#include <SPI.h>
#include <MFRC522.h>
#include <Wire.h>
#include "Waveshare_LCD1602_RGB.h"
#include <SoftwareSerial.h>
#include <DFRobotDFPlayerMini.h>
#include <RH_ASK.h>

RH_ASK driver;
// constants won't change. They're used here to set pin numbers:
const int GreenledPin =  6;      // the number of the LED pin
const int RedledPin =  8;      // the number of the LED pin
const int BlueledPin =  7;      // the number of the LED pin
#define ActU A1 //CW is defined as pin #2//
#define ActD A2 //CCW is defined as pin #3//
#define CD A3
byte button1 = A0;
byte button4 = A6;
byte button5 = A7;
#define CLK 2
#define DI0 3
TM1637Display display(CLK, DI0);
#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN);
Waveshare_LCD1602_RGB lcd(16, 2); //16 characters and 2 lines of show



// defines variables
bool buttonState1;

char Send[1] = " ";

int r, g, b = 0;
int P1 = 0;
int P2 = 0;
int P3 = 0;
int P4 = 0;
int P5 = 0;
int C = 0;

//void printDetail(uint8_t type, int value);
// Connections to dfPlayer module
const byte TxToDFPlayer = 4;
const byte RxFromDFPlayer = 5;
SoftwareSerial softwareSerial(RxFromDFPlayer, TxToDFPlayer); // RX, TX
DFRobotDFPlayerMini dfPlayer;

// GLOBALS
// States in which the game can be
typedef enum {Task1, Task2, Task3, Display, Solved, Idle } stateType;
// Assume that the game starts
stateType state = Idle;
// Create debounce objects for each of the mechanical switches
Bounce aswt = Bounce();




// CONSTANTS
const uint8_t OFF[] = {0, 0, 0, 0};
// In this library, the byte order is .GFEDCBA


void setup()/////////////////////////////////////////////////SET UP/////////////////////////////////////////
{
  display.setBrightness(0x0f);
  // Clear the display

  display.setSegments(OFF);
  display.showNumberDec (0000);
  r = 255;
  g = 0;
  b = 0;
  lcd.init();
  lcd.setRGB(r, g, b);
  lcd.setCursor(0, 0);

  // initialize the pins :
  pinMode(BlueledPin, OUTPUT);
  pinMode(RedledPin, OUTPUT);
  pinMode(GreenledPin, OUTPUT);
  pinMode(button1, INPUT_PULLUP);
  pinMode(ActU, OUTPUT); //Set CW as an output//
  pinMode(ActD, OUTPUT); //Set CCW as an output//
  pinMode(CD, OUTPUT);
  //blink LED
  digitalWrite(GreenledPin, HIGH);
  digitalWrite(BlueledPin, HIGH);
  digitalWrite(RedledPin, HIGH);
  delay(500);
  digitalWrite(GreenledPin, LOW);
  digitalWrite(BlueledPin, LOW);
  digitalWrite(RedledPin, LOW);
  delay(500);
  digitalWrite(GreenledPin, HIGH);
  digitalWrite(BlueledPin, HIGH);
  digitalWrite(RedledPin, HIGH);
  delay(500);
  digitalWrite(GreenledPin, LOW);
  digitalWrite(BlueledPin, LOW);
  digitalWrite(RedledPin, LOW);


  // Declare pin inputs and attach debounce objects

  aswt.attach(button1);
  aswt.interval(5);
  Serial.begin(9600);
  Serial.println();
  // Print some useful debug output - the filename and compilation time
  Serial.println(__FILE__);
  Serial.println("Compiled: " __DATE__ ", " __TIME__);

  if (!driver.init())
    Serial.println("init failed");
  Serial.println();
  Serial.print(F("Initialising software serial interface to DFPlayer..."));
  for (int i = 0; i < 10; i++) {
    softwareSerial.begin(9600);
    delay(500);
    if (dfPlayer.begin(softwareSerial)) {
      Serial.println(F("OK!"));
      break;
    }
    else {
      Serial.print(".");
    }
    if (i == 9) {
      Serial.println(F("Failed :("));
      return;
    }
  }
  // Set volume (value from 0 to 30)
  dfPlayer.volume(30);
  SPI.begin();
  mfrc522.PCD_Init();
  lcd.send_string("  Scan ID Card");
}



void loop()
{

  if (C == 5)
  {
    state = Solved;
  }

  //delay(2000);

  buttonState1 = digitalRead(button1);

  switch (state) {

    case Task1:
      if (analogRead(7) < 500)
      {

        char Send[1] = "8";
        Serial.write(Send, 1);
        display.setSegments(OFF);
        display.showNumberDec (1243);

        state = Task2;

        lcd.clear();
        lcd.send_string("Stage one ");
        lcd.setCursor(0, 1);
        lcd.send_string("      complete");
        delay(2000);
        lcd.clear();
        lcd.send_string("Initiating");
        lcd.setCursor(0, 1);
        lcd.send_string("Stage Two");
        delay(4000);
        lcd.clear();
        lcd.send_string("ATT 20 dBm");
        lcd.setCursor(0, 1);
        lcd.send_string("VERT. AMPL. 0,3  ");
      } break;

    case Task2:
      if (analogRead(6) < 500)
      {
        char Send[1] = "9";
        Serial.write(Send, 2);

        state = Task3;

        lcd.clear();
        lcd.send_string("Stage two ");
        lcd.setCursor(0, 1);
        lcd.send_string("      complete");
        delay(2000);
        lcd.clear();
        lcd.send_string("Initiating");
        lcd.setCursor(0, 1);
        lcd.send_string("Stage Three");
        delay(2000);

        lcd.clear();
        lcd.send_string("Z to EARTH: TB25K");
        lcd.setCursor(0, 1);
        lcd.send_string("FREQ X100: SYNC EXT");
      } break;


    case Task3:
      if (buttonState1 == LOW)
      {
        char Send[1] = "0";
        Serial.write(Send, 2);

        state = Display;

        lcd.clear();
        lcd.send_string("Stage three ");
        lcd.setCursor(0, 1);
        lcd.send_string("      complete");
        r = 0;
        g = 255;
        b = 255;
        lcd.setRGB(r, g, b);
        lcd.clear();
        lcd.send_string("   USERNAME:");
        lcd.setCursor(0, 1);
        lcd.send_string("   XXXXXXXX");
      }      break;

    case Solved:
      lcd.clear();
      lcd.send_string("SOLVED");
      delay(8000);
      break;

    case Idle:
      if (C == 1)
      {
        display.showNumberDec (1000);
        lcd.setCursor(0, 1);
        lcd.send_string("1 CARD READ");
      }

      if (C == 2)
      {
        display.showNumberDec (1100);
        lcd.setCursor(0, 1);
        lcd.send_string("2 CARDS READ");
      } if (C == 3)
      {
        display.showNumberDec (1110);
        lcd.setCursor(0, 1);
        lcd.send_string("3 CARDS READ");
      } if (C == 4)
      {
        display.showNumberDec (1111);
        lcd.setCursor(0, 1);
        lcd.send_string("4 CARDS READ");
      }
      if ( ! mfrc522.PICC_IsNewCardPresent())
      {
        return;
      }

      if ( ! mfrc522.PICC_ReadCardSerial())
      {
        return;
      }
      // lcd.send_string("UID tag :");
      String content = "";
      byte letter;
      for (byte i = 0; i < mfrc522.uid.size; i++)
      {
        Serial.println(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
        Serial.println(mfrc522.uid.uidByte[i], HEX);
        content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
        content.concat(String(mfrc522.uid.uidByte[i], HEX));
      }
      lcd.clear();
      lcd.send_string("Message : ");
      content.toUpperCase();

      // This is the reaction to the individual cards


      //Card A PLAYER 1

      if  (P1 == 0)
      { C = C + 1;
        P1 = 1;
      }

      if (content.substring(1) == "A9 0B 9B 63") //Plz change to your cards UID
      { char Send[1] = "1";
        lcd.setCursor(0, 1);
        dfPlayer.playMp3Folder(1);
        lcd.send_string("CHECKING ID");
        delay(2000);
        lcd.clear();
        lcd.send_string("ID ACCEPTED");
        delay(2000);
        lcd.clear();
        r = 0;
        g = 0;
        b = 255;
        lcd.setRGB(r, g, b);
        lcd.send_string("HALLO PLAYER 1");
        display.setSegments(OFF);
        display.showNumberDec (7529);
        digitalWrite(GreenledPin, HIGH);
        delay(500);
        digitalWrite(GreenledPin, LOW);
        delay(500);
        digitalWrite(RedledPin, HIGH);
        delay(500);
        digitalWrite(RedledPin, LOW);
        delay(500);
        digitalWrite(GreenledPin, HIGH);
        delay(500);
        digitalWrite(GreenledPin, LOW);
        delay(500);
        digitalWrite(BlueledPin, HIGH);
        delay(500);
        digitalWrite(BlueledPin, LOW);
        delay(500);
        digitalWrite(RedledPin, HIGH);
        delay(500);
        digitalWrite(RedledPin, LOW);
        Serial.write(Send, 2);//
        delay(1000);
        dfPlayer.stop();
        display.setSegments(OFF);
        lcd.clear();
        r = 255;
        g = 0;
        b = 0;
        lcd.setRGB(r, g, b);
        lcd.send_string("  Scan ID Card");
        state = Idle;
        if  (P1 == 0)
        { C = C + 1;
          P1 = 1;
        }
        break;

      }
      //Card B PLAYER 2

      if (content.substring(1) == "29 F4 4F 47") //Plz change to your cards UID
      { char Send[1] = "2";
        dfPlayer.playMp3Folder(2);
        lcd.setCursor(0, 1);
        lcd.send_string("CHECKING ID");
        delay(2000);
        lcd.clear();
        lcd.send_string("ID ACCEPTED");
        delay(2000);
        lcd.clear();
        r = 0;
        g = 0;
        b = 255;
        lcd.setRGB(r, g, b);
        lcd.send_string("HALLO PLAYER 2");
        display.setSegments(OFF);
        display.showNumberDec (5492);

        digitalWrite(RedledPin, HIGH);
        delay(500);
        digitalWrite(RedledPin, LOW);
        delay(500);
        digitalWrite(GreenledPin, HIGH);
        delay(500);
        digitalWrite(GreenledPin, LOW);
        delay(500);
        digitalWrite(BlueledPin, HIGH);
        delay(500);
        digitalWrite(BlueledPin, LOW);
        delay(500);
        digitalWrite(GreenledPin, HIGH);
        delay(500);
        digitalWrite(GreenledPin, LOW);
        delay(500);
        digitalWrite(RedledPin, HIGH);
        delay(500);
        digitalWrite(RedledPin, LOW);
        Serial.write(Send, 2);//
        delay(1000);
        dfPlayer.stop();
        display.setSegments(OFF);
        lcd.clear();
        r = 255;
        g = 0;
        b = 0;
        lcd.setRGB(r, g, b);
        lcd.send_string("  Scan ID Card");
        if  (P2 == 0)
        { C = C + 1;
          P2 = 1;
        }
        state = Idle;
        break;

      }
      //Card C PLAYER 3 CD

      if (content.substring(1) == "B9 BE 76 48") //Plz change to your cards UID
      { char Send[1] = "3";
        dfPlayer.playMp3Folder(3);
        lcd.setCursor(0, 1);
        lcd.send_string("CHECKING ID");
        delay(2000);
        lcd.clear();
        lcd.send_string("ID ACCEPTED");
        delay(2000);
        lcd.clear();
        r = 0;
        g = 0;
        b = 255;
        lcd.setRGB(r, g, b);
        lcd.send_string("HALLO PLAYER 3");
        display.setSegments(OFF);
        display.showNumberDec (8431);
        digitalWrite(GreenledPin, HIGH);
        delay(500);
        digitalWrite(GreenledPin, LOW);
        delay(500);
        digitalWrite(GreenledPin, HIGH);
        delay(500);
        digitalWrite(GreenledPin, LOW);
        delay(500);
        digitalWrite(BlueledPin, HIGH);
        delay(500);
        digitalWrite(BlueledPin, LOW);
        delay(500);
        digitalWrite(RedledPin, HIGH);
        delay(500);
        digitalWrite(RedledPin, LOW);
        delay(500);
        digitalWrite(RedledPin, HIGH);
        delay(500);
        digitalWrite(RedledPin, LOW);

        Serial.write(Send, 2);//
        delay(1000);
        digitalWrite(CD, HIGH); //CD OPENS
        delay(1000);
        dfPlayer.stop();
        digitalWrite(CD, LOW);
        display.setSegments(OFF);
        lcd.clear();
        r = 255;
        g = 0;
        b = 0;
        lcd.setRGB(r, g, b);
        lcd.send_string("  Scan ID Card");
        if  (P3 == 0)
        { C = C + 1;
          P3 = 1;
        }
        state = Idle;
        break;
      }

      //Card D PLAYER 4

      if (content.substring(1) == "C9 54 4E 47") //Plz change to your cards UID
      { char Send[1] = "4";
        dfPlayer.playMp3Folder(4);
        lcd.setCursor(0, 1);
        lcd.send_string("CHECKING ID");
        delay(2000);
        lcd.clear();
        lcd.send_string("ID ACCEPTED");
        delay(2000);
        lcd.clear();
        r = 0;
        g = 0;
        b = 255;
        lcd.setRGB(r, g, b);
        lcd.send_string("HALLO PLAYER 4");
        display.setSegments(OFF);
        display.showNumberDec (2467);
        digitalWrite(BlueledPin, HIGH);
        delay(500);
        digitalWrite(BlueledPin, LOW);
        delay(500);
        digitalWrite(GreenledPin, HIGH);
        delay(500);
        digitalWrite(GreenledPin, LOW);
        delay(500);
        digitalWrite(RedledPin, HIGH);
        delay(500);
        digitalWrite(RedledPin, LOW);
        delay(500);
        digitalWrite(GreenledPin, HIGH);
        delay(500);
        digitalWrite(GreenledPin, LOW);
        delay(500);
        digitalWrite(RedledPin, HIGH);
        delay(500);
        digitalWrite(RedledPin, LOW);
        Serial.write(Send, 2);//
        delay(1000);
        dfPlayer.stop();
        display.setSegments(OFF);
        lcd.clear();
        r = 255;
        g = 0;
        b = 0;
        lcd.setRGB(r, g, b);
        lcd.send_string("  Scan ID Card");
        if  (P4 == 0)
        { C = C + 1;
          P4 = 1;
        }
        state = Idle;
        break;

      }



      //CARD E Player 5

      if (content.substring(1) == "29 B6 65 63") //Plz change to your cards UID
      { char Send[1] = "5";
        dfPlayer.playMp3Folder(5);
        lcd.setCursor(0, 1);
        lcd.send_string("CHECKING ID");
        delay(2000);
        lcd.clear();
        lcd.send_string("ID ACCEPTED");
        delay(2000);
        lcd.clear();
        r = 0;
        g = 0;
        b = 255;
        lcd.setRGB(r, g, b);
        lcd.send_string("HALLO PLAYER 5");
        display.setSegments(OFF);
        display.showNumberDec (4835);
        digitalWrite(GreenledPin, HIGH);
        delay(500);
        digitalWrite(GreenledPin, LOW);
        delay(500);
        digitalWrite(BlueledPin, HIGH);
        delay(500);
        digitalWrite(BlueledPin, LOW);
        delay(500);
        digitalWrite(RedledPin, HIGH);
        delay(500);
        digitalWrite(RedledPin, LOW);
        delay(500);
        digitalWrite(GreenledPin, HIGH);
        delay(500);
        digitalWrite(GreenledPin, LOW);
        delay(500);
        digitalWrite(RedledPin, HIGH);
        delay(500);
        digitalWrite(RedledPin, LOW);

        Serial.write(Send, 2);//
        delay(1000);
        dfPlayer.stop();
        display.setSegments(OFF);
        lcd.clear();
        r = 255;
        g = 0;
        b = 0;
        lcd.setRGB(r, g, b);
        lcd.send_string("  Scan ID Card");
        if  (P5 == 0)
        { C = C + 1;
          P5 = 1;
        }
        state = Idle;
        break;
      }

      // RESET

      if (content.substring(1) == "04 FD BE 29") //Plz change to your cards UID
      { lcd.setCursor(0, 1);
        dfPlayer.playMp3Folder(6);
        lcd.send_string("CHECKING ID");
        delay(1000);
        lcd.clear();
        lcd.send_string("ID ACCEPTED");
        lcd.clear();
        digitalWrite(ActD, HIGH); //Motor runs clockwise//
        lcd.send_string("  * RESETTING * ");
        lcd.setCursor(0, 1);
        lcd.send_string("* DO NOT TOUCH *");
        char Send[1] = "2";
        Serial.write(Send, 2);//RESETTING
        digitalWrite(RedledPin, HIGH);
        delay(1000);
        digitalWrite(RedledPin, LOW);
        digitalWrite(RedledPin, HIGH);
        delay(1000);
        digitalWrite(RedledPin, LOW);
        digitalWrite(RedledPin, HIGH);
        delay(1000);
        digitalWrite(RedledPin, LOW);
        digitalWrite(RedledPin, HIGH);
        delay(1000);
        digitalWrite(RedledPin, LOW);
        digitalWrite(RedledPin, HIGH);
        delay(1000);
        digitalWrite(RedledPin, LOW);
        digitalWrite(RedledPin, HIGH);
        delay(1000);
        digitalWrite(RedledPin, LOW);
        Serial.write(Send, 2);//OPENING
        delay(26000);
        digitalWrite(ActD, LOW);
        dfPlayer.stop();
        lcd.clear();
        lcd.send_string("  Scan ID Card");
        state = Idle;
        break;
      }

      //Card OPENING

      if (content.substring(1) == "ED 93 3B D5") //Plz change to your cards UID
      { lcd.setCursor(0, 1);
        dfPlayer.playMp3Folder(7);
        lcd.send_string("CHECKING ID");
        delay(1000);
        lcd.clear();
        lcd.send_string("ID ACCEPTED");
        lcd.clear();
        digitalWrite(ActU, HIGH); //Motor runs clockwise//
        lcd.send_string("  * Opening * ");
        lcd.setCursor(0, 1);
        lcd.send_string("* DO NOT TOUCH *");
        char Send[1] = "6";
        Serial.write(Send, 2);//OPENING
        digitalWrite(RedledPin, HIGH);
        delay(1000);
        digitalWrite(RedledPin, LOW);
        digitalWrite(RedledPin, HIGH);
        delay(1000);
        digitalWrite(RedledPin, LOW);
        digitalWrite(RedledPin, HIGH);
        delay(1000);
        digitalWrite(RedledPin, LOW);
        digitalWrite(RedledPin, HIGH);
        delay(1000);
        digitalWrite(RedledPin, LOW);
        digitalWrite(RedledPin, HIGH);
        delay(1000);
        digitalWrite(RedledPin, LOW);
        digitalWrite(RedledPin, HIGH);
        delay(1000);
        digitalWrite(RedledPin, LOW);
        Serial.write(Send, 6);//OPENING
        delay(26000);
        digitalWrite(ActU, LOW);
        dfPlayer.stop();
        lcd.clear();
        lcd.send_string("  Scan ID Card");
        state = Idle;
        break;
      }


      //Card P FOB START

      if (content.substring(1) == "59 15 ED 63") //Plz change to your cards UID
      { char Send[1] = "7";
        dfPlayer.playMp3Folder(8);
        lcd.setCursor(0, 1);
        lcd.send_string("CHECKING ID");
        delay(2000);
        lcd.send_string("ID Accepted");
        r = 0;
        g = 0;
        b = 255;
        lcd.setRGB(r, g, b);
        delay(2000);
        lcd.clear();
        lcd.send_string("Hallo Professor");
        delay(1000);
        lcd.clear();
        lcd.send_string("Start sequence");
        Serial.write(Send, 2); //SYSTEM STARTING
        delay(1000);
        lcd.clear();
        lcd.send_string("Initiating");
        lcd.setCursor(0, 1);
        lcd.send_string("Stage one");
        delay(1000);
        dfPlayer.stop();
        lcd.clear();
        r = 255;
        g = 0;
        b = 0;
        lcd.setRGB(r, g, b);
        lcd.send_string("FREQ: X1");
        lcd.setCursor(0, 1);
        lcd.send_string("DC TO SYNC.EXT.");
        state = Task1;
        break;
      }

      else

        // Invalid cards
      { lcd.clear();
        dfPlayer.playMp3Folder(9);
        lcd.send_string("CHECKING ID");
        delay(1000);
        lcd.clear();
        lcd.setCursor(0, 1);
        lcd.send_string("  ACCESS DENIED");
  

Solved! Before Player 1 I had the same code as after player 1, this meant that until I had read card 1 C would always be +1

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.