IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

Projet RFID Compteur


Sujet :

Arduino

  1. #1
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2023
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2023
    Messages : 10
    Par défaut Projet RFID Compteur
    Bonjour à tous !

    Aprés de nombreuses recherches je n'arrive pas à finalisé mon projet.

    Je vous explique :

    A l'aide du lecteur RFID : RFIO-RC522
    d'un Uno R3
    de carte et badges
    d'un écran LCD 2 lignes

    Je voudrais faire un "compte tours"

    Je ne sais pas si réellement ce que je demande sera possible..

    Il faudrait que sur l'écran LCD soit affiché A = xx B= XX C= XX et que les xx soit remplacés par le nombre de passage des badges devant le lecteur RFID.

    A ce stade j'arrive grace aux nombreux tutos sur le rfid à faire un contôle d'accés..
    Rien de plus !

    J'attend avec impatience vos retours.
    Dans l'attente je vous souhaite pleins de projets avec vos arduino !!

  2. #2
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 884
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 884
    Par défaut
    Commencez par faire un code qui affiche À B et C lorsque une valeur change

    Ensuite rajoutez du code qui écoute le RFID et compare la carte vue avec celles connues et augment de 1 à,b ou c lors de la détection. En pseudo code votre loop() ressemble à cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    si carte détectée 
      Alors 
        Si c’est carteA alors augmenter a
        Sinon Si c’est carteB alors augmenter b
        Sino Si c’est carteC alors augmenter c
     
    Si a ou b ou c a changé 
      alors mise à jour de l’afficheur

  3. #3
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2023
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2023
    Messages : 10
    Par défaut
    Merci Jay M,

    Je vais voir si je peux exploiter ce que tu viens de me dire !
    N'étant pas un Expert ça va être un peu long !
    J'ai peur qu'avec un arduino Uno je sois limiter en terme de place pour brancher le LCD et le lecteur RFID...

  4. #4
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2023
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2023
    Messages : 10
    Par défaut
    Je vous joint la partie du code qui fonctionne pour mon badge RFID, sauriez vous ce que je dois rajouter afin de faire fonctionné plusieurs badges différent ?
    Merci d'avance

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    #include <SPI.h>
    #include <MFRC522.h>
     
    #define SS_PIN 10
    #define RST_PIN 9
     
    #define AccesFlag_PIN 2
    #define Gate_PIN 3
    #define Max_Acces 3
     
    byte Count_acces=0; 
    byte CodeVerif=0; 
    byte Code_Acces[4]={0x32, 0xA7, 0x08, 0x2A};  
     
    MFRC522 rfid(SS_PIN, RST_PIN); // Instance of the class
     
    // Init array that will store new NUID 
    byte nuidPICC[4];
     
    void setup() 
    { 
      // Init RS232
      Serial.begin(9600);
     
      // Init SPI bus
      SPI.begin(); 
     
      // Init MFRC522 
      rfid.PCD_Init(); 
     
      // Init LEDs 
      pinMode(AccesFlag_PIN, OUTPUT);
      pinMode(Gate_PIN, OUTPUT);
     
      digitalWrite(AccesFlag_PIN, LOW);
      digitalWrite(Gate_PIN, LOW);
    }
     
    void loop() 
    {
      // Initialisé la boucle si aucun badge n'est présent 
      if ( !rfid.PICC_IsNewCardPresent())
        return;
     
      // Vérifier la présence d'un nouveau badge 
      if ( !rfid.PICC_ReadCardSerial())
        return;
     
      // Afffichage 
      Serial.println(F("Un badge est détecté"));
     
      // Enregistrer l’ID du badge (4 octets) 
      for (byte i = 0; i < 4; i++) {
        nuidPICC[i] = rfid.uid.uidByte[i];
      }
     
      // Vérification du code 
      CodeVerif= GetAccesState(Code_Acces,nuidPICC); 
      if (CodeVerif!=1)
      {
        Count_acces+=1;
        if(Count_acces==Max_Acces)
        {
         // Dépassement des tentatives (clignotement infinie) 
         while(1)
         {
          digitalWrite(AccesFlag_PIN, HIGH);
          delay(200); 
          digitalWrite(AccesFlag_PIN, LOW);
          delay(200); 
          // Affichage 
          Serial.println("Alarme!");
         }
        }
        else
        {
          // Affichage 
          Serial.println("Code érroné");
     
          // Un seul clignotement: Code erroné 
          digitalWrite(AccesFlag_PIN, HIGH);
          delay(1000); 
          digitalWrite(AccesFlag_PIN, LOW);
        }
      }
      else
      {
        // Affichage 
        Serial.println("Ouverture de la porte");
     
        // Ouverture de la porte & Initialisation 
        digitalWrite(Gate_PIN, HIGH);
        delay(3000); 
        digitalWrite(Gate_PIN, LOW);
        Count_acces=0; 
      }
     
      // Affichage de l'identifiant 
      Serial.println(" L'UID du tag est:");
      for (byte i = 0; i < 4; i++) 
      {
        Serial.print(nuidPICC[i], HEX);
        Serial.print(" ");
      }
      Serial.println();
     
      // Re-Init RFID
      rfid.PICC_HaltA(); // Halt PICC
      rfid.PCD_StopCrypto1(); // Stop encryption on PCD
    }
     
    byte GetAccesState(byte *CodeAcces,byte *NewCode) 
    {
      byte StateAcces=0; 
      if ((CodeAcces[0]==NewCode[0])&&(CodeAcces[1]==NewCode[1])&&
      (CodeAcces[2]==NewCode[2])&& (CodeAcces[3]==NewCode[3]))
        return StateAcces=1; 
      else
        return StateAcces=0; 
    }
    Nom : Sans titre.png
