Go Down

Topic: rfid e led (Read 2405 times) previous topic - next topic

cece99

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)
Il Vero Programmatore non ha bisogno di manuali sull'assembler, sono
  sufficienti i data sheet dei microprocessori.

lucadentella

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
lucadentella.it

cece99

il problema è che non sono molto pratico, qualcuno avrebbe un codice da mandarmi?
Il Vero Programmatore non ha bisogno di manuali sull'assembler, sono
  sufficienti i data sheet dei microprocessori.

lucadentella

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
lucadentella.it

cece99

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 è:
Code: [Select]
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! :~
Il Vero Programmatore non ha bisogno di manuali sull'assembler, sono
  sufficienti i data sheet dei microprocessori.

lucadentella

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  ;)

Code: [Select]
#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;
    }
  }
}
lucadentella.it

cece99

non esageriamo.... ho solo 12 anni  :smiley-mr-green:  :smiley-mr-green:  :smiley-mr-green: !
Il Vero Programmatore non ha bisogno di manuali sull'assembler, sono
  sufficienti i data sheet dei microprocessori.

cece99

mi dispiace ma non funziona!
Il Vero Programmatore non ha bisogno di manuali sull'assembler, sono
  sufficienti i data sheet dei microprocessori.

pitusso

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:
http://bit.ly/ILQr1j

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

cece99

utilizzo un lettore seedstudio che comunica in ttl!
ho già cercato su google ma nulla.
Il Vero Programmatore non ha bisogno di manuali sull'assembler, sono
  sufficienti i data sheet dei microprocessori.

Brunello

ma se modifichi il tuo sketch cosi'

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

sul SerialMonitor appare qualcosa ?


cece99

no, non appare nulla!
Il Vero Programmatore non ha bisogno di manuali sull'assembler, sono
  sufficienti i data sheet dei microprocessori.

Brunello

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.


cece99

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!
Il Vero Programmatore non ha bisogno di manuali sull'assembler, sono
  sufficienti i data sheet dei microprocessori.

lucadentella

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

Code: [Select]
#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;
      }
    }
  }
}
lucadentella.it

Go Up