Primary expression error before token 'or'

hey,
im working on a project with an rfid module to open and close a servo lock.
I was trying to add a button to open and close the lock and i keep getting this error:


here is the full code:

#include <SPI.h> 
#include <RFID.h>
#include <Servo.h> 

RFID rfid(10, 9);       
unsigned char status; 
unsigned char str[MAX_LEN]; 
const char BUTTON_PIN = 2;
String accessGranted [2] = {"8310119280"}; 
int accessGrantedSize = 1;                                

Servo lockServo;               
int lockPos = 37;               
int unlockPos = 115;             
boolean locked = true;

int redLEDPin = 5;
int greenLEDPin = 6;

void setup() { 
  Serial.begin(9600);    
  SPI.begin();           
  rfid.init();           
  pinMode(redLEDPin, OUTPUT);    
  pinMode(greenLEDPin, OUTPUT);
  pinMode(BUTTON_PIN, INPUT_PULLUP);
  digitalWrite(redLEDPin, HIGH);
  delay(200);
  digitalWrite(greenLEDPin, HIGH);
  delay(200);
  digitalWrite(redLEDPin, LOW);
  delay(200);
  digitalWrite(greenLEDPin, LOW);
  lockServo.attach(3);
  lockServo.write(lockPos);       
  Serial.println("Place card/tag near reader...");
  
} 

void loop() 
{ 
  if (rfid.findCard(PICC_REQIDL, str) == MI_OK)  
  { 
    Serial.println("Card found"); 
    String temp = "";                            
    if (rfid.anticoll(str) == MI_OK)             
    { 
      Serial.print("The card's ID number is : "); 
      for (int i = 0; i < 4; i++)                 
      { 
        temp = temp + (0x0F & (str[i] >> 4)); 
        temp = temp + (0x0F & str[i]); 
      } 
      Serial.println (temp);
      checkAccess (temp);    
    } 
    rfid.selectTag(str); 
  }
  rfid.halt();
}

void checkAccess (String temp)   
{
  boolean granted = false;
  for (int i=0; i <= (accessGrantedSize-1); i++)    
  {bool currentState = digitalRead(BUTTON_PIN);
    if(accessGranted[i] == temp) or (currentState == false)         
    {
      Serial.println ("Access Granted");
      granted = true;
      if (locked == true)         
      {
          lockServo.write(unlockPos);
          locked = false;
      }
      else if (locked == false)   
      {
          lockServo.write(lockPos);
          locked = true;
      }
      digitalWrite(greenLEDPin, HIGH);   
      delay(200);
      digitalWrite(greenLEDPin, LOW);
      delay(200);
      digitalWrite(greenLEDPin, HIGH);
      delay(200);
      digitalWrite(greenLEDPin, LOW);
      delay(200);
    }
  }
  if (granted == false)    
  {
    Serial.println ("Access Denied");
    digitalWrite(redLEDPin, HIGH);      
    delay(200);
    digitalWrite(redLEDPin, LOW);
    delay(200);
    digitalWrite(redLEDPin, HIGH);
    delay(200);
    digitalWrite(redLEDPin, LOW);
    delay(200);
  }
}

I really don't know what to do actually....

Welcome

Add parenthesis around the if
if ( (accessGranted[i] == temp) or (currentState == false) )

Prefer using || instead of or, and you don't necessarily need parenthesis around each conditions
if ( accessGranted[i] == temp || currentState == false )

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