แก้ให้แล้ว

Dependencies:   NOKIA_5110 mbed

Fork of Lost-Found_BOX by FRA221:A

main.cpp

Committer:
kantapon501
Date:
2015-12-07
Revision:
5:8e3bd2501b17
Parent:
4:75346bd905c0
Child:
6:6635082215c7

File content as of revision 5:8e3bd2501b17:

//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 SlaveSelect
//RFID RST=pin7    ->   Nucleo         =PA_9=D8
//3.3V and Gnd to the respective pins                                                           
#include "mbed.h"
#include "MFRC522.h"
#include "NOKIA_5110.h" // Nucleo Pin for MFRC522 reset (pick another D pin if you need D8)
#define MF_RESET    D9
#include "speaker.h"
DigitalOut LedGreen(LED1);
DigitalOut spi_address[2] = {SPI_CS,PB_4};
//Serial connection to PC for output
Serial pc(SERIAL_TX, SERIAL_RX);
Speakers speak(D3);
DigitalOut lock(PB_13);
MFRC522    RfChip   (SPI_MOSI, SPI_MISO, SPI_SCK, SPI_CS, MF_RESET);

void GetID(uint8_t ID[])
{
    for (uint8_t i = 0; i < RfChip.uid.size; i++)
    {
      ID[i] = RfChip.uid.uidByte[i];
    };  
}
uint8_t check(uint8_t ID[])
{
    uint8_t x=0;
    for(uint8_t i = 0; i < RfChip.uid.size; i++)
    {
        if(ID[i] == RfChip.uid.uidByte[i]){ x = x+1;}
    }
    if(x == RfChip.uid.size){return 1;}
    else {return 0;}
}
int main(void) {
    pc.baud(115200);
    uint8_t RFID[10];
    int checker = 0;
    int checks = 0;
    LcdPins myPins;      
    myPins.sce  = PB_4;  //D5 ActiveLow SlaveSelect
    myPins.rst  = PB_10; //D6
    myPins.dc   = PA_8;  //D7
    myPins.mosi = PA_7;  //SPI_MOSI;
    myPins.miso = NC;
    myPins.sclk = PA_5; //SPI_SCK;    
    NokiaLcd myLcd( myPins );
 
    myLcd.InitLcd();                // LCD is reset and DDRAM is cleared
    myLcd.DrawString("Welcome");   
    myLcd.stop();
    
    //RfChip.start();
    pc.printf("starting...\n");
    // Init. RC522 Chip
    RfChip.PCD_Init();
    pc.printf("Begin RFID!\n");
    while (true) {
    LedGreen = 1;
    // 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;
    myLcd.InitLcd();               
    myLcd.DrawString("Ready");   
    myLcd.stop();
    checker = check(RFID);    
    if(checks == 1)
        {
            if (checker == 1)
            {
                pc.printf("Right\n");
                myLcd.InitLcd();               
                myLcd.DrawString("Right"); 
                myLcd.stop();
                checks = 0;
                speak.speakRight();
                continue;
            }
            else
            {
                pc.printf("Wrong!!\n");
                myLcd.InitLcd();               
                myLcd.DrawString("Wrong!!");   
                myLcd.stop();
                speak.speakWrong();
                continue;
            }
        }
    // Print Card UID
    pc.printf("Card UID: ");
    for (uint8_t i = 0; i < RfChip.uid.size; i++)
    {
      pc.printf(" %X", RfChip.uid.uidByte[i]);
    }
    checker = check(RFID);
    speak.speak();
    GetID(RFID);
    lock = 0;
    pc.printf("\n\r");   
    wait_ms(1000);
    checks = 1;
    }
  
}