Bonjour, et oui c'est toujours plus sympa la politesse lesept (et sache que comme déjà dis et redis, tout fonctionne je n'ai aucun souci de lecture ou de liaison série...)
Je lis beaucoup d'incompréhension dans vos réponses, je vais poster une partie de mon code Arduino et app C#, j'ai bien compris que vous ne saisissez pas du tout ce que je souhaite. Je l'avais portant clairement exprimé dès mon 1er post.
Mon code fonctionne, il n'y a aucun souci de ce coté là Artouste, mais je suis obligé de retirer mon NTAG pour le relire et ça ! je ne le souhaite pas et pour te répondre j'utilise bien la fonction Halt.
// j’utilise une librairie développée en C++ pour envoyer des commandes à mon code C# --> SCmd.addCommand
void loop()
{
SCmd.readSerial();
}
void setup()
{
Serial.begin(115200);
SPI.begin();
mfrc522.PCD_Init();
SCmd.addCommand("/CONNECTION", IsConnected); // j'envoie la commande à mon code C# que l'Arduino est bien connecté !
SCmd.addCommand("/NTAG_IS_PRESENT", NTAG_IS_PRESENT); // j'envoie la commande à mon code C# que le NTAG est bien détecté !
SCmd.addCommand("/GET_NTAG_UID", NTAG_UID); // j'envoie la commande à mon code C# Pour lire le UID
SCmd.addCommand("/NTAG_HALT", NTAG_Halt); // j'envoie la commande à mon code C# je "coupe le flux PICC"
SCmd.addCommand("/NTAG_READ", Read); // j'envoie la commande à mon code C# je lis ...
}
void IsConnected()
{
Serial.print(Begin);
Serial.print("START");
Serial.print(End);
}
void NTAG_Halt()
{
mfrc522.PICC_HaltA(); // Halt PICC
mfrc522.PCD_StopCrypto1();
Serial.print(Begin);
Serial.print("HALT");
Serial.print(End);
}
void NTAG_Here()
{
Serial.print(Begin);
if (mfrc522.PICC_IsNewCardPresent() || mfrc522.PICC_ReadCardSerial())
{
Serial.print("YES");
}
else
Serial.print("NO");
Serial.print(End);
}
Bon, maintenant que le décor est posé et que tout est très clair, quand mon code Arduino envoi autre chose que "YES", donc un "TIMEOUT" ou un "NO" je ne peux plus re lire directement sans fermer mon application(assez problématique et brutale), et je ne souhaite pas ce genre de comportement.
maintenant le traitement de mes commandes coté C#:
// Traitement des messages reçus de l'Arduino
private bool NTAG_IS_PRESENT()
{
string NTAG_Here = arduino.SendCommand("/NTAG_IS_PRESENT"); // Conserve la référence mémoire
if (NTAG_Here == "YES")
{
return true;
}
else
{
return false;
}
}
Et pour clorurer le flux après une action lecture ou écriture:
//exit
arduino.Close();
arduino.SendCommand("/NTAG_HALT");
et cette méthode renvoi donc ... un boolean pour vérifier avant chaque traitement de lecture/écriture.
Mais quand je lis une fois ! donc si le test est true, je ne peux plus relire etc
Mon code me parait relativement simple et morcelé pour un meilleur débogage.
Merci pour votre écoute et de prendre le temps de l’analyse ![]()
Edit:
j’ai déjà utilisé ce genre de code avec un RC532 Adafruit en SPI comme en I2C et je pouvais très bien lire le même tag sans jamais le retiré du lecteur ...