Soy bastante nuevo en electrónica y he estado jugando con este Arduino UNO w / WiFi Shield y el Parallax RFID R / W Module.
Enlace al módulo RFID: enlace
Enlace a su hoja de datos: enlace
Por lo tanto, actualmente he estado usando el código que he encontrado en el Arduino Playground, que he adaptado.
Namely: http://playground.arduino.cc/Learning/ParallaxRFIDreadwritemodule
Also: http://playground.arduino.cc/Learning/PRFID
(Este último es el módulo anterior de sólo lectura, pero resultó útil debido a la verificación de errores involucrada).
Objetivo: Para poder leer una etiqueta, almacenar con éxito en una matriz de caracteres, o lo que sea más apropiado, sería preferible el formato de bytes para no perder ningún número más pequeño cuando se convierte a DEC. También necesito que el valor de la matriz se asigne a otro valor para que la matriz se pueda vaciar por la presencia de otra tarjeta.
Tengo un programa de semi-trabajo, sin embargo, el monitor de serie muestra basura
Initialised Serial Port at 9600bps
Initialising SD card...
SD card initialisation done.
Nothing to clear on SD card.
Code is: üÖ©ÿÿÿÿÿÿ
Code is: üºÿÿÿÿÿÿ
Tengo la sensación de que tiene que ver con un bit de detención después de que se haya llenado la matriz, pero no puedo estar seguro. Estoy 100% seguro de que mi monitor Serial está configurado en baudios correctos 9600.
Código:
#include <SoftwareSerial.h> // SoftwareSerial to power the serial communications;
/** End inclusion of libraries
*/
#define RFID_READ 0x01 // Enable READ
#define RFID_WRITE 0x02 // Enable WRITE
#define ERR_OK 0x01 // Error checking
#define STOP_BYTE 0x0D // last byte recieved from a tag
#define CODE_LEN 11 // length of code
#define TERMINATOR 0x00
#define txPin 6 // Enable digital pin 6
#define rxPin 8 // Enable digital pin 8
#define readMemorySector 32 // Define variable for accessing various memory sectors on a card
// Initialise SoftwareSerial to input and output pins for mySerial
SoftwareSerial mySerial(rxPin, txPin);
//int val; // Buffer to store value when reading from a card, before printing to the serial monitor
int runs = 0; // Run counter
char code[CODE_LEN];
int bytes_read = 0;
void setupRFIDREAD()
{
/** Set up RFID READ
*/
mySerial.begin(9600); // initialises the rxPin and txPin using mySerial
pinMode(txPin, OUTPUT); // defines txPin as OUTPUT
pinMode(rxPin, INPUT); // defines rxPIN as INPUT
//digitalWrite(6, LOW); // Enable reader
/** Set up SD Card
*/
Serial.println(F("Initialising SD card...")); // Initialising SD Card
pinMode(10, OUTPUT); //Initialises the sdPin as an output, even if it's not used
digitalWrite(10, HIGH); // Disable WiFi SPI link before starting the SD cards as both use the same SPI Bus
if (!SD.begin(4)) { // see if the card is present and can be initialized:
Serial.println(F("initialisation failed, card faulty or not present!"));
return; // don't do anything more
}
Serial.println(F("SD card initialisation done."));
//clear the SD card
if (SD.exists("test.txt")) {
SD.remove("test.txt");
Serial.println(F("SD card cleared."));
} else {
Serial.println(F("Nothing to clear on SD card."));
return;
}
}
void loopRFIDREAD()
{
int val;
mySerial.print("!RW"); //To communicate with the RFID Read/Write Module, the user must first send a three-byte header string of !RW (in ASCII), followed by the desired single-byte command (in hexadecimal).
mySerial.write(byte(RFID_READ)); //Initiates the read function.
mySerial.write(byte(readMemorySector)); // Indicates which memorySector is to be read. In this case 32 which is the unique identifier.
if(mySerial.available() > 0) {
if((val = mySerial.read()) == ERR_OK){
bytes_read = 0;
while(bytes_read < CODE_LEN) {
if(mySerial.available() > 0) {
val = mySerial.read();
if(( val == ERR_OK) || (val == STOP_BYTE))
break;
code[bytes_read] = val;
bytes_read++;
}
}
if(bytes_read == CODE_LEN) {
Serial.print("Code is: ");
Serial.println(code);
}
bytes_read = 0;
digitalWrite(6, HIGH); // Disable reader as not to flood it
// Delay 750 milliseconds before next read and print cycle
delay(750);
digitalWrite(6, LOW); // Enable reader
}
}
}
Ignore la funcionalidad de la tarjeta SD que se usa para otra parte del programa.
Como puede ver, he cambiado el código drásticamente del código proporcionado en el patio de recreo para este módulo de R / W, ya que el código se repite sin ninguna verificación y hace que sea muy difícil controlar la salida. Por lo tanto, combiné el código de la versión anterior del lector.
Entonces, el objetivo final es poder leer y almacenar la ID de un fob en esta matriz de caracteres, que luego se consultará en un servidor web para obtener datos adicionales.
Espero que pueda ayudar, si necesita más detalles, pregunte.