Go Down

Topic: Rfid RDM6300 (Read 14760 times) previous topic - next topic

pres961

Buona sera ragazzi;
Ho un piccolo problemino in quanto non riesco a trovare l'errore in questo banalissimo sketch:
Code: [Select]

// Serial Library
#include <SoftwareSerial.h>

SoftwareSerial RfidData =  SoftwareSerial(255,2); // Com to Scanner TX's tied together

void setup(){
  Serial.begin(9600);
  RfidData.begin(9600);
}
void loop(){
  Serial.println(RfidData.read());
}

Lo sketch dovrebbe semplicemente stampare su serial monitor il tag letto dalla chiave rfid ma mi stampa solo -1. Come mai?

BaBBuino

Innanzitutto non vedo dichiarati i pin hardware della seriale, ma facciamo finta che da qualche parte li hai messi.

Nella dichiarazione di inizializzazione della seriale c'è scritto: SoftwareSerial RfidData =  SoftwareSerial(255,2)

Ora se è vero come è vero che i parametri di SoftwareSerial() sono i due pin fisici di Arduino, mi domando quale tipo di Arduino abbia 255 pin!!

pres961

Code: [Select]

// Serial Library
#include <SoftwareSerial.h>
int rxPin=2;
int txPin=3;
SoftwareSerial RfidData =  SoftwareSerial(rxPin,txPin); // Com to Scanner TX's tied together

void setup(){
  Serial.begin(9600);
  RfidData.begin(9600);
}
void loop(){
  Serial.println(RfidData.read());
}

Diventerebbe così?

pres961

anche correggendo come riportato nel post sopra il codice continua a stamparmi -1!

BaBBuino

Mancano dei pezzi!

Prova così:

Code: [Select]

#include <SoftwareSerial.h>

//creo una nuova porta seriale via software
SoftwareSerial RfidData =  SoftwareSerial(2, 3);

void setup()  {
//definisco il pin2(RX) come ingresso
pinMode(2, INPUT);
//definisco il pin3(TX) come uscita
pinMode(3, OUTPUT);
//setto la velocita delle seriali  (software e hardware)
RfidData.begin(9600);
Serial.begin(9600);
}

void loop() {

Serial.println(RfidData.read());
delay(500);
}


E aggiungi un Delay a fine ciclo!

pres961

Così mi stampa dei numeri ma quello che io vorrei ottenere è il tag rfid? Tutto questo mi servirebbe perchè se avvicino la chiave giusta si accende un led verde altrimenti un led rosso e scatta un lampeggiante

BaBBuino

Quei numeri sono il TAG dell'RFID!!!

Cosa ti aspettavi? Che uscisse fuori un Signor TAG?  :smiley-roll-blue:

pres961

No ma non mi aspetto dei numeri casuali che cambiano in continuazione

BaBBuino


No ma non mi aspetto dei numeri casuali che cambiano in continuazione


E perchè non l'hai scritto?

Per avere risposte precise dare informazioni precise.

Posta una schermata di questi numeri.

pres961

Code: [Select]
-1
-1
-1
2
48
51
48
48
51
48
65
50
55
56
69
57

Questi sono i numeri

pres961

Code: [Select]
int tag= "030030A278E9";
int pinConvalida=8;
int pinNegato=9;
int confronto;

void setup()
{
  pinMode(pinConvalida,OUTPUT);
  pinMode(pinNegato,OUTPUT);
  Serial.begin(9600);
}
void loop()
{
  if(Serial.available())
  {
    while(Serial.available())
    confronto = Serial.read();
    if(confronto==tag){
      Serial.write("Tag valido");
      digitalWrite(pinNegato,HIGH);
      digitalWrite(pinConvalida,HIGH);
    }
    else{
      if(confronto!=tag){
        Serial.write("Tag non valido"){
          digitalWrite(PinConvalida,LOW);
          digitalWrite(pinNegato,HIGH);
     
  }
}

Sono arrivato a leggere il tag ma ora mi da errore nel codice che ho scritto sopra...

pres961

Aggiornamento ho corretto il  codice come segue:
Code: [Select]
String tag= "030030A278E9";
int pinConvalida=8;
int pinNegato=9;
String confronto;
char avanti = 'c';

void setup()
{
  pinMode(pinConvalida,OUTPUT);
  pinMode(pinNegato,OUTPUT);
  Serial.begin(9600);
}
void loop()
{
  if(Serial.available())
  {
    while(Serial.read()==avanti)
    confronto = (String)Serial.read();
    Serial.println(confronto);
    if(confronto==tag){
      Serial.write("Tag valido");
      digitalWrite(pinNegato,HIGH);
      digitalWrite(pinConvalida,HIGH);
    }
    else{
      if(confronto!=tag){
          Serial.write("Tag non valido");

          digitalWrite(pinConvalida,LOW);
          digitalWrite(pinNegato,HIGH);
     
  }
}
  }
}

ma purtroppo ora dice sempre tag non valido poichè non riceve nessuna stringa dalla lettura. Come mai?

gpb01

pres961 ... spero che tu, con lo statement :

Code: [Select]
confronto = Serial.read();

non ti aspetti che venga letto il TAG completo !!!!  :smiley-eek: :smiley-eek: :smiley-eek:

STUDIATEVELI I REFERENCES !!! Su questo forum sarà stato ripetuto fino alla nausea che la Serial.read() legge UN SINGOLO carattere e che ti devi gestire TU il loop di lettura di tutti i caratteri !!!

Peggio che mai fare il cast che hai fatto nella modifica successiva ... la Serial.read() ritorna UN char e basta !!!

Guglielmo
Search is Your friend ... or I am Your enemy !

gpb01

#13
Jan 17, 2014, 02:26 pm Last Edit: Jan 17, 2014, 02:28 pm by gpb01 Reason: 1

Code: [Select]
-1
-1
-1
2
48
51
48
48
51
48
65
50
55
56
69
57

Questi sono i numeri


Certo, -1 e -1 erano perché non aspettavi la Serial.available() e, se non c'è nulla, la Serial.read() ritorna -1
2, 48,51,48,48,51,48,65,50,55,56,69,57 altro non sono che i caratteri ricevuti, UNO alla volta, stampati in valore decimale, il cui equivalente ASCII è : STX  0 3 0 0 3 0 A 2 7 8 E 9

Guglielmo

P.S. : STX rappresenta 'Start of Text' (0x02) ed è un codice ASCII di controllo flusso dati
Search is Your friend ... or I am Your enemy !

pres961

Cioè non ho ben capito dovrei fare un ciclo che legge carattere per carattere?

Go Up