Affichages : 419
Taille : 11,4 Ko

  5. #5
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2023
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2023
    Messages : 10
    Par défaut
    Re,

    J'évolue un peu de mon côté.

    Toujours en recherche de validation de plusieurs "badges", j'ai reussi cependant à faire fonctionné le lecteur et l'afficheur LCD.
    Voici mon code à l'heure actuelle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    #include <SPI.h>
    #include <MFRC522.h>
    #include "LiquidCrystal.h"
     
    #define SS_PIN 10
    #define RST_PIN 9
     
     
    byte Count_acces=0; 
    byte CodeVerif=0; 
    byte Code_Acces[4]={0x32, 0xA7, 0x08, 0x2A}; 
    LiquidCrystal lcd(8,7,5,4,3,2);
     
    MFRC522 rfid(SS_PIN, RST_PIN); // Instance of the class
     
    // Init array that will store new NUID 
    byte nuidPICC[4];
     
     
    void setup() 
    { 
     
      // Init RS232
      Serial.begin(9600);
     
      // Init SPI bus
      SPI.begin(); 
     
      // Init MFRC522 
      rfid.PCD_Init(); 
     
      lcd.print("A= ");
       lcd.print("B= ");
        lcd.print("C= ");
     
     
     
    }
     
    void loop() 
    {
      // Initialisé la boucle si aucun badge n'est présent 
      if ( !rfid.PICC_IsNewCardPresent())
        return;
     
      // Vérifier la présence d'un nouveau badge 
      if ( !rfid.PICC_ReadCardSerial())
        return;
     
      // Enregistrer l’ID du badge (4 octets) 
      for (byte i = 0; i < 4; i++) {
        nuidPICC[i] = rfid.uid.uidByte[i];
      }
     
      // Vérification du code 
      CodeVerif= GetAccesState(Code_Acces,nuidPICC); 
      if (CodeVerif!=1)
     
     
      {
    //A COMPLETER
        Count_acces=0; 
      }
     
      // Re-Init RFID
      rfid.PICC_HaltA(); // Halt PICC
      rfid.PCD_StopCrypto1(); // Stop encryption on PCD
    }
     
    byte GetAccesState(byte *CodeAcces,byte *NewCode) 
    {
      byte StateAcces=0; 
      if ((CodeAcces[0]==NewCode[0])&&(CodeAcces[1]==NewCode[1])&&
      (CodeAcces[2]==NewCode[2])&& (CodeAcces[3]==NewCode[3]))
        return StateAcces=1; 
      else
        return StateAcces=0; 
    }
    A ce stade, mon afficheur m'affiche A= B= C= .

    Mon but étant maintenant que mes 3 badges ont un impac direct sur A, B et C. A chaque passage je voudrais que ça rajoute +1 sur le badge correspondant.

    J'ai aussi fait un peu de nettoyage dans le code....

  6. #6
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2023
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2023
    Messages : 10
    Par défaut
    Victoire !!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    #include <SPI.h>
    #include <MFRC522.h>
    #include "LiquidCrystal.h"
     
    #define SS_PIN 10
    #define RST_PIN 9
     
    byte rf;
    byte rf2;
    byte Count_acces=0; 
    byte CodeVerif=0;
    byte Code_Acces2[4]={0x72, 0xBF, 0x06, 0x2A};  
    byte Code_Acces[4]={0x32, 0xA7, 0x08, 0x2A}; 
    LiquidCrystal lcd(8,7,5,4,3,2);
     
    MFRC522 rfid(SS_PIN, RST_PIN); // Instance of the class
     
    // Init array that will store new NUID 
    byte nuidPICC[4];
     
     
    void setup() 
    { 
      rf=0;
      rf2=0;
    lcd.begin(16, 2);
      // Init RS232
      Serial.begin(9600);
     
      // Init SPI bus
      SPI.begin(); 
     
      // Init MFRC522 
      rfid.PCD_Init(); 
     
     lcd.print("A=");
    lcd.setCursor (0,1);
    lcd.print("B=");
     
     
     
    }
     
    void loop() 
    {
      // Initialisé la boucle si aucun badge n'est présent 
      if ( !rfid.PICC_IsNewCardPresent())
        return;
     
      // Vérifier la présence d'un nouveau badge 
      if ( !rfid.PICC_ReadCardSerial())
        return;
     
      // Enregistrer l’ID du badge (4 octets) 
      for (byte i = 0; i < 4; i++) {
        nuidPICC[i] = rfid.uid.uidByte[i];
      }
     
      // Vérification du code 
      CodeVerif= GetAccesState(Code_Acces,nuidPICC); 
      if (CodeVerif!=1)
     
     {
    rf=rf+1;
    lcd.setCursor (3,0);
      lcd.print(rf);
        Count_acces=0; 
      }
      //TEST
      CodeVerif= GetAccesState(Code_Acces2,nuidPICC); 
      if (CodeVerif!=1)
     
     {
    rf2=rf2+1;
    lcd.setCursor (3,1);
      lcd.print(rf2);
        Count_acces=0; 
      }
    //FIN DU TEST
     
     
      // Re-Init RFID
      rfid.PICC_HaltA(); // Halt PICC
      rfid.PCD_StopCrypto1(); // Stop encryption on PCD
    }
     
    byte GetAccesState(byte *CodeAcces,byte *NewCode) 
    {
      byte StateAcces=0; 
      if ((CodeAcces[0]==NewCode[0])&&(CodeAcces[1]==NewCode[1])&&
      (CodeAcces[2]==NewCode[2])&& (CodeAcces[3]==NewCode[3]))
        return StateAcces=1; 
      else
        return StateAcces=0; 
    }
    Si jamais une personne souhaite mettre du clair dans ce code je suis preneur !!!

  7. #7
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2023
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2023
    Messages : 10
    Par défaut
    Amélioration du code :

    Aprés de multiples essais je m'aperçois que ce code n'est pas sans failles...
    Si je passe une carte RFID quelconque ça me rajoute +1 !

    J'ai voulu rajouter 2 Badges, je précise que ce petit code à pour but de simulé une course auto en modéle réduit. A voir si un jour j'arrive à l'integré sur une maquette...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
    408
    #include <SPI.h>
    #include <MFRC522.h>
    #include "LiquidCrystal.h"
     
    #define SS_PIN 10
    #define RST_PIN 9
     
    byte rf1;  //COMPTEUR 1
    byte rf2;  //COMPTEUR 2
    byte rf3;  //COMPTEUR 3
    byte rf4;  //COMPTEUR 4
    byte nuidPICC[4];
    byte Count_acces=0; 
    byte CodeVerif1=0;
    byte CodeVerif2=0;
    byte CodeVerif3=0;
    byte CodeVerif4=0;
    byte Code_Acces1[4]={0x32, 0xA7, 0x08, 0x2A};   //VOITURE 1
    byte Code_Acces2[4]={0x72, 0xBF, 0x06, 0x2A};  //VOITURE 2
    byte Code_Acces3[4]={0xAB, 0x3E, 0x49, 0x23};  //VOITURE 3
    byte Code_Acces4[4]={0x49, 0xD6, 0xA2, 0x59};   //VOITURE 4
     
    LiquidCrystal lcd(8,7,5,4,3,2);
    MFRC522 rfid(SS_PIN, RST_PIN); // Instance of the class
     
     
    void setup() 
    { 
    pinMode(A0, OUTPUT);
     
     
      rf1=0;  //Utile pour rajouter +1 à chaque passage compteur 1
      rf2=0; //Utile pour rajouter +1 à chaque passage compteur 2
      rf3=0; //Utile pour rajouter +1 à chaque passage compteur 3
      rf4=0; //Utile pour rajouter +1 à chaque passage compteur 4
      lcd.begin(16, 2);
     
      // Init RS232
      Serial.begin(9600);
     
      // Init SPI bus
      SPI.begin(); 
     
      // Init MFRC522 
      rfid.PCD_Init(); 
     
     
       lcd.print("P1=");
       lcd.setCursor (0,1);
       lcd.print("P2=");
       lcd.setCursor (8,0);
       lcd.print("P3=");
       lcd.setCursor (8,1);
       lcd.print("P4=");
    }
     
    void loop() 
    {
      // Initialisé la boucle si aucun badge n'est présent 
      if ( !rfid.PICC_IsNewCardPresent())
        return;
     
      // Vérifier la présence d'un nouveau badge 
      if ( !rfid.PICC_ReadCardSerial())
        return;
     
      // Enregistrer l’ID du badge (4 octets) 
      for (byte i = 0; i < 4; i++) {
        nuidPICC[i] = rfid.uid.uidByte[i];
     
      }
    {
      // Vérification du code VOITURE 1
      CodeVerif1= GetAccesState1(Code_Acces1,nuidPICC); 
      if (CodeVerif1!=1)
     {
       rf1=rf1+1;
       lcd.setCursor (3,0);
       lcd.print(rf1);
       Count_acces=0; 
      }}
      {
      // Vérification du code VOITURE 2
      CodeVerif2= GetAccesState2(Code_Acces2,nuidPICC); 
      if (CodeVerif2!=1)
     {
       rf2=rf2+1;
       lcd.setCursor (3,1);
       lcd.print(rf2);
       Count_acces=0; 
      }}
       { // Vérification du code VOITURE 3
      CodeVerif3= GetAccesState3(Code_Acces3,nuidPICC); 
      if (CodeVerif3!=1)
     {
       rf3=rf3+1;
       lcd.setCursor (11,0);
       lcd.print(rf3);
       Count_acces=0; 
      }}
      {
        // Vérification du code VOITURE 4
      CodeVerif4= GetAccesState4(Code_Acces4,nuidPICC); 
      if (CodeVerif4!=1)
     {
       rf4=rf4+1;
       lcd.setCursor (11,1);
       lcd.print(rf4);
       Count_acces=0; 
     
      }}
      // Re-Init RFID
      rfid.PICC_HaltA(); // Halt PICC
      rfid.PCD_StopCrypto1(); // Stop encryption on PCD
     
        if (rf1 > 9)
      {
      lcd.setCursor (5,0);
      lcd.print("win");
      digitalWrite(A0, HIGH);
      delay(200);
      digitalWrite(A0, LOW);
      delay(200);
      digitalWrite(A0, HIGH);
      delay(200);
      digitalWrite(A0, LOW);
      delay(200);
      digitalWrite(A0, HIGH);
      delay(200);
      digitalWrite(A0, LOW);
      delay(200);
      digitalWrite(A0, HIGH);
      delay(200);
      digitalWrite(A0, LOW);
      delay(200);
      digitalWrite(A0, HIGH);
      delay(200);
      digitalWrite(A0, LOW);
      delay(200);
      digitalWrite(A0, HIGH);
      delay(200);
      digitalWrite(A0, LOW);
      delay(200);
      digitalWrite(A0, HIGH);
      delay(200);
      digitalWrite(A0, LOW);
      delay(200);
      digitalWrite(A0, HIGH);
      delay(200);
      digitalWrite(A0, LOW);
      delay(200);
      digitalWrite(A0, HIGH);
      delay(200);
      digitalWrite(A0, LOW);
      delay(200);
      digitalWrite(A0, HIGH);
      delay(200);
      digitalWrite(A0, LOW);
      delay(200);
      digitalWrite(A0, HIGH);
      delay(200);
      digitalWrite(A0, LOW);
      delay(200);
      digitalWrite(A0, HIGH);
      delay(200);
      digitalWrite(A0, LOW);
      delay(200);
      digitalWrite(A0, HIGH);
      delay(200);
      digitalWrite(A0, LOW);
      delay(200);
      digitalWrite(A0, HIGH);
      delay(200);
      digitalWrite(A0, LOW);
      delay(200);
      digitalWrite(A0, HIGH);
      delay(200);
      digitalWrite(A0, LOW);
      delay(200);
      digitalWrite(A0, HIGH);
      delay(200);
      digitalWrite(A0, LOW);
      delay(200);
      }
         if (rf2 > 9)
      {
      lcd.setCursor (5,1);
      lcd.print("win");
      digitalWrite(A0, HIGH);
      delay(200);
      digitalWrite(A0, LOW);
      delay(200);
      digitalWrite(A0, HIGH);
      delay(200);
      digitalWrite(A0, LOW);
      delay(200);
      digitalWrite(A0, HIGH);
      delay(200);
      digitalWrite(A0, LOW);
      delay(200);
      digitalWrite(A0, HIGH);
      delay(200);
      digitalWrite(A0, LOW);
      delay(200);
      digitalWrite(A0, HIGH);
      delay(200);
      digitalWrite(A0, LOW);
      delay(200);
      digitalWrite(A0, HIGH);
      delay(200);
      digitalWrite(A0, LOW);
      delay(200);
      digitalWrite(A0, HIGH);
      delay(200);
      digitalWrite(A0, LOW);
      delay(200);
      digitalWrite(A0, HIGH);
      delay(200);
      digitalWrite(A0, LOW);
      delay(200);
      digitalWrite(A0, HIGH);
      delay(200);
      digitalWrite(A0, LOW);
      delay(200);
      digitalWrite(A0, HIGH);
      delay(200);
      digitalWrite(A0, LOW);
      delay(200);
      digitalWrite(A0, HIGH);
      delay(200);
      digitalWrite(A0, LOW);
      delay(200);
      digitalWrite(A0, HIGH);
      delay(200);
      digitalWrite(A0, LOW);
      delay(200);
      digitalWrite(A0, HIGH);
      delay(200);
      digitalWrite(A0, LOW);
      delay(200);
      digitalWrite(A0, HIGH);
      delay(200);
      digitalWrite(A0, LOW);
      delay(200);
      digitalWrite(A0, HIGH);
      delay(200);
      digitalWrite(A0, LOW);
      delay(200);
      digitalWrite(A0, HIGH);
      delay(200);
      digitalWrite(A0, LOW);
      delay(200);
      }
         if (rf3 > 9)
      {
      lcd.setCursor (11,1);
      lcd.print("win");
      digitalWrite(A0, HIGH);
      delay(200);
      digitalWrite(A0, LOW);
      delay(200);
      digitalWrite(A0, HIGH);
      delay(200);
      digitalWrite(A0, LOW);
      delay(200);
      digitalWrite(A0, HIGH);
      delay(200);
      digitalWrite(A0, LOW);
      delay(200);
      digitalWrite(A0, HIGH);
      delay(200);
      digitalWrite(A0, LOW);
      delay(200);
      digitalWrite(A0, HIGH);
      delay(200);
      digitalWrite(A0, LOW);
      delay(200);
      digitalWrite(A0, HIGH);
      delay(200);
      digitalWrite(A0, LOW);
      delay(200);
      digitalWrite(A0, HIGH);
      delay(200);
      digitalWrite(A0, LOW);
      delay(200);
      digitalWrite(A0, HIGH);
      delay(200);
      digitalWrite(A0, LOW);
      delay(200);
      digitalWrite(A0, HIGH);
      delay(200);
      digitalWrite(A0, LOW);
      delay(200);
      digitalWrite(A0, HIGH);
      delay(200);
      digitalWrite(A0, LOW);
      delay(200);
      digitalWrite(A0, HIGH);
      delay(200);
      digitalWrite(A0, LOW);
      delay(200);
      digitalWrite(A0, HIGH);
      delay(200);
      digitalWrite(A0, LOW);
      delay(200);
      digitalWrite(A0, HIGH);
      delay(200);
      digitalWrite(A0, LOW);
      delay(200);
      digitalWrite(A0, HIGH);
      delay(200);
      digitalWrite(A0, LOW);
      delay(200);
      digitalWrite(A0, HIGH);
      delay(200);
      digitalWrite(A0, LOW);
      delay(200);
      digitalWrite(A0, HIGH);
      delay(200);
      digitalWrite(A0, LOW);
      delay(200);
      }
         if (rf4 > 9)
      {
      lcd.setCursor (11,1);
      lcd.print("win");
      digitalWrite(A0, HIGH);
      delay(200);
      digitalWrite(A0, LOW);
      delay(200);
      digitalWrite(A0, HIGH);
      delay(200);
      digitalWrite(A0, LOW);
      delay(200);
      digitalWrite(A0, HIGH);
      delay(200);
      digitalWrite(A0, LOW);
      delay(200);
      digitalWrite(A0, HIGH);
      delay(200);
      digitalWrite(A0, LOW);
      delay(200);
      digitalWrite(A0, HIGH);
      delay(200);
      digitalWrite(A0, LOW);
      delay(200);
      digitalWrite(A0, HIGH);
      delay(200);
      digitalWrite(A0, LOW);
      delay(200);
      digitalWrite(A0, HIGH);
      delay(200);
      digitalWrite(A0, LOW);
      delay(200);
      digitalWrite(A0, HIGH);
      delay(200);
      digitalWrite(A0, LOW);
      delay(200);
      digitalWrite(A0, HIGH);
      delay(200);
      digitalWrite(A0, LOW);
      delay(200);
      digitalWrite(A0, HIGH);
      delay(200);
      digitalWrite(A0, LOW);
      delay(200);
      digitalWrite(A0, HIGH);
      delay(200);
      digitalWrite(A0, LOW);
      delay(200);
      digitalWrite(A0, HIGH);
      delay(200);
      digitalWrite(A0, LOW);
      delay(200);
      digitalWrite(A0, HIGH);
      delay(200);
      digitalWrite(A0, LOW);
      delay(200);
      digitalWrite(A0, HIGH);
      delay(200);
      digitalWrite(A0, LOW);
      delay(200);
      digitalWrite(A0, HIGH);
      delay(200);
      digitalWrite(A0, LOW);
      delay(200);
      digitalWrite(A0, HIGH);
      delay(200);
      digitalWrite(A0, LOW);
      delay(200);
      }
     
     
     
    }
     
    byte GetAccesState1(byte *CodeAcces1,byte *NewCode) 
    byte GetAccesState2(byte *CodeAcces2,byte *NewCode) 
    byte GetAccesState3(byte *CodeAcces3,byte *NewCode) 
    byte GetAccesState5(byte *CodeAcces4,byte *NewCode) 
    {
      byte StateAcces=0; 
      if ((CodeAcces[0]==NewCode[0])&&(CodeAcces[1]==NewCode[1])&&
      (CodeAcces[2]==NewCode[2])&& (CodeAcces[3]==NewCode[3]))
        return StateAcces=1; 
      else
        return StateAcces=0; 
    }
    Aprés vérification du code je commence à avoir des erreurs.
    Je pense avoir exploité au max mes connaissances et mes limites en terme d'optimisation et de fonctionnalités.

    Si des amateurs de defis passent par là !

    Merci d'avance.

  8. #8
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 884
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 884
    Par défaut
    il y a de l'idée mais vous pouvez utiliser mieux les tableaux et des boucles pour éviter la duplication de code

    par exemple un truc comme cela, ça devient nettement plus court

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    #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");
      lcd.setCursor (6, 1);
      lcd.print("DE");
      lcd.setCursor (8, 2);
      lcd.print("VOITURES");
      delay(1000);
      lcd.clear();
     
      for (byte i = 0; i < nombreDeVoitures; i++) {
        nombreDeDetections[i] = 0;
        lcd.setCursor (0, i);
        lcd.write('P'); lcd.print(i + 1); lcd.print(" = 0"); // on écrit "P1 = 0", "P2 = 0", ... le compte commence en position 5
      }
    }
     
    void setup() {
      lcd.begin(16, 2);
      SPI.begin();
      rfid.PCD_Init();
      raz();
    }
     
    void loop() {
      if ( ! rfid.PICC_IsNewCardPresent()) return;
      if ( ! rfid.PICC_ReadCardSerial())   return;
     
      // l’ID 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
          nombreDeDetections[i]++;            // on augmente le nombre de détection de cette voiture
          lcd.setCursor (5, i);               // on se positionne sur la bonne ligne au bon endroit en position 5
          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;
      }
    }
    (code écrit ici sur le forum à partir du votre, totalement non testé)


    PS: j'utilise deux fonctions de la bibliothèque standard en C / C++ qui permettent de copier ou comparer des zone d'octets

    memcpy() pour dupliquer une zone mémoire dans une autre zone ==> https://cplusplus.com/reference/cstring/memcpy/
    memcmp() pour comparer deux zones ==> https://cplusplus.com/reference/cstring/memcmp/

  9. #9
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2023
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2023
    Messages : 10
    Par défaut
    Merci beaucoup pour ta réponse et ton temps.
    Je vais le mettre en application tout à l'heure.
    Je reviens vers toi pour le résultat !

  10. #10
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2023
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2023
    Messages : 10
    Par défaut
    Re,

    Voici le résultat en photo de ce qui s'affiche :
    Nom : 20230125_115300.jpg
