,

Dependencies:   MFRC522 EEPROM4UID

main.cpp

Committer:
anyela
Date:
2022-01-23
Revision:
0:5e7ab8dedbe3

File content as of revision 0:5e7ab8dedbe3:

///Test of cheap 13.56 Mhz RFID-RC522 module from eBay
//This code is based on Martin Olejar's MFRC522 library. Minimal changes
//Adapted for Nucleo STM32 F401RE. Should work on other Nucleos too


//Connect as follows:
//RFID pins        ->  Nucleo header CN5 (Arduino-compatible header)
//----------------------------------------
//RFID IRQ=pin5    ->   Not used. Leave open
//RFID MISO=pin4   ->   Nucleo SPI_MISO=P12 adaptado para LPC
//RFID MOSI=pin3   ->   Nucleo SPI_MOSI=P11
//RFID SCK=pin2    ->   Nucleo SPI_SCK =P13
//RFID SDA=pin1    ->   Nucleo SPI_CS  =PB_6=D10   // para LPC P9
//RFID RST=pin7    ->   Nucleo         =PA_9=D8    // para LPC p28
//3.3V and Gnd to the respective pins


#include "mbed.h"
#include "MFRC522.h"
#include "EthernetInterface.h"

// Nucleo Pin for MFRC522 reset (pick another D pin if you need D8)
#define MF_RESET    p8


DigitalOut LedGreen(LED1);


//Serial connection to PC for output



//MFRC522    RfChip(SPI_MOSI, SPI_MISO, SPI_SCK, SPI_CS, MF_RESET);
MFRC522    RfChip(p11,p12,p13,p9, MF_RESET);

//********************************************************************


struct node {
    uint8_t data1;
    uint8_t data2;
    uint8_t data3;
    uint8_t data4;
    struct node *next;
};

// Se crean las estructuras front, rear y temp
struct node* front = NULL; // el puntento front de la estructura front se igual a null
struct node* rear = NULL;
struct node* temp; // nodo temporal
struct node* aux; // nodo auxiliar


void Insert(uint8_t val1, uint8_t val2, uint8_t val3, uint8_t val4)
{
    if (rear == NULL) {
        rear = new node; // se crea el nodo rear
        rear->next = NULL; // la direccion del siguiente nodo es a null 
        rear->data1 = val1; // se agregan los datos 
        rear->data2 = val2;
        rear->data3 = val3;
        rear->data4 = val4;
        front = rear; // se igual punto front a rear 
    }
    else{    
        aux = front;
        while (aux!= NULL) {
          if ((aux->data1==val1) && (aux->data2==val2) && (aux->data3==val3) &&(aux->data4==val4)){
              printf("ID already inserted \n\r");
              return;
          }
        temp = temp->next; 
       }
            
        temp=new node;
        rear->next = temp;
        temp->data1 = val1;
        temp->data2 = val2;
        temp->data3 = val3;
        temp->data4 = val4;
        temp->next = NULL;
        rear = temp;    
     }
}

void Display() {
 
    temp = front;
    if ((front == NULL) && (rear == NULL)) {
        printf("Queue is empty");
    return;
       }
    while (temp != NULL) {
        printf("Queue:\n");
        printf(" %02X ",temp->data1);
        printf(" %02X ",temp->data2);
        printf(" %02X ",temp->data3);
        printf(" %02X ",temp->data4);
        printf("\n");
        temp = temp->next;
        
       }
}


uint32_t UID[4]; 
EthernetInterface net;

int main(void)
{
    // Bring up the ethernet interface
    printf("Ethernet socket example\n");
    net.connect();

    // Show the network address
    SocketAddress a;
    net.get_ip_address(&a);
    printf("IP address: %s\n", a.get_ip_address() ? a.get_ip_address() : "None");

    // Open a socket on the network interface, and create a TCP connection to mbed.org
    TCPSocket socket;
    socket.open(&net);
    a="192.168.0.11";

    //net.gethostbyname("ifconfig.io", &a);
    a.set_port(80);
    socket.connect(a);
    
    
    printf("starting...\n");

    // Init. RC522 Chip
    RfChip.PCD_Init();

    while (true) {

        LedGreen = 1;

        // Look for new cards
        if ( ! RfChip.PICC_IsNewCardPresent()) {
            //wait_ms(500);
            ThisThread::sleep_for(500ms);
            continue;
        }

        // Select one of the cards
        if ( ! RfChip.PICC_ReadCardSerial()) {
            //wait_ms(500);
            ThisThread::sleep_for(500ms);
            continue;
        }

        LedGreen = 0;

        printf("New card UID to add: ");
        for (uint8_t i = 0; i < RfChip.uid.size; i++) {
            printf(" %02X",RfChip.uid.uidByte[i]);
            UID[i]=RfChip.uid.uidByte[i];
        }
        printf("\n\r");
        
        
        uint8_t a,b,c,d;
        a=RfChip.uid.uidByte[0];
        b=RfChip.uid.uidByte[1];
        c=RfChip.uid.uidByte[2];
        d=RfChip.uid.uidByte[3];
        Insert(a,b,c,d);
        Display(); 
        
        // Send a simple http request
        //char sbuffer[] = "Hola";
        //char sbuffer[] = "GET / HTTP/1.1\r\nHost: ifconfig.io\r\n\r\n";
        int scount = socket.send(UID,4);
        printf("sent %d [%p]\n",scount,UID);

        // Recieve a simple http response and print out the response line
        //char rbuffer[64];
        //int rcount = socket.recv(rbuffer, sizeof rbuffer);
        //printf("recv %d [%.*s]\n", rcount, strstr(rbuffer, "\r\n") - rbuffer, rbuffer);

        // Close the socket to return its memory and bring down the network interface
        //socket.close();

        // Bring down the ethernet interface
        //net.disconnect();
        printf("Done\n");
    }

}

//algoritmo de busqueda que encuentre un UID;

void print_dtb(UID* dtb,uint16_t N){
    for(int i=0; i<N; i++){
        for(int j=0; j<4;j++)
        printf("%02x ",dtb.bytes[j]);
        printf("\n");
        }
    }


void EEPROM4UID::updt_nuid(NUID num){ // parea actualizar los uids de la memoria
    uint8_t initUIDnum[]={num ->uid_hl[0],'\n'};
    writeStr_EEPROM(0x0000,initUIDnum);
    }