bonjour a tous
je suis actuellement sur un nouveau projet mais biensur il y a toujours un truc qui ne fonctionne pas dont je ne trouve pas la solution du coup je vous sollicite afin de m aiguiller.
en fait mon projet se résume simplement je cherche à faire une machine à état avec des lecteurs RFID.
j ai deux lecteurs (ou plus ) et deux tag. Chaque tag a son lecteur et doivent être lu dans le bon ordre.
en gros le lecteur n°1 doit lire le tag n°1, une fois cela fait la machine état passe a l’étape suivante c'est à dire lire avec le lecteur n°2 le tag n° 2 etc....
j'ai donc fouiné sur le net afin de trouver quelque idées et de m en inspirer.
voici le code que j ai taper:
/*
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN1 8
#define RST_PIN 9
#define SS_PIN2 10
#define nombre_de_lecteurs 2
byte ssPins[]={SS_PIN1, SS_PIN2};
MFRC522 rfid[nombre_de_lecteurs];
#define PIN_LED_VERTE 4
#define PIN_LED_ROUGE 3
// liste clés valides
String motdepass[]={"35 ee e2 bb","f1 1f 35 83"};
enum code{etape1,etape2,etape3};
int etatCode=etape1;
void setup() {
Serial.begin(57600);
SPI.begin(); // Init SPI bus
// Init MFRC522
for (uint8_t y = 0; y < nombre_de_lecteurs; y++) {
rfid[y].PCD_Init(ssPins[y], RST_PIN);
Serial.print(F("Lecteur "));
Serial.print(y);
Serial.print(F(": "));
rfid[y].PCD_DumpVersionToSerial();
pinMode(PIN_LED_VERTE,OUTPUT);
pinMode(PIN_LED_ROUGE,OUTPUT);
// led eteintes a l'init
digitalWrite(PIN_LED_VERTE,LOW);
digitalWrite(PIN_LED_ROUGE,LOW);
}
}
void loop() {
switch (etatCode){
case etape1:
// Si on ne detecte pas une carte on reboucle au debut
if ( ! rfid[0].PICC_IsNewCardPresent())
return;
// as t'on lu la carte
if ( ! rfid[0].PICC_ReadCardSerial())
return;
// recuperation de l'UID et concaténation de sa valeur en hex dans un string
String lecture=String(rfid.uid.uidByte[0],HEX) + " " + String(rfid.uid.uidByte[1],HEX) + " " + String(rfid.uid.uidByte[2],HEX) + " " + String(rfid.uid.uidByte[3],HEX);
// j'affiche la valeur de la carte sur le serial
Serial.println(myKey);
// Halt PICC, fin de lecture de carte
rfid.PICC_HaltA();
// Stop encryption on PCD
rfid.PCD_StopCrypto1();
if(motdepass[0] == lecture){
Serial.println("passage etape2");
etatCode=etape2;
}
else{etatCode=etape1;}
delay(100);
break;
case etape2:
// Si on ne detecte pas une carte on reboucle au debut
if ( ! rfid[1].PICC_IsNewCardPresent())
return;
// as t'on lu la carte
if ( ! rfid[1].PICC_ReadCardSerial())
return;
// recuperation de l'UID et concaténation de sa valeur en hex dans un string
String lecture=String(rfid.uid.uidByte[0],HEX) + " " + String(rfid.uid.uidByte[1],HEX) + " " + String(rfid.uid.uidByte[2],HEX) + " " + String(rfid.uid.uidByte[3],HEX);
// j'affiche la valeur de la carte sur le serial
Serial.println(myKey);
// Halt PICC, fin de lecture de carte
rfid.PICC_HaltA();
// Stop encryption on PCD
rfid.PCD_StopCrypto1();
if(motdepass[1] == lecture){
Serial.println("passage etape3");
etatCode=etape3;
}
else{etatCode=etape2;}
delay(100);
break;
case etape3:
digitalWrite(PIN_LED_VERTE,HIGH);
Serial.println("accesok");
delay(100);
etatCode=etape1;
break;
}
}
le souci est le suivant,une erreur de compilation se produit et je suis incapable de trouver la solution alors que j ai bien vérifié ma syntaxe à plusieurs reprise par rapport a l exemple du net qui lui fonctionne et ne me fait pas cette erreur.
l'erreur est la suivante :
"exit status 1
request for member 'uid' in 'rfid', which is of non-class type 'MFRC522 [2]"
si une ame charitable voudrait bien me mettre sur la voie j'en serais ravie
merci d'avance amis "arduinologue"