RFID tags playground

Dependencies:   BSP_DISCO_F746NG LCD_DISCO_F746NG MFRC522 TS_DISCO_F746NG mbed

Committer:
mpanetta
Date:
Wed Mar 09 17:38:05 2016 +0000
Revision:
0:b8f33ff50746
Making Public

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mpanetta 0:b8f33ff50746 1 #include "mbed.h"
mpanetta 0:b8f33ff50746 2 #include "TS_DISCO_F746NG.h"
mpanetta 0:b8f33ff50746 3 #include "LCD_DISCO_F746NG.h"
mpanetta 0:b8f33ff50746 4 #include "MFRC522.h"
mpanetta 0:b8f33ff50746 5
mpanetta 0:b8f33ff50746 6 LCD_DISCO_F746NG lcd;
mpanetta 0:b8f33ff50746 7 TS_DISCO_F746NG ts;
mpanetta 0:b8f33ff50746 8
mpanetta 0:b8f33ff50746 9 //MFRC522 RfChip (SPI_MOSI, SPI_MISO, SPI_SCK, SPI_CS, MF_RESET);
mpanetta 0:b8f33ff50746 10 MFRC522 RfChip (A2, A3, A4, A5, A0);
mpanetta 0:b8f33ff50746 11
mpanetta 0:b8f33ff50746 12 int main()
mpanetta 0:b8f33ff50746 13 {
mpanetta 0:b8f33ff50746 14 TS_StateTypeDef TS_State;
mpanetta 0:b8f33ff50746 15 uint16_t x, y;
mpanetta 0:b8f33ff50746 16 uint8_t text[30];
mpanetta 0:b8f33ff50746 17 uint8_t status;
mpanetta 0:b8f33ff50746 18 uint8_t idx;
mpanetta 0:b8f33ff50746 19 uint8_t cleared = 0;
mpanetta 0:b8f33ff50746 20 uint8_t prev_nb_touches = 0;
mpanetta 0:b8f33ff50746 21
mpanetta 0:b8f33ff50746 22 lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"TOUCHSCREEN DEMO", CENTER_MODE);
mpanetta 0:b8f33ff50746 23 wait(1);
mpanetta 0:b8f33ff50746 24 RfChip.PCD_Init();
mpanetta 0:b8f33ff50746 25 status = ts.Init(lcd.GetXSize(), lcd.GetYSize());
mpanetta 0:b8f33ff50746 26 if (status != TS_OK) {
mpanetta 0:b8f33ff50746 27 lcd.Clear(LCD_COLOR_RED);
mpanetta 0:b8f33ff50746 28 lcd.SetBackColor(LCD_COLOR_RED);
mpanetta 0:b8f33ff50746 29 lcd.SetTextColor(LCD_COLOR_WHITE);
mpanetta 0:b8f33ff50746 30 lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"TOUCHSCREEN INIT FAIL", CENTER_MODE);
mpanetta 0:b8f33ff50746 31 } else {
mpanetta 0:b8f33ff50746 32 lcd.Clear(LCD_COLOR_GREEN);
mpanetta 0:b8f33ff50746 33 lcd.SetBackColor(LCD_COLOR_GREEN);
mpanetta 0:b8f33ff50746 34 lcd.SetTextColor(LCD_COLOR_WHITE);
mpanetta 0:b8f33ff50746 35 lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"TOUCHSCREEN INIT OK", CENTER_MODE);
mpanetta 0:b8f33ff50746 36 }
mpanetta 0:b8f33ff50746 37
mpanetta 0:b8f33ff50746 38 wait(1);
mpanetta 0:b8f33ff50746 39 lcd.Clear(LCD_COLOR_BLACK);
mpanetta 0:b8f33ff50746 40 lcd.SetFont(&Font12);
mpanetta 0:b8f33ff50746 41 lcd.SetBackColor(LCD_COLOR_BLUE);
mpanetta 0:b8f33ff50746 42 lcd.SetTextColor(LCD_COLOR_WHITE);
mpanetta 0:b8f33ff50746 43
mpanetta 0:b8f33ff50746 44 while(1) {
mpanetta 0:b8f33ff50746 45 char buf[64];
mpanetta 0:b8f33ff50746 46 uint8_t status;
mpanetta 0:b8f33ff50746 47 MFRC522::MIFARE_Key key;
mpanetta 0:b8f33ff50746 48 uint8_t type;
mpanetta 0:b8f33ff50746 49
mpanetta 0:b8f33ff50746 50 // Initialize key to default
mpanetta 0:b8f33ff50746 51 key.keyByte[0] = 0xff;
mpanetta 0:b8f33ff50746 52 key.keyByte[1] = 0xff;
mpanetta 0:b8f33ff50746 53 key.keyByte[2] = 0xff;
mpanetta 0:b8f33ff50746 54 key.keyByte[3] = 0xff;
mpanetta 0:b8f33ff50746 55 key.keyByte[4] = 0xff;
mpanetta 0:b8f33ff50746 56 key.keyByte[5] = 0xff;
mpanetta 0:b8f33ff50746 57
mpanetta 0:b8f33ff50746 58 if (!RfChip.PICC_IsNewCardPresent()) {
mpanetta 0:b8f33ff50746 59 wait_ms(300);
mpanetta 0:b8f33ff50746 60 continue;
mpanetta 0:b8f33ff50746 61 }
mpanetta 0:b8f33ff50746 62
mpanetta 0:b8f33ff50746 63 if (!RfChip.PICC_ReadCardSerial()) {
mpanetta 0:b8f33ff50746 64 wait_ms(200);
mpanetta 0:b8f33ff50746 65 continue;
mpanetta 0:b8f33ff50746 66 }
mpanetta 0:b8f33ff50746 67
mpanetta 0:b8f33ff50746 68 uint8_t i;
mpanetta 0:b8f33ff50746 69 for (i = 0; i < RfChip.uid.size; i++)
mpanetta 0:b8f33ff50746 70 {
mpanetta 0:b8f33ff50746 71 snprintf(buf+i*3, 64-i*3, "%2.2x:", RfChip.uid.uidByte[i]);
mpanetta 0:b8f33ff50746 72 }
mpanetta 0:b8f33ff50746 73 buf[i*3-1] = '\0';
mpanetta 0:b8f33ff50746 74
mpanetta 0:b8f33ff50746 75 lcd.DisplayStringAt(0, LINE(2), (uint8_t *)buf, LEFT_MODE);
mpanetta 0:b8f33ff50746 76
mpanetta 0:b8f33ff50746 77 type = RfChip.PICC_GetType(RfChip.uid.sak);
mpanetta 0:b8f33ff50746 78 snprintf(buf, 64, "PICC Type: %s", RfChip.PICC_GetTypeName(type));
mpanetta 0:b8f33ff50746 79 lcd.DisplayStringAt(0, LINE(3), (uint8_t *)buf, LEFT_MODE);
mpanetta 0:b8f33ff50746 80
mpanetta 0:b8f33ff50746 81 // Attempt auth
mpanetta 0:b8f33ff50746 82 status = RfChip.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, 1, &key, &RfChip.uid);
mpanetta 0:b8f33ff50746 83 snprintf(buf, 64, "Auth status: %s", RfChip.GetStatusCodeName(status));
mpanetta 0:b8f33ff50746 84 lcd.DisplayStringAt(0, LINE(4), (uint8_t *)buf, LEFT_MODE);
mpanetta 0:b8f33ff50746 85
mpanetta 0:b8f33ff50746 86 if (status == MFRC522::STATUS_OK)
mpanetta 0:b8f33ff50746 87 {
mpanetta 0:b8f33ff50746 88 // Dump block.
mpanetta 0:b8f33ff50746 89 uint8_t size = sizeof(buf);
mpanetta 0:b8f33ff50746 90 status = RfChip.MIFARE_Read(1, (uint8_t *)buf, &size);
mpanetta 0:b8f33ff50746 91 if (status == MFRC522::STATUS_OK)
mpanetta 0:b8f33ff50746 92 {
mpanetta 0:b8f33ff50746 93 char tmp[64];
mpanetta 0:b8f33ff50746 94 snprintf(tmp, 64, "Read %d bytes at block 1", size);
mpanetta 0:b8f33ff50746 95 lcd.DisplayStringAt(0, LINE(5), (uint8_t *)tmp, LEFT_MODE);
mpanetta 0:b8f33ff50746 96
mpanetta 0:b8f33ff50746 97 uint8_t i;
mpanetta 0:b8f33ff50746 98 for (i =0; i < size; i++)
mpanetta 0:b8f33ff50746 99 {
mpanetta 0:b8f33ff50746 100 snprintf(tmp+i*3, 64-i*3, "%2.2x:", buf[i]);
mpanetta 0:b8f33ff50746 101 }
mpanetta 0:b8f33ff50746 102 tmp[i*3-1] = '\0';
mpanetta 0:b8f33ff50746 103
mpanetta 0:b8f33ff50746 104 lcd.DisplayStringAt(0, LINE(6), (uint8_t *)tmp, LEFT_MODE);
mpanetta 0:b8f33ff50746 105 }
mpanetta 0:b8f33ff50746 106 else
mpanetta 0:b8f33ff50746 107 {
mpanetta 0:b8f33ff50746 108 lcd.ClearStringLine(5);
mpanetta 0:b8f33ff50746 109 }
mpanetta 0:b8f33ff50746 110 }
mpanetta 0:b8f33ff50746 111 // Close out auth.
mpanetta 0:b8f33ff50746 112 RfChip.PCD_StopCrypto1();
mpanetta 0:b8f33ff50746 113
mpanetta 0:b8f33ff50746 114 // ts.GetState(&TS_State);
mpanetta 0:b8f33ff50746 115 // if (TS_State.touchDetected) {
mpanetta 0:b8f33ff50746 116 // // Clear lines corresponding to old touches coordinates
mpanetta 0:b8f33ff50746 117 // if (TS_State.touchDetected < prev_nb_touches) {
mpanetta 0:b8f33ff50746 118 // for (idx = (TS_State.touchDetected + 1); idx <= 5; idx++) {
mpanetta 0:b8f33ff50746 119 // lcd.ClearStringLine(idx);
mpanetta 0:b8f33ff50746 120 // }
mpanetta 0:b8f33ff50746 121 // }
mpanetta 0:b8f33ff50746 122 // prev_nb_touches = TS_State.touchDetected;
mpanetta 0:b8f33ff50746 123 //
mpanetta 0:b8f33ff50746 124 // cleared = 0;
mpanetta 0:b8f33ff50746 125 //
mpanetta 0:b8f33ff50746 126 // sprintf((char*)text, "Touches: %d", TS_State.touchDetected);
mpanetta 0:b8f33ff50746 127 // lcd.DisplayStringAt(0, LINE(0), (uint8_t *)&text, LEFT_MODE);
mpanetta 0:b8f33ff50746 128 //
mpanetta 0:b8f33ff50746 129 // for (idx = 0; idx < TS_State.touchDetected; idx++) {
mpanetta 0:b8f33ff50746 130 // x = TS_State.touchX[idx];
mpanetta 0:b8f33ff50746 131 // y = TS_State.touchY[idx];
mpanetta 0:b8f33ff50746 132 // sprintf((char*)text, "Touch %d: x=%d y=%d ", idx+1, x, y);
mpanetta 0:b8f33ff50746 133 // lcd.DisplayStringAt(0, LINE(idx+1), (uint8_t *)&text, LEFT_MODE);
mpanetta 0:b8f33ff50746 134 // }
mpanetta 0:b8f33ff50746 135 //
mpanetta 0:b8f33ff50746 136 // lcd.DrawPixel(TS_State.touchX[0], TS_State.touchY[0], LCD_COLOR_ORANGE);
mpanetta 0:b8f33ff50746 137 // } else {
mpanetta 0:b8f33ff50746 138 // if (!cleared) {
mpanetta 0:b8f33ff50746 139 // lcd.Clear(LCD_COLOR_BLUE);
mpanetta 0:b8f33ff50746 140 // sprintf((char*)text, "Touches: 0");
mpanetta 0:b8f33ff50746 141 // lcd.DisplayStringAt(0, LINE(0), (uint8_t *)&text, LEFT_MODE);
mpanetta 0:b8f33ff50746 142 // cleared = 1;
mpanetta 0:b8f33ff50746 143 // }
mpanetta 0:b8f33ff50746 144 // }
mpanetta 0:b8f33ff50746 145 }
mpanetta 0:b8f33ff50746 146 }