#include <LiquidCrystal_I2C.h>
#include <MFRC522.h>
#include <Servo.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
MFRC522 rc522(8, 12);
Servo myservo;
const byte PROGMEM IDs[3][4] = {
{ 0xB3, 0x60, 0x12, 0xAA },
{ 0xD3, 0x92, 0x83, 0xB7 },
{ 0xC9, 0xBB, 0xF3, 0xC0 }
};
int SOLDE[3] = { 100, 50, 25 };
int IDsolde() {
for (int i = 0; i < 3; i++) {
if (memcmp_P(rc522.uid.uidByte, IDs[i], 3) == 0) {
return i;
}
}
return -1;
}
void setup() {
pinMode(2, INPUT);
pinMode(4, OUTPUT);
rc522.PCD_Init();
myservo.attach(3);
myservo.write(0);
lcd.init();
lcd.backlight();
lcd.setCursor(4, 0);
lcd.print(F("WELCOME"));
}
void loop() {
if (rc522.PICC_IsNewCardPresent() && rc522.PICC_ReadCardSerial()) {
int m = IDsolde();
if (m != -1) {
int S = SOLDE[m];
if (S > 0) {
digitalWrite(4, HIGH);
delay(100);
digitalWrite(4, LOW);
lcd.setCursor(2, 0);
lcd.print(F("Votre Solde:"));
lcd.setCursor(6, 1);
lcd.print(S);
lcd.print(F("DH"));
unsigned long startTime = millis();
while (millis() - startTime < 4000) {
if (digitalRead(2) == HIGH) {
SOLDE[m] -= 5;
myservo.write(90);
lcd.clear();
lcd.setCursor(5, 0);
lcd.print(F("ENJOY"));
delay(5000);
myservo.write(0);
delay(25);
break;
}
}
} else {
digitalWrite(4, HIGH);
delay(100);
digitalWrite(4, LOW);
delay(100);
digitalWrite(4, HIGH);
delay(100);
digitalWrite(4, LOW);
lcd.setCursor(2, 0);
lcd.print(F("solde kinem"));
lcd.setCursor(6, 1);
lcd.print(S);
lcd.print(F("DH"));
delay(4000);
}
} else {
lcd.clear();
lcd.setCursor(5, 0);
lcd.print(F("Chfaar"));
for (int i = 1; i < 50; i++) {
digitalWrite(4, HIGH);
delay(100);
digitalWrite(4, LOW);
delay(100);
}
}
lcd.clear();
lcd.setCursor(4, 0);
lcd.print(F("WELCOME"));
}
}