Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp@14:0480ed7efd7f, 2019-05-03 (annotated)
- 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?
User | Revision | Line number | New 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 |