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 :

RFID PN352 Sprintf


Sujet :

Arduino

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2020
    Messages : 2
    Par défaut RFID PN352 Sprintf
    Bonsoir la communauté

    Je réalise actuellement mon projet pour mon bac et j'aimerais avoir une petite aide par rapport à mon programme. (Je ne pense pas être dans la bonne section désolé)

    Alors voilà, je travail avec une carte de développement type Arduino Uno ainsi qu'un shield RFID PN532. Mon problème se trouve au niveau de la fonction "Sprintf".

    Je ne pense pas que ce soir la bonne méthode pour récupérer le caractère sous une chaine, et j'aimerais optimiser la chose.

    Mon programme est le suivant :

    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
    #include <Wire.h>
    #include <SPI.h>
    #include <Adafruit_PN532.h>
     
    // If using the breakout with SPI, define the pins for SPI communication.  //
    #define PN532_SCK  (13)
    #define PN532_MOSI (11)
    #define PN532_SS   (10)
    #define PN532_MISO (12)
     
    Adafruit_PN532 nfc(PN532_SS);
     
    void setup() {
      Serial.begin(115200);  // Ouvre le port série et fixe le debit de communication à 115200 bauds (unité de mesure)        
     
      nfc.begin(); // Démarrage de la communication NFC
      nfc.SAMConfig();
    }
     
    void loop() {
     //lectureBadge();
    //uint32_t cardId = lectureBadge();
    String cardId = lectureBadgeString();
     Serial.println(cardId);
     
     //envoiTag();
    }
     
    Et Voila ma partie renvoie fonction (renvoie numéro ou tag) :
     
    String lectureBadgeString() {
     
      uint8_t success;
      uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 };  // Buffer to store the returned UID
      uint8_t uidLength;                        // Length of the UID (4 or 7 bytes depending on ISO14443A card type)
      char cardIdTableau[8];
      String uidString = "";
     
      success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uidLength);
     
      if (success) {
        sprintf(cardIdTableau, "%x%x%x%x", uid[0], uid[1], uid[2], uid[3]);
      }
     
     
      uidString = cardIdTableau;
     
      return uidString;
    }
    Merci pour votre lumière sur mon programme.

    Bonne soirée.

  2. #2
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 211
    Billets dans le blog
    48
    Par défaut
    Bonjour,

    Si le but dans un premier temps est d'afficher la séquence en hexa :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      for (int i = 0; i < uidLength; i++) {
        Serial.print("0x");
        Serial.print(uid[i], HEX);
        Serial.print("  ");
      }

  3. #3
    Expert confirmé

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

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 921
    Par défaut
    et si le but c'est de conserver en mémoire le N° de série qui a été lu, alors vaut mieux le conserver sous forme de tableau que de créer une chaîne de caractère. ce sera moins gourmand en mémoire et plus exploitable.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    // variable globales
    uint8_t uidDerniereLecture[7] = {0};  // Buffer to store the returned UID
    uint8_t uidDerniereLectureLength; // Length of the UID (4 or 7 bytes depending on ISO14443A card type)
     
    // ... dans la loop ou ailleurs
     
      uint8_t uid[7] = {0};  // Buffer to store the returned UID
      uint8_t uidLength; // Length of the UID (4 or 7 bytes depending on ISO14443A card type)
     
      if (nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uidLength)) {
        uidDerniereLectureLength = uidLength;
        memcpy(uidDerniereLecture, uid, uidLength); // cf http://www.cplusplus.com/reference/cstring/memcpy/
      }
    et pour tester si celui que vous avez lu est égal à un que vous avez pré-défini:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    // constantes globales
    const uint8_t uidSpecial[] = {0xAA, 0xBB, 0xCC, 0xDD};  // notre identifiant de carte, par exemple ici sur 4 octets
    const uint8_t uidSpecialLength = sizeof(uidSpecial); // Length of the UID (4 or 7 bytes)
     
    // ... dans la loop ou ailleurs
      if(uidSpecialLength == uidDerniereLectureLength) { // s'ils ont la même longueur 
        if (memcmp(uidSpecial, uidDerniereLecture, uidSpecialLength) == 0) { // cf http://www.cplusplus.com/reference/cstring/memcmp/
          // on a présenté la bonne carte
          ....
        } else {
          // on a présenté une mauvaise carte
          ....
        }
      }

  4. #4
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2020
    Messages : 2
    Par défaut Thanks
    Merci pour vos réponses, je vais exploiter tout cela et essayé de faire un programme propre et je reviens vers vous !

    Bonne journée

Discussions similaires

  1. Connaitre la taille du résultat de sprintf
    Par gege2061 dans le forum C
    Réponses: 6
    Dernier message: 09/01/2006, 14h56
  2. [Débutant(e)] equivalence de sprintf en JAVA
    Par GuillaumeCorbineau dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 06/09/2005, 19h18
  3. [débutant] equivalent à sprintf pour les std::string
    Par Biosox dans le forum SL & STL
    Réponses: 22
    Dernier message: 26/08/2005, 12h46
  4. pb sprintf
    Par peuf23 dans le forum Langage
    Réponses: 4
    Dernier message: 02/08/2005, 17h46
  5. sprintf : le point devient virgule ?!
    Par jula dans le forum C++
    Réponses: 4
    Dernier message: 17/09/2004, 12h50

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