Hola Chicos/as.
OJO ! NOVATO
Estoy inmerso en un nuevo proyecto para control de stock con RFID. Utilizo un UNO, RFID-RC522 y cada producto llevará un TAG RFID adhesivo oculto.
Ya tengo el boceto funcionando para leer los TAGS en decimal y me los muestra en lcd y serial. He ido encontrando codigos y he modificado para mis intereses. Falta perfeccionarlo y añadir funciones.
Ahora estoy con la parte de escribir numero de UID en cada TAG para empezar de 0 e ir escribiendo el siguiente numero en el siguiente TAG que se acerque al RC522.
Tengo ya un código donde escribes qué UID quieres y lo graba. De hecho muestra el UID actual y el nuevo. Si paso varios tags uno tras otro, escribirá el mismo numero que está definido en el código, en todos los tags.
Lo que me gustaría es que cada vez que acerco un nuevo tag, escriba el numero siguiente...(+1)
En el codigo se define el numero a escribir en HEX, aunque para mostrarlo en serial o lcd, he modificado a DEC que es más operativo para el stock.
El problema principal es que el UID se compone de 4 números HEX que muestra por separado. No sé como decirle que sume al ultimo +1.
Por ejemplo 0xDE, 0xB1, 0xFA, 0x07. ¿ Como sumo +1 al 07(hex) para que se refleje esa suma en el numero total Decimal.
Alguien podría sugerirme como decirle al código que sume +1 cada vez que acerco una tarjeta ??
Estos son los códigos de lectura y de escritura con el que tengo la duda:
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10
#define RST_PIN 9
#include <LiquidCrystal_I2C.h>
MFRC522 mfrc522(SS_PIN, RST_PIN);
LiquidCrystal_I2C lcd(0x27,20,4); // set the LCD address to 0x27 for a 16 chars and 2 line display
void setup()
{
Serial.begin(9600); // Initialize serial communications with the PC
while (!Serial); // Do nothing if no serial port is opened (added for Arduinos based on ATMEGA32U4)
pinMode(3, OUTPUT);//buzzer
SPI.begin();
mfrc522.PCD_Init();
mfrc522.PCD_SetAntennaGain(mfrc522.RxGain_max);
Serial.println("Esperando UID: ");
lcd.init();
lcd.backlight();
lcd.setCursor(1,0);
lcd.print("Aproxime una Tarjeta");
}
void loop()
{
if ( ! mfrc522.PICC_IsNewCardPresent())
{
return;
}
if ( ! mfrc522.PICC_ReadCardSerial())
{
return;
}
lcd.clear();
lcd.setCursor(1,0);
lcd.print("UID tag :");
String content= "";
byte letter;
for (byte i = 0; i < mfrc522.uid.size; i++)
{
content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? "0" : ""));
content.concat(String(mfrc522.uid.uidByte[i], DEC));
}
digitalWrite(3, HIGH);//Al detectar RFID 13,56 MHz suena buzzer
delay(50);
digitalWrite (3, LOW);
delay(50);
digitalWrite(3, HIGH);
delay(50);
digitalWrite (3, LOW);
lcd.clear();
lcd.setCursor(1,1);
lcd.print("UID: ");
lcd.setCursor(1,2);
lcd.print(content);
content.toUpperCase();
Serial.print("Card UID: ");
Serial.println(content);
delay(1000);
}
Este el de escritura:
//Conexiones de RFID-RC522 para UNO:
// 3,3V -> 3,3V
// GND -> GND
// SDA(SS) -> 10
// SCK -> 13
// MOSI -> 11
// MOSOI -> 12
// RST -> 9
#include <SPI.h>
#include <MFRC522.h>
#define RST_PIN 9 // Configurable, see typical pin layout above
#define SS_PIN 10 // Configurable, see typical pin layout above
MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance
#define NEW_UID {0xDE, 0xB1, 0xFA, 0x07}// Set your new UID here!
MFRC522::MIFARE_Key key;
void setup() {
Serial.begin(9600); // Initialize serial communications with the PC
while (!Serial); // Do nothing if no serial port is opened (added for Arduinos based on ATMEGA32U4)
SPI.begin(); // Init SPI bus
mfrc522.PCD_Init(); // Init MFRC522 card
Serial.println(F("Atención, cuando acerque el TAG al lector, se programará el nuevo UID!"));
// Prepare key - all keys are set to FFFFFFFFFFFFh at chip delivery from the factory.
for (byte i = 0; i < 6; i++) {
key.keyByte[i] = 0xFF;
}
}
void loop() {
// Reset the loop if no new card present on the sensor/reader. This saves the entire process when idle. And if present, select one.
if ( ! mfrc522.PICC_IsNewCardPresent() || ! mfrc522.PICC_ReadCardSerial() ) {
delay(50);
return;
}
Serial.print(F("UID: "));
for (byte i = 0; i < mfrc522.uid.size; i++) {
Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
Serial.print(mfrc522.uid.uidByte[i], DEC);
}
Serial.println();
// Set new UID
byte newUid[] = NEW_UID;
if ( mfrc522.MIFARE_SetUid(newUid, (byte)4, true) ) {
}
// Halt PICC and re-select it so DumpToSerial doesn't get confused
mfrc522.PICC_HaltA();
if ( ! mfrc522.PICC_IsNewCardPresent() || ! mfrc522.PICC_ReadCardSerial() ) {
return;
}
delay(2000);
}
Gracias de antemano...
Feliz año nuevo a todo el foro.