Problemi con lettore RFID ID-12LA

Salve a tutti, mi chiamo Gabriele e mi sono da pochissimo tuffato nel magico mondo di Arduino.
Premetto che ho scarsissime capacità elettroniche e software, mi sono letto il libro allegato allo starter kit Arduino e fatto i vari progetti del libro. Adesso, però, sono alle prese con un progettino RFID che sto provando a fare seguendo il libro "creare progetti per arduino for Dummies", e sinceramente non è proprio for Dummies.. o per lo meno, secondo me, da per scontate troppe cose che non conosco.

Il problema è questo: ho collegato il lettore con la breakout sparkfun, attaccato alla breadboard - controllato mille mila volte le connessioni e mi sembra che sia tutto ok. Lanciando lo sketch, dal monitor seriale non accade niente quando passo il TAG.

/* Arduino Projects for Dummies
 * by Brock Craft 
 *
 * Chapter 9: Building an RFID Tag Reader
 * A system that Reads and matches RFID tag to trigger a relay
 *
 * v0.1 30.04.2013
 * Adapted from bildr.com
*/


 const int relayPin = 11;      // The pin the relay is connected to
const int ledPin = 12;        // The pin the indicaor LED is connected to
const int RFIDResetPin = 13;  // This pin tells the reader to read again
const int relayOntime = 5000; // The time to leave the relay on, in ms.

// Make a list of your RFID tags here.
// If you don't know them, leave at least one in place as starter
// a starter ID and delete it later. Otherwise the code will break.
// (You always have to have something to compare the read tags to.)

char tag1[13] = "4B00DDBF9FB6";  // Your scanned tag ID goes here
char tag2[13] = "010203AABBCC";  // these are example Iag IDs only
char tag3[13] = "010203AABBDD";  // these are example Iag IDs only
// etc. for more tags

void setup(){
  Serial.begin(9600);               // Start the serial connection to TX/RX data
  pinMode(RFIDResetPin, OUTPUT);    // Tells the reader to start again
  pinMode(ledPin, OUTPUT);          // Set the LED pin to output
 pinMode(relayPin, OUTPUT);          // Set the LED pin to output
  digitalWrite(RFIDResetPin, HIGH); // Make it ready to read
  Serial.println("Ready.");         // Advise the consoe we are ready.
}

void loop(){

  Serial.println("Looking for a tag..."); // Say what we are currently doing
  char tagString[13];      // Create an array to hold the tag we are reading
  int index = 0;           // A utility counter to track where we are in tagstring[]
  boolean reading = false; // Stores whether we have a reading

  while(Serial.available()){  // If there is a serial connection...

    int readByte = Serial.read();      // Read next available byte
    if(readByte == 2) reading = true;  // 2 indicates the begining ofa tag
    if(readByte == 3) reading = false; // 3 indicates the end of tag
    
    // If there is a reading and it's not the beginning or end, store it
    if(reading && readByte != 2 && readByte != 10 && readByte != 13){
     
      tagString[index] = readByte;  // Store the tag at the index point
      index ++;                     // increment where we are in the storage array
    }
  }

  checkTag(tagString); // Check if it is a match
  clearTag(tagString); // Clear the char array of all values
  resetReader();       // Reset the RFID reader

}

void checkTag(char tag[]){

  // Compare this tag to the stored tags
  if(strlen(tag) == 0) return; // If there's nothing here, do nothing

  if(compareTag(tag, tag1)){   // If read tag matches tag1, do this
    lightLED(); 
 // relay non c'è per ora! ****   triggerRelay();
  }
  else if(compareTag(tag, tag2)){ // If read tag matches tag2, do this
    lightLED();                   // You could have any function here!
  }
  else if(compareTag(tag, tag3)){ // If read tag matches tag3, do this
    lightLED();
  } else {                        // If it doesn't match the list of tags...
    Serial.println("New tag found: "); 
    Serial.println(tag);         // Print the tag number of this new tag 
    delay(5000);                 // Wait 5 seconds, so we can make note of it
  }

}

boolean compareTag(char one[], char two[]){
  // Compare our two chars to see whether the tag
  // we just read is the same as the stored tag
  
  if(strlen(one) == 0) return false; // If there's nothing here, do nothing

  for(int i = 0; i < 12; i++){
    if(one[i] != two[i]) return false; // If the two tags are are not the same, return no match
  }
  Serial.println("Valid tag found!");
  return true; // Otherwise, return that there is a match!
}

void lightLED(){
  digitalWrite(ledPin, HIGH);  // Turn on the ledPin
  delay(250);                  // Wait a moment
  digitalWrite(ledPin, LOW);   // Turn off the ledPin
}

void triggerRelay(){
digitalWrite(relayPin, HIGH);  // Turn on the ledPin
delay(relayOntime);            // Wait a moment
digitalWrite(relayPin, LOW);   // Turn off the ledPin
}

void clearTag(char one[]){
  // Clear the tag reading char array by filling it with ASCII 0
  // If not null, it could indicate another tag read
  for(int i = 0; i < strlen(one); i++){
    one[i] = 0; 
  }
} 
  
void resetReader(){
  // Toggle the reset pin so the RFID reader will read again
  digitalWrite(RFIDResetPin, LOW);
  digitalWrite(RFIDResetPin, HIGH);
  delay(150);
}

Edit: ho fatto un test con la scheda RFID USB Reader per capire se in effetti è il lettore che ha un malfunzionamento o meno... funziona! Se passo un tag si accende la spia ed il buzzer emette un leggero suono.

A questo punto la mia domanda è: il lettore Rfid ID-12LA deve essere per forza saldato alla breakout? Ho provato, come consigliato in diversi altri progetti, ad utilizzare i piedini a pettine e quelli maschio/maschio ma in questo modo non funziona niente. Credo che il problema sia proprio nel fatto che il lettore non riesce a collegarsi.. mentre utilizzato la RFID USB reader non ci sono problemi.

Grazie in anticipo a chi saprà aiutarmi!

Saluti.

Buongiorno,
essendo il tuo primo post, nel rispetto del regolamento, ti chiedo cortesemente di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con attenzione il su citato REGOLAMENTO ...

... poi, in conformità al suddetto regolamento, punto 7, edita (in basso a destra del post, bottone More -> Modify) il tuo post e racchiudi il codice all'interno dei tag CODE (... sono quelli che in edit inserisce il bottone fatto così: </>, tutto a sinistra). Grazie.

Guglielmo

Sorry :slight_smile:
Fatto!

Gabriele.

Facci vedere lo schema che stai usando.

Eccolo.
L'unica differenza è che non sto usando il relay, poichè in questa fase non mi serve.

Il pinout del ID-12 lo vedo un po' diverso

Brunello:
Il pinout del ID-12 lo vedo un po' diverso

Cioè? Dici che lo schema riportato nel libro non è corretto?
Sicuramente c'è qualcosa che non permette al lettore di funzionare al meglio, non capisco se non gli arriva proprio corrente o se non restituisce l'output in modo corretto