/**
读卡器与M1卡之间的通讯,首先要寻卡(Answer To Request),验证卡片类型
----》防冲突检查(Anticollision Loop)选择一张卡片,返回该卡序列号;
-----》选择卡片(Select Tag),选择被选中的卡的序列号,返回卡的容量代码;
-----》三次互相确认(3 Pass Authentication)通过密码校验之后,三次互相认证之后可以通讯。
*/
///////////////////RC522库///////////////////
#include <SPI.h>
#include <RFID.h>
#include <Arduino.h>
///////////////////LCD12864库///////////////////
#include "LCD12864RSPI.h"
#define AR_SIZE( a ) sizeof( a ) / sizeof( a[0] )
//////////////////GPS串口设置//////////////////
#define GpsSerial Serial1
#define DebugSerial Serial
//////////////薄膜键盘加密码库//////////////
#include <Password.h>
#include <Keypad.h>
Password password = Password( "9" ); //设置密码
const byte ROWS = 4; // Four rows
const byte COLS = 4; // columns
// Define the Keymap
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {31,33,35,37};// Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins.
byte colPins[COLS] = {39,41,43,45};// Connect keypad COL0, COL1 and COL2 to these Arduino pins.
// Create the Keypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
#define MAX_LEN 16
//////////////////GPS结构体定义////////////////
struct
{
char GPS_Buffer[80];
bool isGetData; //是否获取到GPS数据
bool isParseData; //是否解析完成
char UTCTime[11]; //UTC时间
char latitude[11]; //纬度
char N_S[2]; //N/S
char longitude[12]; //经度
char E_W[2]; //E/W
bool isUsefull; //定位信息是否有效
} Save_Data;
const unsigned int gpsRxBufferLength = 600;
char gpsRxBuffer[gpsRxBufferLength];
unsigned int ii = 0;
int L = 13; //LED指示灯引脚
unsigned char charserNum[10];
unsigned char codeArray[] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
unsigned char id[5];
char la[5],lo[6];
unsigned char latitude_jx[12],longitude_jx[12];
unsigned char sectorNewKeyA[16][16] = {
{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xff,0x07,0x80,0x69, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xff,0x07,0x80,0x69, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},};
RFID rfid(53,5); //Arduino UNO R3 D10--读卡器SDA引脚、D5--读卡器RST引脚
//Arduino Mega 2560 --读卡器SDA引脚、D5--读卡器RST引脚
/////////定义显示屏上的汉字和图像///////////
unsigned char show0[]={0xD0,0xA1,0xD7,0xE9,0xB3,0xC9,0xD4,0xB1};//小组成员
unsigned char show1[]={0xC1,0xF5,0xBA,0xAE,0xD2,0xDD};//刘寒逸
unsigned char show2[]={0xBA,0xAB,0xEA,0xBB,0xD4,0xF3};//韩昊泽
unsigned char show3[]={0xC1,0xF5,0xB7,0xBD,0xC8,0xF3};//刘方润
unsigned char show4[]={0xD4,0xAC,0xD1,0xEF};//袁扬
unsigned char show5[]={0xCF,0xD4,0xCA,0xBE,0xD0,0xC5,0xCF,0xA2,0x3A,0x00};//显示信息:
unsigned char show6[]={0xBF,0xA8,0xBA,0xC5,0x3A,0x00};//卡号:
unsigned char show7[]={'E','r','r','o','r','!'};
unsigned char show8[]={0xBE,0xAD,0xB6,0xC8,0x3A,0x00};//经度:
unsigned char show9[]={0xCE,0xB3,0xB6,0xC8,0x3A,0x00};//纬度:
unsigned char show10[]={0xA1,0xE3};//°
unsigned char show11[]={0xBB,0xB6,0xD3,0xAD,0xCA,0xB9,0xD3,0xC3,0xB1,0xBE,0xC9,0xE8,0xBC,0xC6}; //欢迎使用本设计
unsigned char show12[]={0xC7,0xEB,0xCA,0xE4,0xC8,0xEB,0xC3,0xDC,0xC2,0xEB,0x3A,0x00};//请输入密码:
unsigned char show13[]={0xC3,0xDC,0xC2,0xEB,0xD5,0xFD,0xC8,0xB7,0x2C,0x00,0xC7,0xEB,0xB5,0xC8,0xB4,0xFD};//密码正确,请等待
unsigned char show14[]={0xC3,0xDC,0xC2,0xEB,0xB4,0xED,0xCE,0xF3,0x2C,0x00,0xC7,0xEB,0xD6,0xD8,0xCA,0xD4};//密码错误,请重试
unsigned char logo0[]={ //笑脸
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,
0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,
0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x03,0xFE,0x00,
0x7F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x0F,0xF0,0x00,
0x0F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x1F,0x80,0x00,
0x01,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x00,
0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,
0x00,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x01,0xF0,0x00,0x00,
0x00,0x0F,0x80,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x03,0xE0,0x00,0x00,
0x00,0x07,0xC0,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x07,0xC0,0x00,0x00,
0x00,0x01,0xE0,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x07,0x80,0x00,0x00,
0x00,0x00,0xE0,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,
0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,
0x00,0x00,0x78,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,
0x00,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x38,0x00,0x40,0x00,
0x00,0x80,0x1C,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x78,0x03,0xF8,0x00,
0x07,0xF0,0x1E,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x70,0x07,0xFE,0x00,
0x0F,0xFC,0x0E,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0xF0,0x1F,0xBF,0x00,
0x3F,0x7E,0x0F,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0xE0,0x3E,0x0F,0x80,
0x7C,0x1F,0x07,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0xE0,0x7C,0x07,0xC0,
0xF8,0x0F,0x87,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x01,0xE0,0xF8,0x01,0xE1,
0xF0,0x03,0xC3,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x01,0xC0,0xF0,0x01,0xE1,
0xE0,0x03,0xC3,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x01,0xC0,0xE0,0x00,0xE1,
0xC0,0x01,0xC3,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x00,
0x00,0x00,0x03,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x00,
0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x00,
0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x00,
0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x00,
0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x00,
0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x00,
0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x00,
0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x00,
0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x00,
0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x00,
0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x00,
0x00,0x00,0x01,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x00,
0x00,0x00,0x03,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x00,
0x00,0x00,0x03,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x01,0xE0,0x00,0x00,0x00,
0x00,0x00,0x03,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0xE0,0x00,0x00,0x00,
0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0xE0,0x00,0x00,0x00,
0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0xF0,0x00,0x0C,0x00,
0x0C,0x00,0x0F,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x70,0x00,0x1E,0x00,
0x1E,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x78,0x00,0x1F,0x00,
0x3E,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x38,0x00,0x07,0x80,
0xF8,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x3C,0x00,0x03,0xE1,
0xF0,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x1E,0x00,0x01,0xFF,
0xE0,0x00,0x78,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x0F,0x00,0x00,0xFF,
0x80,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x3F,
0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x07,0x80,0x00,0x00,
0x00,0x01,0xE0,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x03,0xE0,0x00,0x00,
0x00,0x07,0xC0,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x01,0xF0,0x00,0x00,
0x00,0x0F,0x80,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,
0x00,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x00,
0x00,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x1F,0x80,0x00,
0x01,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x0F,0xE0,0x00,
0x07,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x03,0xFE,0x00,
0x3F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,
0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,
0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
unsigned char logo1[] =
{
0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x80,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x80,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x1C,0x1F,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x3C,0x1F,0xF8,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x3C,0x3F,0xF8,
0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x38,0x7F,0xC0,
0x1F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x7F,0xFF,0x00,
0x7F,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x7F,0xFE,0x00,
0xF8,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x08,0x7F,0xFC,0x00,
0xE0,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x10,0x7F,0xFC,0x31,
0xC0,0x07,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x10,0xF0,0xFF,0xF3,
0x80,0x03,0x80,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x20,0xC0,0xFF,0xE3,
0x0C,0x23,0x80,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x40,0x01,0xFF,0xC7,
0x0C,0x63,0xC0,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0xC0,0x0F,0xFE,0x07,
0x00,0x03,0xC0,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0xA0,0x1F,0xFC,0x07,
0x00,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x80,0x3F,0xF8,0x07,
0x00,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x01,0x80,0x7F,0xF0,0x07,
0x00,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x01,0x00,0x71,0xF0,0x0F,
0xC0,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x01,0x00,0xE1,0xF1,0xFF,
0xE0,0x03,0x80,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x02,0x00,0x01,0xFF,0xFF,
0xE1,0x87,0xC0,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x06,0x00,0x07,0xFF,0xFF,
0xE1,0x0F,0xFF,0xFF,0xE0,0x00,0x00,0x00,
0x00,0x00,0x00,0x06,0x00,0x3F,0xFF,0xFF,
0xFC,0x3F,0xFF,0xFF,0xFE,0x00,0x00,0x00,
0x00,0x00,0x00,0x06,0x00,0xFF,0xFF,0x1F,
0xFF,0xFC,0x00,0x00,0x07,0x00,0x00,0x00,
0x00,0x00,0x00,0x04,0x07,0xFF,0xF8,0x3F,
0xFF,0xF0,0x00,0x00,0x03,0x80,0x00,0x00,
0x00,0x00,0x00,0x04,0x3F,0xFF,0xF0,0x3F,
0xFF,0xE0,0x00,0x00,0x07,0x80,0x00,0x00,
0x00,0x00,0x00,0x06,0x7F,0xFF,0x81,0xFF,
0xC0,0x00,0x00,0x00,0x07,0xF8,0x00,0x00,
0x00,0x00,0x00,0x07,0xFF,0xFE,0x03,0xE0,
0x00,0x00,0xF8,0x00,0x00,0x3F,0x80,0x00,
0x00,0x00,0x00,0x0F,0xFF,0xF8,0x03,0x00,
0x00,0x0F,0xF8,0x00,0x00,0x00,0x80,0x00,
0x00,0x00,0x00,0x3F,0xFF,0xF0,0x06,0x00,
0x00,0x1F,0xF8,0x00,0x00,0x00,0x30,0x00,
0x00,0x00,0x00,0xFF,0xFF,0x80,0x0C,0x3E,
0x00,0x7F,0xF0,0x00,0x00,0x00,0x38,0x00,
0x00,0x00,0x01,0xFF,0xFF,0x00,0x0C,0x7E,
0x00,0xFE,0x00,0x00,0x00,0x0F,0xF0,0x00,
0x00,0x00,0x07,0xFF,0xFC,0x00,0x0C,0xFE,
0x00,0xF8,0x00,0x00,0x01,0xFF,0x00,0x00,
0x00,0x00,0x0F,0xFF,0xF8,0x00,0x0C,0x7C,
0x00,0xF0,0x00,0x00,0xFF,0xC0,0x00,0x00,
0x00,0x00,0x3F,0xFF,0xE0,0x00,0x1C,0x3C,
0x61,0xF1,0xC0,0x1F,0xF8,0x00,0x00,0x00,
0x00,0x00,0x7F,0xFF,0xC0,0x00,0x18,0x3F,
0xE1,0xE1,0xC3,0xFE,0x00,0x00,0x00,0x00,
0x00,0x00,0x7F,0xFF,0x00,0x00,0x18,0xFF,
0xE1,0xE3,0xFF,0xC0,0x00,0x00,0x00,0x00,
0x00,0x00,0x3F,0xFE,0x00,0x04,0x39,0xFF,
0xC1,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x3F,0xFE,0x00,0x0E,0x3B,0xF9,
0xE3,0xFF,0xE0,0x0F,0xC0,0x00,0x00,0x00,
0x00,0x00,0x3F,0xF6,0x00,0x1E,0x3B,0xF9,
0xFF,0xFF,0x80,0x3D,0xF0,0x00,0x00,0x00,
0x00,0x00,0x3F,0xE3,0x00,0x1F,0x73,0xF9,
0xFF,0xC3,0x80,0x78,0x38,0x00,0x00,0x00,
0x00,0x00,0x3F,0xC3,0x00,0x1F,0xF3,0xFF,
0xFE,0x03,0x00,0xE0,0x08,0x00,0x00,0x00,
0x00,0x00,0x3F,0x81,0x80,0x3F,0xE3,0xFF,
0xF0,0x07,0x98,0xC0,0x0C,0x00,0x00,0x00,
0x00,0x00,0x7F,0x01,0x80,0x38,0xE3,0xFF,
0x80,0x2F,0xC1,0xC0,0x0C,0x00,0x00,0x00,
0x00,0x00,0x7C,0x00,0x80,0x78,0xE3,0xFC,
0x00,0xC7,0x01,0x0F,0xC0,0x00,0x00,0x00,
0x00,0x00,0xF8,0x00,0xC0,0x71,0xE7,0xF0,
0x03,0x87,0x03,0x19,0x80,0x00,0x00,0x00,
0x00,0x00,0xF0,0x00,0x60,0x61,0xCF,0xE0,
0x07,0x07,0x07,0x10,0x00,0x00,0x00,0x00,
0x00,0x01,0xE0,0x00,0x60,0x01,0xC7,0xC3,
0xC7,0x06,0x06,0x00,0x00,0x00,0x00,0x00,
0x00,0x01,0xC0,0x00,0x30,0x03,0xC3,0xC7,
0xC7,0x0F,0x0E,0x00,0x00,0x00,0x00,0x00,
0x00,0x03,0x80,0x00,0x18,0x03,0xC3,0xC7,
0xC7,0x0F,0x1C,0x00,0x00,0x00,0x00,0x00,
0x00,0x07,0x00,0x00,0x08,0x07,0xC3,0xC7,
0xC7,0x1E,0x18,0x00,0x00,0x00,0x00,0x00,
0x00,0x06,0x00,0x00,0x06,0x07,0x83,0x87,
0xC7,0xFC,0x30,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x03,0x07,0x87,0x03,
0x87,0xFC,0x60,0x00,0x04,0x22,0x13,0xF8,
0x00,0x08,0x00,0x00,0x01,0x8F,0xFF,0x00,
0x03,0xF8,0xC0,0x00,0x04,0x22,0x10,0x08,
0x00,0x00,0x00,0x00,0x00,0x7F,0xFC,0x00,
0x01,0xE3,0x80,0x00,0x04,0x22,0x10,0x10,
0x00,0x00,0x00,0x00,0x00,0x3F,0xF8,0x00,
0x00,0x07,0x00,0x00,0x04,0x22,0x10,0x20,
0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x00,
0x00,0x0E,0x00,0x00,0x07,0xE3,0xF0,0x40,
0x00,0x00,0x00,0x00,0x00,0x03,0x80,0x00,
0x00,0x3C,0x00,0x00,0x04,0x22,0x10,0x80,
0x00,0x00,0x00,0x00,0x00,0x01,0xF0,0x00,
0x00,0xF0,0x00,0x00,0x04,0x22,0x11,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,
0x07,0xC0,0x00,0x00,0x04,0x22,0x12,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xC0,
0x3E,0x00,0x00,0x00,0x04,0x22,0x13,0xF8,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,
0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
unsigned char logo2[]={
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x00,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x00,
0xFF,0xFE,0xDF,0x00,0x1C,0x0E,0x1D,0xFE,
0xAF,0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x00,
0xFF,0xFE,0xBF,0xF5,0xFD,0xEF,0xD0,0x21,
0xB7,0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x00,
0xFF,0xFD,0x81,0x80,0x3C,0x0E,0xD7,0xBD,
0xBF,0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x00,
0xFF,0xF9,0x7D,0xB5,0xBD,0xEE,0xD0,0x20,
0x03,0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x00,
0xFF,0xF4,0xEF,0x80,0x3C,0x0E,0xD7,0xFD,
0xBF,0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x00,
0xFF,0xFD,0xAB,0xF7,0xFF,0xFE,0x10,0x3D,
0x37,0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x00,
0xFF,0xFD,0xAB,0x00,0x00,0x03,0xD2,0xB8,
0xAF,0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x00,
0xFF,0xFD,0x6D,0xEE,0xFB,0x7F,0x90,0x25,
0xDF,0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x00,
0xFF,0xFC,0xED,0xC5,0xF9,0x06,0x4A,0xBD,
0x9B,0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x00,
0xFF,0xFD,0xEF,0xF8,0xF6,0x7F,0xDA,0xBC,
0x6B,0x7B,0xEF,0xBD,0xF8,0x00,0x00,0x00,
0xFF,0xFD,0x8F,0x07,0x2F,0x03,0x1F,0x31,
0xF3,0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x00,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x00,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x00,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x00,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x00,
0xEA,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xE1,0xFF,0xFD,0xFF,0xF8,0x00,0x00,0x00,
0xF1,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xE0,0x3F,0xDC,0xFF,0xF8,0x00,0x00,0x00,
0xC0,0x2F,0xFF,0xFF,0xF3,0xFF,0xFF,0xFF,
0xFF,0xBD,0x8C,0xFF,0xF8,0x00,0x00,0x00,
0xF1,0xFF,0xFF,0xFF,0xC7,0xEF,0xFF,0xFC,
0xFF,0xB9,0x04,0xFF,0xF8,0x00,0x00,0x00,
0xE8,0xFF,0xFF,0xFF,0x07,0x1F,0x7F,0xFF,
0x3F,0xF0,0x20,0xFF,0xF8,0x00,0x00,0x00,
0xDB,0x7F,0xFF,0xFC,0x0C,0x1C,0x7F,0x7F,
0xCF,0xEE,0x71,0xFF,0xF8,0x00,0x00,0x00,
0xFB,0xF7,0xE3,0xF8,0x00,0x10,0xDF,0x8F,
0xF3,0xFE,0x7D,0xFF,0xF8,0x00,0x00,0x00,
0xFF,0xFB,0xC1,0xF0,0x00,0x00,0x97,0xC1,
0xF8,0xFE,0xFF,0xEF,0xF8,0x00,0x00,0x00,
0xFB,0xEB,0x98,0xE0,0x00,0x39,0x10,0xF0,
0x3C,0x3F,0xFF,0xBF,0xF8,0x00,0x00,0x00,
0xFF,0xF1,0xA4,0xE0,0x00,0x04,0x10,0x1C,
0x06,0x1F,0x8F,0x97,0xF8,0x00,0x00,0x00,
0xFF,0xD1,0x8A,0xC0,0x00,0x00,0x30,0x00,
0x01,0x0F,0x07,0x8F,0xF8,0x00,0x00,0x00,
0xFF,0xE0,0x8A,0x00,0x00,0x00,0x30,0x38,
0x00,0x06,0x33,0x1B,0xF8,0x00,0x00,0x00,
0xFF,0xA0,0x44,0x00,0x00,0x00,0x50,0x40,
0x00,0x06,0x4B,0x17,0xF8,0x00,0x00,0x00,
0xFF,0xC0,0x60,0x00,0x0F,0xC0,0x48,0x00,
0x00,0x02,0xA2,0x05,0xF8,0x00,0x00,0x00,
0xFF,0x40,0x70,0x00,0x3F,0xE0,0x88,0x00,
0x00,0x00,0xA2,0x03,0xF8,0x00,0x00,0x00,
0xFF,0x80,0xF8,0x00,0x00,0xF1,0x04,0x07,
0xE0,0x00,0x44,0x01,0xF8,0x00,0x00,0x00,
0xFE,0x81,0xE8,0x00,0x01,0xC2,0x04,0x4F,
0xF8,0x00,0x0F,0x03,0xF8,0x00,0x00,0x00,
0xFF,0x00,0x08,0x00,0x01,0x84,0x02,0x3E,
0x00,0x00,0x1F,0x82,0xF8,0x00,0x00,0x00,
0xFD,0x00,0x10,0x00,0x00,0x88,0x01,0x06,
0x00,0x00,0x10,0x41,0xF8,0x00,0x00,0x00,
0xFE,0x01,0xE0,0x01,0x13,0x08,0x00,0x87,
0x00,0x00,0x10,0x01,0xB8,0x00,0x00,0x00,
0xFF,0x06,0x20,0x00,0x88,0x10,0x00,0x43,
0x00,0x00,0x10,0x01,0x18,0x00,0x00,0x00,
0xFD,0x0A,0x10,0x01,0x44,0x10,0x00,0x22,
0x00,0x00,0x18,0x01,0xB8,0x00,0x00,0x00,
0xF8,0x11,0x10,0x00,0x80,0x10,0x00,0x21,
0x91,0x00,0x14,0x01,0xF8,0x00,0x00,0x00,
0xFC,0x10,0x88,0x70,0x00,0x10,0x00,0x10,
0x22,0x03,0xE0,0x00,0xB8,0x00,0x00,0x00,
0xFE,0x20,0x84,0x4C,0x00,0x20,0x00,0x10,
0x45,0x05,0x31,0x00,0xF8,0x00,0x00,0x00,
0xF4,0x20,0x43,0x8B,0x80,0xC0,0x00,0x10,
0x02,0x08,0x88,0x80,0xB8,0x00,0x00,0x00,
0xFC,0x20,0x40,0x08,0xFF,0x00,0x00,0x10,
0x00,0x18,0x40,0x40,0x78,0x00,0x00,0x00,
0xF6,0x20,0x40,0x08,0x80,0x00,0x00,0x08,
0x00,0x68,0x40,0x00,0xD8,0x00,0x00,0x00,
0xFC,0x20,0x40,0x08,0x80,0x00,0x00,0x06,
0x03,0x90,0x20,0x20,0x68,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
/////////////////////////////////////////////////////////
////////////////////////////////主程序//////////////////////////////////
void setup() {
Serial.begin(9600);
SPI.begin(); //SPI启动
rfid.init(); //RFID初始化
lcd12864_initdisplay();//12864初始化显示
GPS_init();//GPS初始化
keypad.addEventListener(keypadEvent);//增加对键盘的侦听
}
void loop() {
unsigned char status;
unsigned char blockAddr; //选择操作的块地址0~63
unsigned char str[MAX_LEN];
//LCDA.DisplayString(0,1,show11,AR_SIZE(show11));
//LCDA.DisplayString(1,0,show12,AR_SIZE(show12));
//keypad.getKey();
/////////////显示相关信息//////////////
LCDA.DisplayString(0,0,show5,AR_SIZE(show5)); //显示信息:
LCDA.DisplayString(1,0,show6,AR_SIZE(show6)); //卡号:
LCDA.DisplayString(2,0,show9,AR_SIZE(show8)); //纬度:
//LCDA.DisplayString(2,6,show10,AR_SIZE(show10));
LCDA.DisplayString(3,0,show8,AR_SIZE(show9)); //经度:
//LCDA.DisplayString(3,6,show10,AR_SIZE(show10));
//找卡
if (rfid.isCard()) {
Serial.println("Find the card!");
// Show card type
ShowCardType(str);
//读取卡序列号
if (rfid.readCardSerial()) {
Serial.print("The card's number is : ");
Serial.print(rfid.serNum[0],HEX);
Serial.print(rfid.serNum[1],HEX);
Serial.print(rfid.serNum[2],HEX);
Serial.print(rfid.serNum[3],HEX);
Serial.print(rfid.serNum[4],HEX);
Serial.println(" ");
for(int i=0;i<9;i+=2)
{
charserNum[i]= ((rfid.serNum[i] & 0xF0)>>4);
charserNum[i] = codeArray[charserNum[i]];
charserNum[i+1]= ((rfid.serNum[i+1] & 0x0F));
charserNum[i+1] = codeArray[charserNum[i+1]];
}
//LCDA.DisplayString(1,3,charserNum,AR_SIZE(charserNum));
unsigned char* id = rfid.serNum;
if(id[0]==0x51 && id[1]==0x59 && id[2]==0x37 && id[3]==0xD5 && id[4]==0xEA) {//&& id[4]==0xDA
gpsRead(); //获取GPS数据
parseGpsBuffer();//解析GPS数据
printGpsBuffer();//输出解析后的数据
memcpy(latitude_jx,Save_Data.latitude,8);
memcpy(longitude_jx,Save_Data.longitude,8);
LCDA.CLEAR();
LCDA.DisplayString(1,3,charserNum,AR_SIZE(charserNum));
Read_Date();
////////////数据类型转换//////////重点
int m_1 = atoi((char*) latitude_jx);
float n_1 = m_1/100.0;
Serial.println(n_1);
dtostrf(n_1,2,2,la);
int m_2 = atoi((char*) longitude_jx);
float n_2 = m_2/100.0;
dtostrf(n_2,3,3,lo);
//////////////////////////////////////
LCDA.DisplayString(2,3,(unsigned char*)la,AR_SIZE(la));
LCDA.DisplayString(2,5,show10,AR_SIZE(show10));
LCDA.DisplayString(3,3,(unsigned char*)lo,AR_SIZE(lo));
LCDA.DisplayString(3,6,show10,AR_SIZE(show10));
}
else if(id[0]==0xF0 && id[1]==0xD3 && id[2]==0x3A && id[3]==0xD5) {
LCDA.CLEAR();
LCDA.DrawFullScreen(logo1);
}
else{
LCDA.CLEAR();
LCDA.DisplayString(1,3,charserNum,AR_SIZE(charserNum));
LCDA.DisplayString(2,3,show7,AR_SIZE(show7));
LCDA.DisplayString(3,3,show7,AR_SIZE(show7));
}
}
//选卡,可返回卡容量(锁定卡片,防止多数读取),去掉本行将连续读卡
rfid.selectTag(rfid.serNum);
}
/* blockAddr = 7; //数据块7
status = rfid.auth(PICC_AUTHENT1A, blockAddr, sectorNewKeyA[blockAddr/4], rfid.serNum);
if (status == MI_OK) //认证
{
//读数据
blockAddr = blockAddr - 3 ; //数据块4
if( rfid.read(blockAddr, str) == MI_OK)
{
Serial.print("Read from the card ,the data is : ");
Serial.println((char *)str);
}
}*/
rfid.halt();
}
//}
////////////LCD12864初始化//////////////
void lcd12864_initdisplay(){
LCDA.initDriverPin(8,12,13); // E--8 RS---12 R/W---13 MEGA
LCDA.Initialise(); // 屏幕初始化
delay(100);
LCDA.CLEAR();//清屏
delay(100);
LCDA.DisplayString(0,2,show0,AR_SIZE(show0));//第一行第三格开始
delay(100);
LCDA.DisplayString(1,1,show1,AR_SIZE(show1));
LCDA.DisplayString(1,5,show2,AR_SIZE(show2));
LCDA.DisplayString(2,1,show3,AR_SIZE(show3));
LCDA.DisplayString(2,5,show4,AR_SIZE(show4));
delay(2000);
LCDA.CLEAR();//清屏
delay(100);
LCDA.DrawFullScreen(logo0);
delay(2000);
LCDA.CLEAR();
delay(100);
}
/*
* Function:ShowCardType
* Description:Show Card type
* Input parameter:Type string
* Return:Null
*/
void ShowCardType(unsigned char* type)
{
Serial.print("Card type: ");
if(type[0]==0x04&&type[1]==0x00)
Serial.println("MFOne-S50");
else if(type[0]==0x02&&type[1]==0x00)
Serial.println("MFOne-S70");
else if(type[0]==0x44&&type[1]==0x00)
Serial.println("MF-UltraLight");
else if(type[0]==0x08&&type[1]==0x00)
Serial.println("MF-Pro");
else if(type[0]==0x44&&type[1]==0x03)
Serial.println("MF Desire");
else
Serial.println("Unknown");
}
/////////////////GPS初始化///////////////////
void GPS_init(){
GpsSerial.begin(9600); //定义波特率9600
DebugSerial.begin(9600);
DebugSerial.println("GPS is Linking!");
DebugSerial.println("Wating...");
Save_Data.isGetData = false;
Save_Data.isParseData = false;
Save_Data.isUsefull = false;
}
void errorLog(int num)
{
DebugSerial.print("ERROR");
DebugSerial.println(num);
while (1)
{
digitalWrite(L, HIGH);
delay(300);
digitalWrite(L, LOW);
delay(300);
}
}
//////////////输出解析后的数据//////////////
void printGpsBuffer()
{
if (Save_Data.isParseData)
{
Save_Data.isParseData = false;
DebugSerial.print("Save_Data.UTCTime = ");
DebugSerial.println(Save_Data.UTCTime);
if(Save_Data.isUsefull)
{
Save_Data.isUsefull = false;
DebugSerial.print("Save_Data.latitude = ");
DebugSerial.println(Save_Data.latitude);
DebugSerial.print("Save_Data.N_S = ");
DebugSerial.println(Save_Data.N_S);
DebugSerial.print("Save_Data.longitude = ");
DebugSerial.println(Save_Data.longitude);
DebugSerial.print("Save_Data.E_W = ");
DebugSerial.println(Save_Data.E_W);
}
else
{
DebugSerial.println("GPS DATA is not usefull!");
}
}
}
//////////////解析GPS数据///////////////
void parseGpsBuffer()
{
char *subString;
char *subStringNext;
if (Save_Data.isGetData)
{
Save_Data.isGetData = false;
DebugSerial.println("**************");
DebugSerial.println(Save_Data.GPS_Buffer);
for (int i = 0 ; i <= 6 ; i++)
{
if (i == 0)
{
if ((subString = strstr(Save_Data.GPS_Buffer, ",")) == NULL)
errorLog(1); //解析错误
}
else
{
subString++;
if ((subStringNext = strstr(subString, ",")) != NULL)
{
char usefullBuffer[2];
switch(i)
{
case 1:memcpy(Save_Data.UTCTime, subString, subStringNext - subString);break; //获取UTC时间
case 2:memcpy(usefullBuffer, subString, subStringNext - subString);break; //获取UTC时间
case 3:memcpy(Save_Data.latitude, subString, subStringNext - subString);break; //获取纬度信息
case 4:memcpy(Save_Data.N_S, subString, subStringNext - subString);break; //获取N/S
case 5:memcpy(Save_Data.longitude, subString, subStringNext - subString);break; //获取纬度信息
case 6:memcpy(Save_Data.E_W, subString, subStringNext - subString);break; //获取E/W
default:break;
}
subString = subStringNext;
Save_Data.isParseData = true;
if(usefullBuffer[0] == 'A')
Save_Data.isUsefull = true;
else if(usefullBuffer[0] == 'V')
Save_Data.isUsefull = false;
}
else
{
errorLog(2); //解析错误
}
}
}
}
}
///////////////获取GPS数据/////////////////
void gpsRead() {
while (GpsSerial.available())
{
gpsRxBuffer[ii++] = GpsSerial.read();
if (ii == gpsRxBufferLength)clrGpsRxBuffer();
}
char* GPS_BufferHead;
char* GPS_BufferTail;
if ((GPS_BufferHead = strstr(gpsRxBuffer, "$GPRMC,")) != NULL || (GPS_BufferHead = strstr(gpsRxBuffer, "$GNRMC,")) != NULL )
{
if (((GPS_BufferTail = strstr(GPS_BufferHead, "\r\n")) != NULL) && (GPS_BufferTail > GPS_BufferHead))
{
memcpy(Save_Data.GPS_Buffer, GPS_BufferHead, GPS_BufferTail - GPS_BufferHead);
Save_Data.isGetData = true;
clrGpsRxBuffer();
}
}
}
void clrGpsRxBuffer(void)
{
memset(gpsRxBuffer, 0, gpsRxBufferLength); //清空
ii = 0;
}
void Read_Date(){
unsigned char status;
unsigned char blockAddr; //选择操作的块地址0~63
unsigned char str[MAX_LEN];
blockAddr = 7; //数据块7
status = rfid.auth(PICC_AUTHENT1A, blockAddr, sectorNewKeyA[blockAddr/4], rfid.serNum);
if (status == MI_OK) //认证
{
//读数据
blockAddr = blockAddr - 3 ; //数据块4
if( rfid.read(blockAddr, str) == MI_OK)
{
Serial.print("Read from the card ,the data is : ");
Serial.println((char *)str);
}
}
}
void keypadEvent(KeypadEvent eKey){
switch (keypad.getState()){
case PRESSED:
Serial.print("Pressed: ");
Serial.println(eKey);
switch (eKey){
case '*': checkPassword(); break;
case '#': password.reset(); break;
default: password.append(eKey);
}
}
}
void checkPassword(){
if (password.evaluate()){
LCDA.DisplayString(3,1,show13,AR_SIZE(show13));
delay(2000);
//Add code to run if it works
}else{
LCDA.DisplayString(3,1,show14,AR_SIZE(show14));
//add code to run if it did not work
}
} |