Affichages : 402
Taille : 1,20 Mo

    Voici un morceau de code que j'ai du modifier pour le texte du début " Course de voitures" sinon ça ne rentrez pas !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    lcd.setCursor (0, 0);
      lcd.print("COURSE");
      lcd.setCursor (8, 0);
      lcd.print("DE");
      lcd.setCursor (8, 1);
      lcd.print("VOITURES");
    Franchement si je me concentre j'arrive presque à savoir ce qu'il se passe... Mais le travail que tu as fais sur ce code dépasse toutes mes conaissances... J'ai beau ouvrir mon livre "arduino pour les nuls" c'est pareil

    J'arrive bien à incrémenter le "P1 =" avec un badge, le "P4 =" ne bouge pas, et les autres doivent être dans une autre dimension !

  11. #11
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 884
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 884
    Par défaut
    ah vous avez un écran de deux lignes seulement, donc l'affichage n'est pas fait pour ça (j'avais pas regardé mais je pensais que vous aviez 4 lignes)

    en réfléchissant à un usage des 16 colonnes / 2 lignes comme cela

    Nom : lcd.jpg
Affichages : 387
Taille : 29,7 Ko

    vous pouvez calculer la position où il faut écrire (ligne colonne) avec des formules simples utilisant la division entière et le modulo

    essayez cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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;
     
      // l’ID 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;
      }
    }
    ensuite pour la compréhension du code, c'est proche de ce que vous aviez sauf que je fais une boucle for avec i qui représente l'indice de la carte à tester dans le tableau des cartes connues. Donc au lieu de faire 4 fois la même chose, je ne le fais qu'une fois. idem pour le clignotement sur A0 je fais une boucle qui fait 16 fois allumer/eteindre au lieu d'écrire 16 fois la même chose...

  12. #12
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2023
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2023
    Messages : 10
    Par défaut
    Merci,

    Les infos sont affichées correctement.


    Est-ce que le fait que seulement le badge "P1=" fonctionne vient obligatoirement de mon badge ?
    Lorsque j'utilise la bibliotheque en example "ReadNUID" j'ai bien les UID des 4 badges.

    Nom : Sans titre.png
