commit ba3aa98ec5fff2ba1ce785097e93e4859833a03c Author: Lucas_Gomes_Tamba Date: Tue Jun 2 14:38:31 2026 +0000 Téléverser les fichiers vers "/" diff --git a/Codefinalbarriere.ino b/Codefinalbarriere.ino new file mode 100644 index 0000000..f55be09 --- /dev/null +++ b/Codefinalbarriere.ino @@ -0,0 +1,191 @@ +#include +#include +#include +#include +#include + +#define SS_PIN 10 +#define RST_PIN 9 +#define servoEntree 5 +#define servoSortie 3 + +String UID = "AE E6 DA 6F"; + +MFRC522 rfid(SS_PIN, RST_PIN); +Servo barriere1; +Servo barriere2; +LiquidCrystal_I2C lcd(0x27, 16, 2); + +int IR1 = 4; +int IR2 = 6; + +bool carEntering = false; +bool carExiting = false; +int placesLibres = 3; // compteur de places + +void setup() { + Serial.begin(9600); + lcd.init(); + lcd.backlight(); + pinMode(IR1, INPUT); + pinMode(IR2, INPUT); + barriere1.attach(servoEntree); + barriere2.attach(servoSortie); + barriere1.write(100); + barriere2.write(100); + + lcd.setCursor(0, 0); + lcd.print(" ARDUINO "); + lcd.setCursor(0, 1); + lcd.print(" PARKING SYSTEM "); + delay(3000); + lcd.clear(); + + SPI.begin(); + rfid.PCD_Init(); + + Serial.println("Systeme pret."); + updateDisplay(); +} + +void loop() { + + // --- ENTREE --- + if (digitalRead(IR1) == LOW && !carEntering && !carExiting) { + carEntering = true; + lcd.clear(); + lcd.setCursor(0, 0); + lcd.print("Car Detected!"); + delay(1000); + + if (placesLibres <= 0) { + // Parking plein + lcd.clear(); + lcd.setCursor(0, 0); + lcd.print(" PARKING FULL "); + lcd.setCursor(0, 1); + lcd.print(" Desole :( "); + delay(3000); + } else { + int pass = rfunc(); + if (pass == 1) { + placesLibres--; + Serial.print("Places restantes : "); + Serial.println(placesLibres); + smoothOpen(barriere1); + lcd.clear(); + lcd.setCursor(0, 0); + lcd.print("Gate Opened!"); + delay(10000); + smoothClose(barriere1); + lcd.clear(); + lcd.setCursor(0, 0); + lcd.print("Gate Closed!"); + delay(1500); + } + } + + carEntering = false; + updateDisplay(); + } + + // --- SORTIE --- + if (digitalRead(IR2) == LOW && !carExiting && !carEntering) { + carExiting = true; + lcd.clear(); + lcd.setCursor(0, 0); + lcd.print("Car Exiting..."); + smoothOpen(barriere2); + delay(10000); + smoothClose(barriere2); + + if (placesLibres < 3) { + placesLibres++; + Serial.print("Places restantes : "); + Serial.println(placesLibres); + } + + lcd.clear(); + lcd.setCursor(0, 0); + lcd.print("Gate Closed!"); + delay(1500); + carExiting = false; + updateDisplay(); + } +} + +void updateDisplay() { + lcd.clear(); + lcd.setCursor(0, 0); + lcd.print(" WELCOME! "); + lcd.setCursor(0, 1); + lcd.print("Places : "); + lcd.print(placesLibres); + lcd.print("/3"); +} + +void smoothOpen(Servo &s) { + for (int pos = 100; pos >= 0; pos--) { + s.write(pos); + delay(10); + } +} + +void smoothClose(Servo &s) { + for (int pos = 0; pos <= 100; pos++) { + s.write(pos); + delay(10); + } +} + +int rfunc() { + lcd.clear(); + lcd.setCursor(4, 0); + lcd.print("Welcome!"); + lcd.setCursor(1, 1); + lcd.print("Put your card"); + + unsigned long t = millis(); + while (true) { + if (rfid.PICC_IsNewCardPresent() && rfid.PICC_ReadCardSerial()) break; + if (millis() - t > 10000) { + lcd.clear(); + lcd.setCursor(0, 0); + lcd.print("Timeout..."); + delay(1500); + return 0; + } + delay(300); + } + + lcd.clear(); + lcd.setCursor(0, 0); + lcd.print("Scanning"); + + String ID = ""; + for (byte i = 0; i < rfid.uid.size; i++) { + lcd.print("."); + ID.concat(String(rfid.uid.uidByte[i] < 0x10 ? " 0" : " ")); + ID.concat(String(rfid.uid.uidByte[i], HEX)); + delay(300); + } + + ID.toUpperCase(); + Serial.print("Badge scanne : "); + Serial.println(ID.substring(1)); + + if (ID.substring(1) == UID) { + lcd.clear(); + lcd.setCursor(0, 0); + lcd.print("Allowed."); + delay(1500); + return 1; + } else { + lcd.clear(); + lcd.setCursor(0, 0); + lcd.print("Wrong card!"); + Serial.println("Acces refuse."); + delay(1500); + return 0; + } +} \ No newline at end of file