Hello. I have a question on how to write the code in order to do the following tasks.
How can I make an LED light turn on when you scan the card once, then turn off when you scan the same card again.
This is my current setup, it's for a science fair and I would really appreciate any help I could get!
#include <SPI.h>
#include <MFRC522.h>
#define RST_PIN 9 // reset핀 설정
#define SS_PIN 10 // 데이터를 주고받는 역할의 핀( SS = Slave Selector )
MFRC522 mfrc(SS_PIN, RST_PIN); // 이 코드에서 MFR522를 이용하기 위해 mfrc객체를 생성해 줍니다.
int c;
int IDCARD1=0;
int IDCARD2=0;
int LEDA=0;
int LEDB=0;
int LEDC=0;
void setup() {
Serial.begin(9600); // 시리얼 통신, 속도는 9600
SPI.begin(); // SPI 초기화(SPI : 하나의 마스터와 다수의 SLAVE(종속적인 역활)간의 통신 방식)
pinMode (2, OUTPUT);
pinMode (3, OUTPUT);
pinMode (4, OUTPUT);
}
void loop() {
if ( ! mfrc.PICC_IsNewCardPresent() || ! mfrc.PICC_ReadCardSerial() ) { // 태그 접촉이 되지 않았을때 또는 아이디가 읽혀지지 않았을때
delay(500);
return; // return
}
if(IDCARD1==0 && mfrc.uid.uidByte[0] == 176 && mfrc.uid.uidByte[1] == 54
&& mfrc.uid.uidByte[2] == 154 && mfrc.uid.uidByte[3] == 27) {
Serial.println("1번 사용자님 안녕하세요");
IDCARD1=IDCARD1+1;
LEDA=LEDA+1;
LEDB=LEDB+1;
LEDC=LEDC+1;
delay (500);
}
if (IDCARD2==0 && mfrc.uid.uidByte[0] == 87 && mfrc.uid.uidByte[1] == 12
&& mfrc.uid.uidByte[2] == 76 && mfrc.uid.uidByte[3] == 39) {
Serial.println("2번 사용자님 안녕하세요");
IDCARD2=IDCARD2+1;
LEDA=LEDA+1;
LEDB=LEDB+0;
LEDC=LEDC+1;
delay (500);
}
if (LEDA>0)
{digitalWrite(2, HIGH);}
else
{digitalWrite(2, LOW);}
if (LEDB>0)
{digitalWrite(3, HIGH);}
else
{digitalWrite(3, LOW);}
if (LEDC>0)
{digitalWrite(4, HIGH);}
else
{digitalWrite(4, LOW);}
delay (wait);
if(IDCARD1==1 && mfrc.uid.uidByte[0] == 176 && mfrc.uid.uidByte[1] == 54
&& mfrc.uid.uidByte[2] == 154 && mfrc.uid.uidByte[3] == 27) {
Serial.println("1번 사용자님 안녕히가세요");
IDCARD1=IDCARD1-1;
LEDA=LEDA-1;
LEDB=LEDB-1;
LEDC=LEDC-1;
delay (500);
}
if (IDCARD2==1 && mfrc.uid.uidByte[0] == 87 && mfrc.uid.uidByte[1] == 12
&& mfrc.uid.uidByte[2] == 76 && mfrc.uid.uidByte[3] == 39) {
Serial.println("2번 사용자님 안녕히가세요");
IDCARD2=IDCARD2-1;
LEDA=LEDA-1;
LEDB=LEDB+0;
LEDC=LEDC-1;
delay (500);
}
if (LEDA>0)
{digitalWrite(2, HIGH);}
else
{digitalWrite(2, LOW);}
if (LEDB>0)
{digitalWrite(3, HIGH);}
else
{digitalWrite(3, LOW);}
if (LEDC>0)
{digitalWrite(4, HIGH);}
else
{digitalWrite(4, LOW);}
}