// CONSTANTS
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// TITLE
#define TITLE "APS Slave Code"
#define VERSION "v0.0.8"
#define FEATURE "Check RFID on Firebase and Buzz if unverified"
#define DEV_ID "S000001"
// RGB
const int RGB_G_PIN = 5; // D1
const int RGB_R_PIN = 4; // D2
// Buzzer
const int BUZZER_PIN = 15; // D8
String rfidDataContent = "";
unsigned long rfidAccessTime = 0;
bool rfidIsRemoved = false;
bool rfidIsVerified = false;
bool rfidIsDetectedOnce = false;
void setup() {
rgbSetup();
buzzerSetup();
Serial.begin(115200);
mcuShowVersion();
pinMode(2, INPUT_PULLUP);
}
void loop() {
detectRfidRemovalFromReader();
lightGreenLED();
sendUnoccupied();
resetBuzzer();
if (digitalRead(2))
return;
else
rfidAccessTime = millis();
if (!rfidIsDetectedOnce) {
rfidIsDetectedOnce = true;
readRfidContent();
showRfidTagToSerial();
verifyRfid();
lightRedLED();
buzzBuzzer();
sendOccupied();
}
}
void detectRfidRemovalFromReader() {
if (rfidDataContent != "" && (millis() - rfidAccessTime > 100)) {
rfidIsRemoved = true;
rfidDataContent = "";
rfidIsDetectedOnce = false;
Serial.println();
Serial.println("RFID card removed!");
} else {
rfidIsRemoved = false;
}
}
void lightGreenLED() {
if (rfidIsRemoved) {
Serial.println("Light Green LED!");
rgbGreenOn();
}
}
void sendUnoccupied() {
if (rfidIsRemoved && rfidIsVerified) {
Serial.println("Availability = 1");
}
}
void resetBuzzer() {
if (rfidIsRemoved && !rfidIsVerified) {
Serial.println("Buzzer Off!");
buzzerOff();
}
}
void readRfidContent() {
rfidDataContent = "";
rfidDataContent = " 13 D0 A5 A1";
rfidDataContent.toUpperCase();
}
void showRfidTagToSerial() {
Serial.println();
Serial.print(F("UID Tag:"));
Serial.print(rfidDataContent);
Serial.println();
}
void verifyRfid() {
char rfidCharArray[16] = "";
strcpy(rfidCharArray, " s13 D0 A5 A1");
Serial.print("UID From Firebase:");
Serial.println(rfidCharArray);
if (strcmp(rfidCharArray, rfidDataContent.c_str()) == 0) {
rfidIsVerified = true;
Serial.println(rfidDataContent + " RFID found!");
} else {
rfidIsVerified = false;
Serial.println(rfidDataContent + " RFID not found!");
}
}
void lightRedLED() {
Serial.println("Light Red LED!");
rgbRedOn();
}
void buzzBuzzer() {
if (!rfidIsVerified) {
Serial.println("Buzzer On!");
buzzerOn();
}
}
void sendOccupied() {
if (rfidIsVerified) {
Serial.println("Availability = 0");
}
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void mcuShowVersion() {
Serial.println();
Serial.println(F(TITLE));
Serial.println(F(VERSION));
Serial.println(F(FEATURE));
Serial.println();
}
// LED
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void rgbSetup() {
pinMode(RGB_G_PIN, OUTPUT);
pinMode(RGB_R_PIN, OUTPUT);
rgbGreenOn();
}
void rgbGreenOn() {
digitalWrite(RGB_G_PIN, !HIGH);
digitalWrite(RGB_R_PIN, !LOW);
}
void rgbRedOn() {
digitalWrite(RGB_R_PIN, !HIGH);
digitalWrite(RGB_G_PIN, !LOW);
}
// Buzzer
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void buzzerSetup() {
pinMode(BUZZER_PIN, OUTPUT);
}
void buzzerOn() {
digitalWrite(BUZZER_PIN, HIGH);
}
void buzzerOff() {
digitalWrite(BUZZER_PIN, LOW);
}