Auteur Pierre Touchard | Dernière modification 6/11/2024 par Pierre Touchard
Arduino, escape game, Electronique _nigme_d_Escape_Game_-_Carte_magn_tique_et_carte_au_tr_sor_WhatsApp_Image_2024-11-06_at_15.44.55.jpeg
Le code a été conçu en utilisant les codes et montages présents sur les sites suivants:
https://retroetgeek.com/arduino/arduino-rfid-rc522/
https://randomnerdtutorials.com/guide-for-oled-display-with-arduino/
Lancer le logiciel Arduino
Copier/code suivant dans le programme permettant d’utiliser Arduino :
// Inspiré des codes du site https://retroetgeek.com/arduino/arduino-rfid-rc522/ et ceux du site https://randomnerdtutorials.com/guide-for-oled-display-with-arduino/
#include "SPI.h"
#include "MFRC522.h"
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Fonts/FreeSerif9pt7b.h>
#define RST_PIN 9 // RES pin
#define SS_PIN 10 // SDA (SS) pin
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define ORG 3
#define GRN 4
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
MFRC522 mfrc522(SS_PIN, RST_PIN);
//keyOk ets l'ensemble des valeurs de la clé UID de la carte que l'on veut définir comme valide
String keyOk[]={"39 11 d1 59"};
void setup() {
display.clearDisplay();
pinMode(GRN, OUTPUT);
pinMode(ORG, OUTPUT);
Serial.begin(9600);
SPI.begin();
mfrc522.PCD_Init();
delay(4);
//mfrc522.PCD_DumpVersionToSerial();
//Serial.println(F("Scan PICC to see UID, SAK, type, and data blocks..."));
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
//Serial.println("SSD1306 allocation failed");
display.clearDisplay();
for(;;);
}
}
void loop() {
// réinitialiser le cycle s'il n'y a pas de carte sur le lecteur
if ( ! mfrc522.PICC_IsNewCardPresent()) {
display.clearDisplay();
return;
}
if ( ! mfrc522.PICC_ReadCardSerial()) {
display.clearDisplay();
return;
}
//Ecrire la clé UID sur le moniteur série
//mfrc522.PICC_DumpToSerial(&(mfrc522.uid));
// recuperation de l'UID et concaténation de sa valeur en hex dans un string
String myKey=String(mfrc522.uid.uidByte[0],HEX) + " " + String(mfrc522.uid.uidByte[1],HEX) + " " + String(mfrc522.uid.uidByte[2],HEX) + " " + String(mfrc522.uid.uidByte[3],HEX);
//Booléen qui définit si la carte est valide (1) ou non (0)
bool accessOk = 0;
// Si chaque valeur de la clé UID de la carte correspond à une clé UID valide, alors accessOk = 1 (On définit que la carte est valide)
for(int y = 0; y < (sizeof(keyOk)/sizeof(String)) ; y++){
if(keyOk[y] == myKey){
accessOk = 1;
}
}
//Si la carte est valide, alors on affiche le plan et le texte
if(accessOk == 1){
delay(500);
digitalWrite(GRN, HIGH);
digitalWrite(ORG, LOW);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 2);
// Display static text
//Ecrire "Bonne carte!" aux coordonnées 0,2 de l'écran
display.println("Bonne carte!");
//Affiche un rectangle qui représente la table au centre de la pièce
display.drawRect(50, 20, 50, 30, WHITE);
//Affiche les lignes aux bords de l'écran qui représentent les murs
display.drawLine(0, 0, 127, 0, WHITE);
//Le décalage en X entre les deux prochaines lignes laisse un espace vide qui représente la porte
display.drawLine(0, 0, 0, 38, WHITE);
display.drawLine(0, 58, 0, 63, WHITE);
//Affiche les lignes aux bords de l'écran qui représentent les murs
display.drawLine(127, 0, 127, 63, WHITE);
display.drawLine(0, 63, 127, 63, WHITE);
/*Affiche progressivement le trajet à suivre dans la pièce.
Des tirets représentent le chemin à suivre et une croix représente ce que l'on cherche*/
display.drawLine(0, 48, 5, 48, WHITE); //Affiche un tiret, c'est à dire une ligne courte
display.display();// Affiche sur l'écran tous les élements, en ajoutant ceux qu'on a définit depuis le dernier "display.display();"
delay(500); //Applique un délais de 500 ms avant le prochain affichage.
// On recommence ces 3 lignes en changeant les coordonnées pour chaque tiret
display.drawLine(10, 48, 15, 48, WHITE);//Affiche un nouveau tiret, c'est à dire une ligne courte
display.display();//Affiche la même chose qu'au dernier "display.display(); avec le nouveau tiret en plus"
delay(500);
display.display();
display.drawLine(20, 48, 25, 48, WHITE);
display.display();
delay(500);
display.drawLine(30, 48, 35, 48, WHITE);
display.display();
delay(500);
display.drawLine(40, 48, 40, 53, WHITE);
display.display();
delay(500);
display.drawLine(45, 58, 50, 58, WHITE);
display.display();
delay(500);
display.drawLine(55, 58, 60, 58, WHITE);
display.display();
delay(500);
display.drawLine(65, 58, 70, 58, WHITE);
display.display();
delay(500);
display.drawLine(75, 58, 80, 58, WHITE);
display.display();
delay(500);
display.drawLine(85, 58, 90, 58, WHITE);
display.display();
delay(500);
display.drawLine(95, 58, 100, 58, WHITE);
display.display();
delay(500);
// Ici on affiche 2 tirets qui se croisent afin de faire une croix
display.drawLine(105, 53, 115, 63, WHITE);
display.drawLine(115, 53, 105, 63, WHITE);
display.display();
}
//Si la carte n'est pas valide, alors on affiche seulement "Mauvaise carte" aux coordonnées 0,2 de l'écran et on n'affiche pas le plan
else{
digitalWrite(GRN, LOW);
digitalWrite(ORG, HIGH);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 2);
// Display static text
display.println("Mauvaise carte!");
display.display();
}
}
Brancher l’Arduino sur un port USB de l’ordinateur.
Cliquer sur l’image représentant une sorte de v, puis sur l’image représentant une flèche (le programme sera mis dans l’Arduino.
Attendre la fin du transfert.
Par défaut, l’écran n’affiche rien et les 2 leds sont éteintes. Si l’on passe un mauvais badge/carte, le message "Mauvaise carte!" s’affiche sur l’écran OLED mais pas la carte. De plus, la led orange s’allume.
Si on passe le bon badge/carte, le message "Bonne carte!" s’affiche ainsi que la carte. De plus, la led verte s’allume. L’affichage de cette carte n’est pas instantané mais suit une suite d’instructions entrecoupées de pauses.
Le code UID de la bonne carte/ou du bon badge est inscrit dans le code et peut être modifié.
Une erreur de branchement.
Certains composants électroniques Arduino nécessitent d’être soudés à des fils afin de fonctionner.
Se tromper dans les codages.
Les lecteurs RFID et cartes et badges magnétiques sont utilisés pour plusieurs usages. On peut citer par exemple certaines portes qui nécessitent un badge pour rentrer (dans des immeubles par exemple).
Dernière modification 6/11/2024 par user:Pierre Touchard.
Draft
Vous avez entré un nom de page invalide, avec un ou plusieurs caractères suivants :
< > @ ~ : * € £ ` + = / \ | [ ] { } ; ? #