แก้ให้แล้ว

Dependencies:   NOKIA_5110 mbed

Fork of Lost-Found_BOX by FRA221:A

main.cpp

Committer:
kantapon501
Date:
2015-12-06
Revision:
3:c927196a726f
Parent:
2:5764ad3214cd
Child:
4:75346bd905c0

File content as of revision 3:c927196a726f:

//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

DigitalOut LedGreen(LED1);
DigitalOut spi_address[2] = {SPI_CS,PB_4};
//Serial connection to PC for output
Serial pc(SERIAL_TX, SERIAL_RX);
PwmOut speaker(D3);
DigitalOut lock(D2);
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];
    };  
}
void speak()
{
    speaker.period_ms(1);
    speaker.write(0.1f);
    wait(0.2);
    speaker.write(0);
}
void speakRight()
{
    speaker.period_ms(1);
    speaker.write(0.1f);
    wait(1);
    speaker.write(0);
}
void speakWrong()
{
    speaker.period_ms(1);
    speaker.write(0.1f);
    wait(0.2);
    speaker.write(0);
    wait(0.1);
    speaker.write(0.1f);
    wait(0.2);
    speaker.write(0);
}
void checkRight()
{
}
int main(void) {
    uint8_t RFID[10];
    int check=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;
    
    if(check == 1)
    {
        if(RFID[1] == RfChip.uid.uidByte[1])
        {
            pc.printf("Right\n");
            for (uint8_t i = 0; i < RfChip.uid.size; i++)
            {
                RfChip.uid.uidByte[i] = '0';
            }
            myLcd.InitLcd();              
            myLcd.DrawString("Right!!  ");   
            myLcd.stop();
            check = 0;
            lock = 1;
            speakRight();
            wait(2.5);
            lock = 0;
            continue;
        }
        else 
        {
            pc.printf("Wrong!!\n");
            myLcd.InitLcd();              
            myLcd.DrawString("Wrong!!  ");   
            myLcd.stop();
            speakWrong();
            continue;
        }
    }
    if(check == 0)
    {
        myLcd.InitLcd();              
        myLcd.DrawString("Ready");   
        myLcd.stop();
    }
    
    // Print Card UID
    pc.printf("Card UID: ");
    for (uint8_t i = 0; i < RfChip.uid.size; i++)
    {
      pc.printf(" %X", RfChip.uid.uidByte[i]);
    }
    speak();
    GetID(RFID);
    lock = 0;
    pc.printf("\n\r");   
    wait_ms(1000);
    check = 1;
    }
  
}