Affichages : 381
Taille : 20,9 Ko

    Est-ce que ça supporte aussi bien la valeur en Hexa et en déci ? Je viens de m'aperçevoir que j'avais les 2...

  13. #13
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 884
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 884
    Par défaut
    Citation Envoyé par Teki82 Voir le message
    Est-ce que ça supporte aussi bien la valeur en Hexa et en déci ? Je viens de m'aperçevoir que j'avais les 2..
    décimal ou hexadécimal, ce n'est qu'une représentation pour des humains. si vous écrivez
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    const byte codeVoitures[][4] = {
      {0x32, 0xA7, 0x08, 0x2A}, //VOITURE 1 ==> EN HEXADECIMAL
    ...
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    const byte codeVoitures[][4] = {
      {50, 167, 8, 42}, //VOITURE 1 ==> EN DECIMAL
    ...
    pour le compilateur et l'Arduino, c'est exactement la même chose qui est mise en mémoire (en binaire car il ne connait que les 1 et 0 pour les bits)


    Citation Envoyé par Teki82 Voir le message
    Est-ce que le fait que seulement le badge "P1=" fonctionne vient obligatoirement de mon badge ?
    Non c'est mon code qui est faux... l'inconvénient de taper cela ici.

    dans la boucle for qui compare la carte lue à celles connues, je mets un "break" pour sortir de la boucle for si j'ai trouvé une carte (puisque ce n'est plus la peine de continuer à chercher) mais je l'ai mis un cran trop loin dans les accolades, ce qui fait que la boucle sortait après avoir testé la première carte... donc normal que seulement la première soit fonctionnelle

    code corrigé cf la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
          break; // <=== METTRE LE BREAK AU BON NIVEAU, DANS LA BOULCE FOR SI ON A TROUVE SEULEMENT
    que j'ai remontée d'un cran


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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;
     
      // l’ID 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
        }
      }
    }


    PS: évitez de poster des images quand vous pouvez juste poster le texte, c'est plus facile à lire sur petit écran (je lis sur mon téléphone)

  14. #14
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2023
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2023
    Messages : 10
    Par défaut
    Impeccable !

    Merci beaucoup pour cette création.
    ça fonctionne à merveille !

    Pour ceux que ça interesse, on trouve des mini étiquette Rfid sur le net qui font la taille du bas de caisse de la voiture en modéle réduit 1/76.
    Reste plus qu'à acheté du bois et beaucoup de mousse expensive pour les décors !

  15. #15
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 884
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 884
    Par défaut
    super

    on attend des photos de la réalisation finale

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Présentation de projet: compteur de points pétanque
    Par DebProg40 dans le forum Arduino
    Réponses: 19
    Dernier message: 11/04/2021, 15h10
  2. Projet lecteur NFC\RFID sur Beagle
    Par kira249 dans le forum Débuter
    Réponses: 14
    Dernier message: 27/03/2018, 15h53
  3. Projet de compteur physique
    Par SuperTechFR dans le forum Arduino
    Réponses: 6
    Dernier message: 28/03/2017, 18h58
  4. Projet BTS Lecteur RFID programme C++
    Par jeje2211 dans le forum C++
    Réponses: 8
    Dernier message: 30/03/2016, 17h14
  5. projet supervision des compteurs énergie avec LABVIEW
    Par xmenoo7 dans le forum LabVIEW
    Réponses: 2
    Dernier message: 22/02/2010, 11h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo