E2PRO2 / Mbed OS e2pro2-rfid-house
Committer:
janusboandersen
Date:
Fri May 03 16:26:48 2019 +0000
Revision:
14:0480ed7efd7f
Parent:
13:af3d7d8d77fc
set precompiler constant ready for KL25Z users

Who changed what in which revision?

UserRevisionLine numberNew contents of line
janusboandersen 5:df18de5caf9f 1 /*
janusboandersen 5:df18de5caf9f 2 * File : main.cpp
janusboandersen 6:8ac65a5956a1 3 * License :
janusboandersen 6:8ac65a5956a1 4 * Version : 0.92
janusboandersen 5:df18de5caf9f 5 * Author : Janus Bo Andersen (JA67494)
janusboandersen 5:df18de5caf9f 6 * Last edit : Janus
janusboandersen 5:df18de5caf9f 7 * Created on : 27 Apr 2019
janusboandersen 5:df18de5caf9f 8 * Last change: 03 May 2019
janusboandersen 5:df18de5caf9f 9 * Description: Demo program for Mifare RC-522 RFID reader/writer chip. Will:
janusboandersen 5:df18de5caf9f 10 * : Communicate with RFID readers, transmit card numbers to terminal
janusboandersen 5:df18de5caf9f 11 * : and toggle a digital pin(s) upon reading a card.
janusboandersen 5:df18de5caf9f 12 * Structure : Uses SPI protocol to communicate with the RFIDs.
janusboandersen 5:df18de5caf9f 13 * : Uses U(S)ART to communicate with connected computer/terminal.
janusboandersen 5:df18de5caf9f 14 * Adapted for: STM32 Nucleo L432KC and NXP KL25Z (macro settings).
janusboandersen 5:df18de5caf9f 15 * Changelog : 27 Apr 2019: Created demo program
janusboandersen 5:df18de5caf9f 16 : 02 May 2019: Update pin mappings for FRDM-KL25Z Board
janusboandersen 5:df18de5caf9f 17 : 02 May 2019: Added set and reset for a latched circuit
janusboandersen 5:df18de5caf9f 18 : 03 May 2019: Upgrade to RTOS 5.
janusboandersen 5:df18de5caf9f 19 : 03 May 2019: Run two RFIDs simultaneosuly (changed library setup
janusboandersen 5:df18de5caf9f 20 : by decr. SPI freq. and adding reset managers).
janusboandersen 14:0480ed7efd7f 21 : 03 May 2019: Include Room class (room.hpp) and tests
janusboandersen 14:0480ed7efd7f 22
janusboandersen 14:0480ed7efd7f 23 NOTICE! Set/check precompiler constant below controlling pinmap (KL25Z vs 432KC)
janusboandersen 5:df18de5caf9f 24
janusboandersen 5:df18de5caf9f 25 Resources:
janusboandersen 5:df18de5caf9f 26 https://github.com/armmbed/mbed-os
janusboandersen 5:df18de5caf9f 27 https://os.mbed.com/docs/mbed-os/v5.9/tutorials/migrating.html
janusboandersen 5:df18de5caf9f 28
janusboandersen 5:df18de5caf9f 29 */
andcor02 3:654723104cc9 30
janusboandersen 5:df18de5caf9f 31 /*Connect as follows:
janusboandersen 5:df18de5caf9f 32
janusboandersen 5:df18de5caf9f 33 Power supply MUST BE 3.3V and GND to the respective pins.
kirchnet 2:a0c7513fb634 34
janusboandersen 5:df18de5caf9f 35 RFID pins -> Board pinName L432KC FRDM-KL25Z
janusboandersen 5:df18de5caf9f 36 ---------------------------------------------------------------------
janusboandersen 5:df18de5caf9f 37
janusboandersen 5:df18de5caf9f 38 ======================= BUS ======================================
janusboandersen 5:df18de5caf9f 39 RFID MISO = pin4 -> SPI_MISO PA_6=D12 PTD3
janusboandersen 5:df18de5caf9f 40 RFID MOSI = pin3 -> SPI_MOSI PA_7=D11 PTD2
janusboandersen 5:df18de5caf9f 41 RFID SCK = pin2 -> SPI_SCK PA_5=D13 PTD1
janusboandersen 5:df18de5caf9f 42 ======================= RFID 1 ======================================
janusboandersen 5:df18de5caf9f 43 RFID SDA = pin1 -> SPI_CS PB_6=D10 PTD0
janusboandersen 5:df18de5caf9f 44 RFID RST = pin7 -> PA_9=D8 PTA13
janusboandersen 5:df18de5caf9f 45 RFID IRQ = pin5 -> -------- OPEN --------
janusboandersen 5:df18de5caf9f 46 ======================= RFID 2 ======================================
janusboandersen 5:df18de5caf9f 47 RFID SDA = pin1 -> SPI_CS PA_12=D2 PTD5
janusboandersen 11:6e862985089f 48 RFID RST = pin7 -> PB_1=D6 PTC9
janusboandersen 5:df18de5caf9f 49 RFID IRQ = pin5 -> -------- OPEN --------
janusboandersen 5:df18de5caf9f 50 =====================================================================
janusboandersen 5:df18de5caf9f 51
janusboandersen 5:df18de5caf9f 52 Connecting the "HOUSE"
janusboandersen 5:df18de5caf9f 53 Location Circuit latch function L432KC FRDM-KL25Z
janusboandersen 5:df18de5caf9f 54 ---------------------------------------------------------------------
janusboandersen 5:df18de5caf9f 55 Front door Set A1 A1
janusboandersen 5:df18de5caf9f 56 Front door Reset A2 A2
janusboandersen 5:df18de5caf9f 57 Room 1 door Set A3 A3
janusboandersen 5:df18de5caf9f 58 Room 1 door Reset A4 A4
janusboandersen 5:df18de5caf9f 59 =====================================================================
janusboandersen 5:df18de5caf9f 60
janusboandersen 5:df18de5caf9f 61 Mapping:
janusboandersen 5:df18de5caf9f 62 Front door = rfid1
janusboandersen 5:df18de5caf9f 63 Room 1 door = rfid2
janusboandersen 5:df18de5caf9f 64
janusboandersen 5:df18de5caf9f 65 */
andcor02 3:654723104cc9 66
kirchnet 2:a0c7513fb634 67 #include "mbed.h"
kirchnet 2:a0c7513fb634 68 #include "MFRC522.h"
janusboandersen 13:af3d7d8d77fc 69 #include "room.hpp"
kirchnet 2:a0c7513fb634 70
janusboandersen 14:0480ed7efd7f 71 #define COMPILING_FOR_KL25Z 1 //Set this to 1 to compile with KL25Z pins
kirchnet 2:a0c7513fb634 72
janusboandersen 5:df18de5caf9f 73 #if COMPILING_FOR_KL25Z
janusboandersen 5:df18de5caf9f 74 // FRDM KL25Z pins
janusboandersen 5:df18de5caf9f 75
janusboandersen 5:df18de5caf9f 76 //USB communication
janusboandersen 5:df18de5caf9f 77 #define SERIAL_TX PTE0 //UART0 USB
janusboandersen 5:df18de5caf9f 78 #define SERIAL_RX PTE1 //UART0 USB
janusboandersen 5:df18de5caf9f 79
janusboandersen 5:df18de5caf9f 80 //BUS
janusboandersen 5:df18de5caf9f 81 #define SPI_MISO PTD3
janusboandersen 5:df18de5caf9f 82 #define SPI_MOSI PTD2
janusboandersen 5:df18de5caf9f 83 #define SPI_SCK PTD1
janusboandersen 5:df18de5caf9f 84
janusboandersen 5:df18de5caf9f 85 //RFID 1
janusboandersen 5:df18de5caf9f 86 #define SPI_CS1 PTD0 //Chip select can be any digital pin
janusboandersen 5:df18de5caf9f 87 #define MF_RESET1 PTA13
janusboandersen 5:df18de5caf9f 88
janusboandersen 5:df18de5caf9f 89 //RFID 2
janusboandersen 5:df18de5caf9f 90 #define SPI_CS2 PTD5
janusboandersen 10:0a444736aeb8 91 #define MF_RESET2 PTC9
kirchnet 2:a0c7513fb634 92
janusboandersen 5:df18de5caf9f 93 //House circuit connections
janusboandersen 5:df18de5caf9f 94 #define FRONTDOOR_SET A1
janusboandersen 5:df18de5caf9f 95 #define FRONTDOOR_RST A2
janusboandersen 5:df18de5caf9f 96 #define ROOM1DOOR_SET A3
janusboandersen 5:df18de5caf9f 97 #define ROOM1DOOR_RST A4
kirchnet 2:a0c7513fb634 98
janusboandersen 5:df18de5caf9f 99 #else
janusboandersen 5:df18de5caf9f 100 // STM32 L432KC pins
janusboandersen 5:df18de5caf9f 101
janusboandersen 5:df18de5caf9f 102 //USB communication
janusboandersen 5:df18de5caf9f 103 #define SERIAL_TX USBTX //UART0 USB
janusboandersen 5:df18de5caf9f 104 #define SERIAL_RX USBRX //UART0 USB
janusboandersen 5:df18de5caf9f 105
janusboandersen 5:df18de5caf9f 106 //BUS
janusboandersen 5:df18de5caf9f 107 #define SPI_MISO D12
janusboandersen 5:df18de5caf9f 108 #define SPI_MOSI D11
janusboandersen 5:df18de5caf9f 109 #define SPI_SCK D13
janusboandersen 5:df18de5caf9f 110
janusboandersen 5:df18de5caf9f 111 //RFID 1
janusboandersen 5:df18de5caf9f 112 #define SPI_CS1 D10
janusboandersen 5:df18de5caf9f 113 #define MF_RESET1 D8
janusboandersen 5:df18de5caf9f 114
janusboandersen 5:df18de5caf9f 115 //RFID 2
janusboandersen 5:df18de5caf9f 116 #define SPI_CS2 D2
janusboandersen 5:df18de5caf9f 117 #define MF_RESET2 D6
kirchnet 2:a0c7513fb634 118
janusboandersen 5:df18de5caf9f 119 //House circuit connections
janusboandersen 5:df18de5caf9f 120 #define FRONTDOOR_SET A1
janusboandersen 5:df18de5caf9f 121 #define FRONTDOOR_RST A2
janusboandersen 9:369b261ddb10 122 #define ROOM1DOOR_SET A3
janusboandersen 9:369b261ddb10 123 #define ROOM1DOOR_RST A4
janusboandersen 5:df18de5caf9f 124
janusboandersen 5:df18de5caf9f 125 #endif
janusboandersen 5:df18de5caf9f 126
janusboandersen 5:df18de5caf9f 127 DigitalOut LedGreen(LED1); //Blinks when a card is read
kirchnet 2:a0c7513fb634 128
janusboandersen 11:6e862985089f 129 //Define the latches
janusboandersen 11:6e862985089f 130 DigitalOut r0_set(FRONTDOOR_SET);
janusboandersen 11:6e862985089f 131 DigitalOut r0_rst(FRONTDOOR_RST);
janusboandersen 11:6e862985089f 132 DigitalOut r1_set(ROOM1DOOR_SET);
janusboandersen 11:6e862985089f 133 DigitalOut r1_rst(ROOM1DOOR_RST);
janusboandersen 11:6e862985089f 134
janusboandersen 11:6e862985089f 135 bool r0_state;
janusboandersen 11:6e862985089f 136 bool r1_state;
janusboandersen 11:6e862985089f 137
janusboandersen 13:af3d7d8d77fc 138 Room r0;
janusboandersen 13:af3d7d8d77fc 139 Room r1;
janusboandersen 13:af3d7d8d77fc 140
janusboandersen 5:df18de5caf9f 141 //Serial connection to terminal for output
janusboandersen 5:df18de5caf9f 142 Serial pc(SERIAL_TX, SERIAL_RX);
janusboandersen 5:df18de5caf9f 143
janusboandersen 5:df18de5caf9f 144 //MFRC522 readers
janusboandersen 5:df18de5caf9f 145 MFRC522 rfid1(SPI_MOSI, SPI_MISO, SPI_SCK, SPI_CS1, MF_RESET1);
janusboandersen 5:df18de5caf9f 146 MFRC522 rfid2(SPI_MOSI, SPI_MISO, SPI_SCK, SPI_CS2, MF_RESET2);
janusboandersen 5:df18de5caf9f 147
janusboandersen 5:df18de5caf9f 148 int main(void) {
janusboandersen 13:af3d7d8d77fc 149 printf("Starting the Team 2 Pro 2 House...\r\n");
janusboandersen 13:af3d7d8d77fc 150
janusboandersen 13:af3d7d8d77fc 151 //Test Daniel's Room class
janusboandersen 13:af3d7d8d77fc 152 r0.RoomCall(12345);
janusboandersen 13:af3d7d8d77fc 153 r0.RoomCall(54321);
janusboandersen 13:af3d7d8d77fc 154 r0.RoomCall(12345);
janusboandersen 13:af3d7d8d77fc 155
janusboandersen 13:af3d7d8d77fc 156 wait_ms(1000);
janusboandersen 5:df18de5caf9f 157
janusboandersen 5:df18de5caf9f 158 // Init. RC522 chips
janusboandersen 5:df18de5caf9f 159 rfid1.PCD_Init();
janusboandersen 5:df18de5caf9f 160 rfid2.PCD_Init();
kirchnet 2:a0c7513fb634 161
janusboandersen 13:af3d7d8d77fc 162 printf("Resetting latches...\r\n");
janusboandersen 11:6e862985089f 163 r0_set = 0;
janusboandersen 11:6e862985089f 164 r0_rst = 1;
janusboandersen 11:6e862985089f 165 r0_state = false;
janusboandersen 11:6e862985089f 166 r1_set = 0;
janusboandersen 11:6e862985089f 167 r1_rst = 1;
janusboandersen 11:6e862985089f 168 r1_state = false;
janusboandersen 11:6e862985089f 169 wait_ms(500);
janusboandersen 11:6e862985089f 170 r0_rst = 0;
janusboandersen 11:6e862985089f 171 r1_rst = 0;
janusboandersen 13:af3d7d8d77fc 172 printf("Done.\r\n");
janusboandersen 11:6e862985089f 173
janusboandersen 13:af3d7d8d77fc 174 printf("Starting RFID monitoring...\r\n");
janusboandersen 11:6e862985089f 175
andcor02 3:654723104cc9 176 while (true) {
andcor02 3:654723104cc9 177 LedGreen = 1;
andcor02 3:654723104cc9 178
janusboandersen 5:df18de5caf9f 179 if (rfid1.PICC_IsNewCardPresent()) {
janusboandersen 5:df18de5caf9f 180 if (rfid1.PICC_ReadCardSerial()) {
andcor02 3:654723104cc9 181
andcor02 3:654723104cc9 182 LedGreen = 0;
kirchnet 2:a0c7513fb634 183
janusboandersen 8:d351d1714db8 184 printf("Front door: ");
janusboandersen 5:df18de5caf9f 185 for (uint8_t i = 0; i < rfid1.uid.size; i++) {
janusboandersen 8:d351d1714db8 186 printf(" %02X", rfid1.uid.uidByte[i]);
andcor02 3:654723104cc9 187 }
janusboandersen 13:af3d7d8d77fc 188 printf("\r\n");
janusboandersen 11:6e862985089f 189
janusboandersen 11:6e862985089f 190 //pulse room 0 (front door) latch
janusboandersen 11:6e862985089f 191 r0_state = !r0_state;
janusboandersen 11:6e862985089f 192 r0_set = r0_state;
janusboandersen 11:6e862985089f 193 r0_rst = !r0_state;
janusboandersen 11:6e862985089f 194 wait_ms(100);
janusboandersen 11:6e862985089f 195 r0_set = 0;
janusboandersen 11:6e862985089f 196 r0_rst = 0;
janusboandersen 11:6e862985089f 197
janusboandersen 11:6e862985089f 198 wait_ms(500);
andcor02 3:654723104cc9 199 }
janusboandersen 5:df18de5caf9f 200 } //end rfid1
janusboandersen 5:df18de5caf9f 201
andcor02 3:654723104cc9 202
janusboandersen 5:df18de5caf9f 203 if ( rfid2.PICC_IsNewCardPresent()) {
janusboandersen 5:df18de5caf9f 204 if (rfid2.PICC_ReadCardSerial()) {
janusboandersen 5:df18de5caf9f 205
janusboandersen 5:df18de5caf9f 206 LedGreen = 0;
janusboandersen 5:df18de5caf9f 207
janusboandersen 8:d351d1714db8 208 printf("Room 1: ");
janusboandersen 5:df18de5caf9f 209 for (uint8_t i = 0; i < rfid2.uid.size; i++) {
janusboandersen 8:d351d1714db8 210 printf(" %02X", rfid2.uid.uidByte[i]);
janusboandersen 5:df18de5caf9f 211 }
janusboandersen 13:af3d7d8d77fc 212 printf("\r\n");
janusboandersen 11:6e862985089f 213
janusboandersen 11:6e862985089f 214 //pulse room 1 (front door) latch
janusboandersen 11:6e862985089f 215 r1_state = !r1_state;
janusboandersen 11:6e862985089f 216 r1_set = r1_state;
janusboandersen 11:6e862985089f 217 r1_rst = !r1_state;
janusboandersen 11:6e862985089f 218 wait_ms(100);
janusboandersen 11:6e862985089f 219 r1_set = 0;
janusboandersen 11:6e862985089f 220 r1_rst = 0;
janusboandersen 11:6e862985089f 221
janusboandersen 5:df18de5caf9f 222 wait_ms(200);
janusboandersen 5:df18de5caf9f 223 }
janusboandersen 5:df18de5caf9f 224 } //end rfid2
janusboandersen 5:df18de5caf9f 225 } //end while
janusboandersen 5:df18de5caf9f 226 } //end main