Its a code of W7500 board for the vending machine to vend an item to the user within the organization. When the user is identified with the help of the RFID reader and when the user choose the item . the data is sent serially to WIZ750SR and the item is vended . The LCD displays the details of the transaction.

Dependencies:   HCSR04 MFRC522 TextLCD mbed-src

Fork of RFID_copy by Rajib Kumer Dey

main.cpp

Committer:
Rajib
Date:
2018-06-07
Revision:
0:1fdb07d055b9
Child:
1:6cd395827886

File content as of revision 0:1fdb07d055b9:

//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=PA_6=D12
//RFID MOSI=pin3   ->   Nucleo SPI_MOSI=PA_7=D11
//RFID SCK=pin2    ->   Nucleo SPI_SCK =PA_5=D13
//RFID SDA=pin1    ->   Nucleo SPI_CS  =PB_6=D10
//RFID RST=pin7    ->   Nucleo         =PA_9=D8
//3.3V and Gnd to the respective pins                              
                              
#include "mbed.h"
#include "MFRC522.h"
#include "SPI.h"
#include "MQTTEthernet.h"
#include "MQTTClient.h"

#define ECHO_SERVER_PORT   7
 
// Nucleo Pin for MFRC522 reset (pick another D pin if you need D8)
//#define MF_RESET    D8
 
#define SPI_MOSI D11
#define SPI_MISO D12
#define SPI_SCK D13
#define SPI_CS D10
#define MF_RESET D9
DigitalOut l1(D4);
DigitalOut l2(D5);
DigitalOut LedGreen(LED1);
 
//Serial connection to PC for output
//Serial pc(USBTX, USBRX);
 
MFRC522    RfChip   (SPI_MOSI, SPI_MISO, SPI_SCK, SPI_CS, MF_RESET);
 
int main(void) {
    //pc.printf("starting...\n");
    
    Serial pc(USBTX, USBRX);
    pc.baud(115200);
    printf("Wait a second...\r\n");
    char* topic = "openhab/parents/command";
    MQTTEthernet ipstack = MQTTEthernet();
    
    MQTT::Client<MQTTEthernet, Countdown> client = MQTT::Client<MQTTEthernet, Countdown>(ipstack);
    
    char* hostname = "172.16.73.4";
    int port = 1883;
    
    int rc = ipstack.connect(hostname, port);
    if (rc != 0)
        printf("rc from TCP connect is %d\n", rc);
        
    printf("Topic: %s\r\n",topic);
    
    MQTTPacket_connectData data = MQTTPacket_connectData_initializer;       
    data.MQTTVersion = 3;
    data.clientID.cstring = "parents";

    if ((rc = client.connect(data)) == 0)
        printf("rc from MQTT connect is %d\n", rc);
 
  //Init. RC522 Chip
  RfChip.PCD_Init();
 
  while (true) {
    //LedGreen = 1;
    pc.printf("enterd loop...\n");
    // Look for new cards
    if ( ! RfChip.PICC_IsNewCardPresent())
    {
      wait_ms(500);
      continue;
    }
 
    // Select one of the cards
    if ( ! RfChip.PICC_ReadCardSerial())
    {
      wait_ms(500);
      continue;
    }
 
    //LedGreen = 0;
    char data[20]="";
    char data1[20]="";
    
    // Print Card UID
    pc.printf("Card UID: ");
    printf("Size of UID: %d \n",RfChip.uid.size);
    for (uint8_t i = 0; i < RfChip.uid.size; i++)
    {
      char temp[5];
      pc.printf(" %X02", RfChip.uid.uidByte[i]);
      sprintf(temp,"%X02", RfChip.uid.uidByte[i]);
      strcat(data,temp);
    }
    
    /*    
    pc.printf("\n\r");
    printf("%s\n\r",data);
    */
 
    // Print Card type
    uint8_t piccType = RfChip.PICC_GetType(RfChip.uid.sak);
    pc.printf(" \nPICC Type: %s \n\r", RfChip.PICC_GetTypeName(piccType));
    wait_ms(1000);
    
    if(strcmp(data,"5C02820285024502")==0)
    {   
        strcat(data1,"fruits");
    }
    if(strcmp(data,"B3026802A002202")==0)
    {
        strcat(data1,"vegatables");
    }
    if(strcmp(data,"F2029C02AC021F02")==0)
    {
        strcat(data1,"milk");
    
    MQTT::Message message;
    char buf[100];
    sprintf(buf, "%s", data1);
    message.qos = MQTT::QOS0;
    message.retained = false;
    message.dup = false;
    message.payload = (void*)data1;
    message.payloadlen = strlen(data1);
    rc = client.publish("grocery", message); 
    client.yield(60000);
    memset(data1, '\0',sizeof(data1)); 
  }
}
}