1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
| #include <SPI.h>
#include <MFRC522.h>
#include <LiquidCrystal.h>
#define SS_PIN 10
#define RST_PIN 9
const byte codeVoitures[][4] = {
{0x32, 0xA7, 0x08, 0x2A}, //VOITURE 1
{0x72, 0xBF, 0x06, 0x2A}, //VOITURE 2
{0xAB, 0x3E, 0x49, 0x23}, //VOITURE 3
{0x49, 0xD6, 0xA2, 0x59}, //VOITURE 4
};
const byte nombreDeVoitures = sizeof codeVoitures / sizeof * codeVoitures;
byte nombreDeDetections[nombreDeVoitures];
LiquidCrystal lcd(8, 7, 5, 4, 3, 2);
MFRC522 rfid(SS_PIN, RST_PIN); // Instance of the class
void raz() {
lcd.clear();
// écran d'accueil
lcd.setCursor (0, 0);
lcd.print("COURSE DE");
lcd.setCursor (8, 1);
lcd.print("VOITURES");
delay(1000);
lcd.clear();
for (byte i = 0; i < nombreDeVoitures; i++) {
byte col = (i % 2 == 0) ? 0 : 8; // si i est pair on se met en colonne = 0 sinon en colonne = 8
byte ligne = i / 2 ; // division entière donc en ligne 0 pour i = 0 ou 1, puis en ligne 1 pour i = 2 et 3
nombreDeDetections[i] = 0;
lcd.setCursor (col, ligne);
lcd.write('P'); lcd.print(i + 1); lcd.print("=0"); // on écrit "P1=0", "P2=0", ... le compte commence 3 colones après l'étiquette
}
}
void setup() {
lcd.begin(16, 2);
SPI.begin();
rfid.PCD_Init();
raz();
}
void loop() {
if ( ! rfid.PICC_IsNewCardPresent()) return;
if ( ! rfid.PICC_ReadCardSerial()) return;
// lID du badge (4 octets) est dans le tableau rfid.uid.uidByte, on le duplique pour libérérer le lecteur RFID au plus vite
byte badgeDetecte[4];
memcpy(badgeDetecte, rfid.uid.uidByte, 4);
// Re-Init RFID
rfid.PICC_HaltA(); // Halt PICC
rfid.PCD_StopCrypto1(); // Stop encryption on PCD
// on cherche si on a trouvé une voiture connue
for (byte i = 0; i < nombreDeVoitures; i++) {
if (memcmp(codeVoitures[i], badgeDetecte, 4) == 0) { // on compare les 4 octets pour voir s'il y a une correspondance
byte col = (i % 2 == 0) ? 0 : 8; // si i est pair on se met en colonne = 0 sinon en colonne = 8
byte ligne = i / 2 ; // division entière donc en ligne 0 pour i = 0 ou 1, puis en ligne 1 pour i = 2 et 3
nombreDeDetections[i]++; // on augmente le nombre de détection de cette voiture
lcd.setCursor (col + 3, ligne); // on se positionne sur la bonne ligne au bon endroit
lcd.print(nombreDeDetections[i]); // on affiche le nouveau compte. Comme il ne fait qu'augmenter on ne se soucie pas d'effacer avant
// on regarde si ce joueur a gagné (le curseur sur le LCD est juste après le nombre qu'on vient de mettre à jour)
if (nombreDeDetections[i] > 9) {
lcd.print("WIN");
for (byte j = 0; j < 16; j++) {
digitalWrite(A0, HIGH);
delay(200);
digitalWrite(A0, LOW);
delay(200);
}
raz(); // on remet ensuite à zéro
}
break; // <=== METTRE LE BREAK AU BON NIVEAU, DANS LA BOULCE FOR SI ON A TROUVE SEULEMENT
}
}
} |
Partager