rfid e led

salve a tutti, sarei interessato ad accendere dei led alla lettura di un tag rfid.
L' id del tag viene inviato via seriale, ma il programma che ho fatto non riesce a fare nulla perchè è in grado di intercettare un solo carattere sulla seriale, qualcuno potrebbe consigliarmi un codice per fare questo?
(L' id di un tag è alfanumerico e composto da 10 caratteri)

Ciao

premesso che senza vedere il tuo codice è difficile... comunque:

  • crei un array di char dove andrai a salvare i vari caratteri letti dalla seriale
  • quando avrai letto 10 caratteri farai un confronto tra il valore nel tuo array e quello che ti aspetti

il problema è che non sono molto pratico, qualcuno avrebbe un codice da mandarmi?

ciao

è impossibile mandarti un codice "pronto" senza neppure sapere come hai attaccato il lettore rfid, quale hardware hai, qual'è il codice "valido", a che pin hai collegato il led... inizia a postare quanto hai già scritto così possiamo sistemarlo insieme

certo! scusa se non ti ho dato tutte le informazioni.
Allora: il tx del lettore l'ho collegato all' rx di arduino e l'alimentazione del lettore collegata al gnd e +5v di arduino, uso un arduino uno e un mac con leopard e arduino ide 1.0 oppure 0022.
Il codice è:

int Led=12;

int incomingByte;  



void setup()

{

 pinMode(Led, OUTPUT);

 Serial.begin(9600);

}



void loop()

{

 if (Serial.available() > 0) {

   incomingByte = Serial.read();

 if (incomingByte == 'id della card') {

 digitalWrite(Led, HIGH);

                             }

                           }  

   if (incomingByte == ' id della card') {

    digitalWrite(Led, LOW);

   }

 }

Il problema e che non funziona nulla! :~

l'ho scritto al volo... compila ma non ho sottomano un arduino per provarlo... prima di collegare il lettore rfid prova con il serial monitor inviando tu il codice che ti aspetti corretto... e mi aspetto che mi spieghi come funziona :wink:

#define LED 12
#define BUFFER_SIZE 11

const char* RFID_ID = "XXXXXXXXXX";
char buffer[BUFFER_SIZE];
byte buffer_position;
int output_state;

void setup() {
  
  pinMode(LED, OUTPUT);
  output_state = LOW;
  digitalWrite(LED, output_state);
  Serial.begin(9600);
  buffer_position = 0;
}

void loop() {

  if(Serial.available() != 0) {
    
    byte rx_byte = Serial.read();
    if(buffer_position < BUFFER_SIZE - 2) {
      buffer[buffer_position] = rx_byte;
      buffer_position++;
    } else {
      buffer[0] = rx_byte;
      buffer_position = 1;
    }
    
    if(buffer_position == BUFFER_SIZE - 1) {
      
      buffer[buffer_position] = '\0';
      if(strcmp(buffer, RFID_ID) == 0) {
        if(output_state == LOW) output_state = HIGH;
        else output_state = LOW;
        digitalWrite(LED, output_state);
      }
      buffer_position = 0;
    }
  }
}

non esageriamo.... ho solo 12 anni :grin: :grin: :grin: !

mi dispiace ma non funziona!

Ciao cece99,
io di solito quando ho qualcosa sotto mano, e non so proprio da che parte prenderlo, per prima cosa faccio una ricerca con google:

Vedrai che troverai molti progetti completi, a disposizione.
CHe hw stai utilizzando (parlo del lettore rfid)?

utilizzo un lettore seedstudio che comunica in ttl!
ho già cercato su google ma nulla.

ma se modifichi il tuo sketch cosi'

void loop() {
if (Serial.available() > 0) {
incomingByte = Serial.read();
Serial.print(incomingByte,DEC);
}
}

sul SerialMonitor appare qualcosa ?

no, non appare nulla!

Allora, presupposto che il Reader RFID funzioni, che sia alimentato alla tensione giusta, che il TAG sia della stessa frequenza, che il Baudrate sia identico, che...... etc etc etc

c'e' un problema di collegamenti.

Ma probabilmente il problema e' una delle cose appena menzionate.

impossibile: ho caricato uno sketch che mostra il numero del tag e funziona tutto: mi mostra l' id!
i tag e il reader sono a 125 khz!

ok c'erano un paio di errori, questo va provato inserendo via serial monitor 'XXXXXXXXXX' mi cambia lo stato del led sulla porta 6...

#define LED 6
#define BUFFER_SIZE 11

const char* RFID_ID = "XXXXXXXXXX";
char buffer[BUFFER_SIZE];
byte buffer_position;
int output_state;

void setup() {
  
  pinMode(LED, OUTPUT);
  output_state = LOW;
  digitalWrite(LED, output_state);
  Serial.begin(9600);
  buffer_position = 0;
}

void loop() {

  if(Serial.available() != 0) {
    
    byte rx_byte = Serial.read();
    if(buffer_position < BUFFER_SIZE - 1) {
      buffer[buffer_position] = rx_byte;
      buffer_position++;
      if(buffer_position == BUFFER_SIZE - 1) {
        buffer[buffer_position] = '\0';
        if(strcmp(buffer, RFID_ID) == 0) {
          if(output_state == LOW) output_state = HIGH;
          else output_state = LOW;
          digitalWrite(LED, output_state);
        }
        buffer_position = 0;
      }
    }
  }
}

METTENDO LE "X" va, ma mettendo l'id nn funzia!

hai cambiato vero

const char* RFID_ID = "XXXXXXXXXX";

inserendo al posto delle X l'ID del tuo tag?

certo!!!

e se digiti da terminale seriale il tuo ID invece che XXX non va? :astonished:

no =( :astonished: =(