// ######################## // # LETTORE DI CODICE QR # // # AUGUSTE MAGLI # // # 07 AGOSTO 2026 # // ######################## // ############### // # BIBLIOTECHE # // ############### #include #include // Per lo schermo LiquidCrystal_I2C loSchermo(0x3F, 20, 4); #include // Per il motore Servo ilMotore; // ##################### // # VARIABILI GLOBALI # // ##################### String cLettura = ""; // Frase letta sul lettore String cGeneralita = ""; // Identità dell'utente bool bAprire = false; // Per dare il permesso bool bTrovato = false; // È nel database // ######### // # SETUP # // ######### void setup() { loSchermo.begin(); // Per lo schermo loSchermo.backlight(); ilMotore.attach(9); // Per il motore ilMotore.write(45); ilMotore.detach(); delay(5000); Serial.begin(9600); // Moniteur Série USB pour le PC Serial1.begin(9600); // Port UART1 connecté au GM67 identificazione(); } // // ######## // // # LOOP # // // ######## void loop() { letturaQR(); // Lettura del codice QR if (bAprire == true) // Se la persona ha il permesso di entrare { apertura(cGeneralita); // Aprire la barriera e scrivere un messaggio chiusura(); // Chiudere la barriera e scrivere un messaggio } else // Se la persona non ha il permesso di entrare { sospeso(cGeneralita); // Scrivere un messaggio } identificazione(); // Ricominciare } // ############# // # PROCEDURE # // ############# // IDENTIFICAZIONE void identificazione() // Scrivere un messaggio { loSchermo.setCursor(0, 0); loSchermo.print(" IDENTIFICAZIONE "); loSchermo.setCursor(0, 1); loSchermo.print(" "); loSchermo.setCursor(0, 2); loSchermo.print(" PRESENTARE "); loSchermo.setCursor(0, 3); loSchermo.print(" IL CODICE QR "); delay(5000); } // APERTURA void apertura(String cNome) // Scrivere un messaggio { while (cNome.length() < 20) // Centrare il nome e i cognome { cNome = " " + cNome + " "; } loSchermo.setCursor(0, 0); loSchermo.print(cNome); loSchermo.setCursor(0, 1); loSchermo.print(" "); loSchermo.setCursor(0, 2); loSchermo.print(" ACCESSO CONSENTITO "); loSchermo.setCursor(0, 3); loSchermo.print(" APERTURA "); ilMotore.attach(9); for (int t = 145; t >= 55; t--) // Aprire lentamente { ilMotore.write(t); delay(10); } ilMotore.detach(); // Spegnere il motore per ridurre il consumo delay(10000); } // SOSPESO void sospeso(String cNome) // Scrivere un messaggio { while (cNome.length() < 20) // Centrare il nome e i cognome { cNome = " " + cNome + " "; } loSchermo.setCursor(0, 0); loSchermo.print(cNome); loSchermo.setCursor(0, 1); loSchermo.print(" "); loSchermo.setCursor(0, 2); loSchermo.print(" ACCESSO SOSPESO "); loSchermo.setCursor(0, 3); loSchermo.print(" NON OLTREPASSARE "); delay(5000); // Aspettare cinque secondi } // CHIUSURA void chiusura() // Scrivere un messaggio { loSchermo.setCursor(0, 0); loSchermo.print(" "); loSchermo.setCursor(0, 1); loSchermo.print(" ATTENZIONE "); loSchermo.setCursor(0, 2); loSchermo.print(" CHIUSURA IN CORSO "); loSchermo.setCursor(0, 3); loSchermo.print(" "); ilMotore.attach(9); for (int t = 55; t <= 145; t++) // Chiudere lentamente { ilMotore.write(t); delay(20); } ilMotore.detach(); // Spegnere il motore per ridurre il consumo delay(2000); } // LETTURA void letturaQR() // Leggere il QRCode { bTrovato = false; while (bTrovato == false) // Fino a quando nessun codice QR non è stato letto { if (Serial1.available()) { String code = Serial1.readStringUntil('\n'); // Ascolta i caratteri letti code.trim(); bAprire = false; if (code == "http://www.magli.fr") { cGeneralita = "AUGUSTE MAGLI"; // Nome da scrivere sullo schermo bAprire = true; // La barriera sarà aperta bTrovato = true; // Non ascoltare più } if (code == "http://www.graziani.it") { cGeneralita = "CEDRIC GRAZIANI"; bAprire = true; bTrovato = true; } if (code == "http://www.barbasio.it") { cGeneralita = "SARAH BARBASIO"; bAprire = true; bTrovato = true; } if (code == "http://www.fascia.it") { cGeneralita = "CELINE FASCIA"; bAprire = true; bTrovato = true; } if (code == "http://www.pallino.it") { cGeneralita = "PINCO PALLINO"; bAprire = false; // La barriera rimarrà chiusa bTrovato = true; } if (code == "http://www.pignon.fr") { cGeneralita = "FRANCOIS PIGNON"; bAprire = true; bTrovato = true; } if (code == "https://www.sadette.fr") { cGeneralita = "HONORE SADETTE"; bAprire = false; bTrovato = true; } if (code == "https://www.kergosien.fr") { cGeneralita = "LEA KERGOSIEN"; bAprire = true; bTrovato = true; } if (code == "https://www.tartampion.fr") { cGeneralita = "YOANN TARTAMPION"; bAprire = false; bTrovato = true; } if (code == "https://www.edroit.fr") { cGeneralita = "KID EDROIT"; bAprire = true; bTrovato = true; } if (code == "https://www.morand.fr") { cGeneralita = "SOPHIE MAGLI"; bAprire = true; bTrovato = true; } if (code == "https://www.bava.fr") { cGeneralita = "CECILE BAVA"; bAprire = true; bTrovato = true; } } } }