project van rtos

Dependencies:   mbed-os

Fork of MFRC522 by Martin Olejar

Committer:
Bram122
Date:
Tue May 15 11:22:14 2018 +0000
Revision:
4:325954591d0f
Parent:
3:80837b470692
Child:
5:e45681989201
with first thread and sample averaging

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Onon 2:c719944e080b 1
Onon 2:c719944e080b 2 #include "mbed.h"
Onon 2:c719944e080b 3 #include "MFRC522.h"
Bram122 4:325954591d0f 4 #include "rtos.h"
Onon 2:c719944e080b 5
Onon 2:c719944e080b 6 //KL25Z Pins for MFRC522 SPI interface
Onon 2:c719944e080b 7 #define SPI_MOSI p5
Onon 2:c719944e080b 8 #define SPI_MISO p6
Onon 2:c719944e080b 9 #define SPI_SCLK p7
Onon 2:c719944e080b 10 #define SPI_CS p9
Onon 2:c719944e080b 11 // KL25Z Pin for MFRC522 reset
Onon 2:c719944e080b 12 #define MF_RESET p8
Onon 2:c719944e080b 13 /**
Onon 2:c719944e080b 14 // KL25Z Pins for Debug UART port
Onon 2:c719944e080b 15 #define UART_RX gnd
Onon 2:c719944e080b 16 #define UART_TX gnd
Onon 2:c719944e080b 17
Onon 2:c719944e080b 18 Serial DebugUART(UART_TX, UART_RX);
Onon 2:c719944e080b 19 **/
Onon 2:c719944e080b 20 MFRC522 RfChip(SPI_MOSI, SPI_MISO, SPI_SCLK, SPI_CS, MF_RESET);
Onon 2:c719944e080b 21 Serial pc(USBTX, USBRX);
Onon 2:c719944e080b 22
Onon 2:c719944e080b 23 DigitalOut led(LED1);
Onon 3:80837b470692 24 DigitalOut dg0(p27);
Onon 3:80837b470692 25 DigitalOut dg1(p28);
Onon 3:80837b470692 26 DigitalOut dg2(p29);
Onon 3:80837b470692 27 DigitalOut dg3(p30);
Onon 3:80837b470692 28
Onon 3:80837b470692 29 DigitalOut da(p26);
Onon 3:80837b470692 30 DigitalOut db(p25);
Onon 3:80837b470692 31 DigitalOut dc(p24);
Onon 3:80837b470692 32 DigitalOut dd(p23);
Onon 3:80837b470692 33 DigitalOut de(p22);
Onon 3:80837b470692 34 DigitalOut df(p21);
Onon 3:80837b470692 35 DigitalOut dg(p19);
Onon 3:80837b470692 36 DigitalOut ddp(p18);
Onon 3:80837b470692 37
Onon 3:80837b470692 38 AnalogIn a0(p20);
Onon 3:80837b470692 39
Bram122 4:325954591d0f 40 float sensorValue = 0;
Bram122 4:325954591d0f 41
Onon 3:80837b470692 42 int sevenSeg;
Onon 3:80837b470692 43
Onon 3:80837b470692 44 void light7Seg(int nr, int output) {
Onon 3:80837b470692 45 da = 0;
Onon 3:80837b470692 46 db = 0;
Onon 3:80837b470692 47 dc = 0;
Onon 3:80837b470692 48 dd = 0;
Onon 3:80837b470692 49 de = 0;
Onon 3:80837b470692 50 df = 0;
Onon 3:80837b470692 51 dg = 0;
Onon 3:80837b470692 52 ddp = 0;
Onon 3:80837b470692 53 dg0 = 1;
Onon 3:80837b470692 54 dg1 = 1;
Onon 3:80837b470692 55 dg2 = 1;
Onon 3:80837b470692 56 dg3 = 1;
Onon 3:80837b470692 57 switch(output) {
Onon 3:80837b470692 58 case 0:
Onon 3:80837b470692 59 dg0 = 0;
Onon 3:80837b470692 60 break;
Onon 3:80837b470692 61 case 1:
Onon 3:80837b470692 62 dg1 = 0;
Onon 3:80837b470692 63 break;
Onon 3:80837b470692 64 case 2:
Onon 3:80837b470692 65 dg2 = 0;
Onon 3:80837b470692 66 break;
Onon 3:80837b470692 67 case 3:
Onon 3:80837b470692 68 dg3 = 0;
Onon 3:80837b470692 69 ddp = 1;
Onon 3:80837b470692 70 break;
Onon 3:80837b470692 71 default:
Onon 3:80837b470692 72 break;
Onon 3:80837b470692 73 }
Onon 3:80837b470692 74 switch(nr) {
Onon 3:80837b470692 75 case 0:
Onon 3:80837b470692 76 da = 1;
Onon 3:80837b470692 77 db = 1;
Onon 3:80837b470692 78 dc = 1;
Onon 3:80837b470692 79 dd = 1;
Onon 3:80837b470692 80 de = 1;
Onon 3:80837b470692 81 df = 1;
Onon 3:80837b470692 82 dg = 0;
Onon 3:80837b470692 83 break;
Onon 3:80837b470692 84 case 1:
Onon 3:80837b470692 85 da = 0;
Onon 3:80837b470692 86 db = 1;
Onon 3:80837b470692 87 dc = 1;
Onon 3:80837b470692 88 dd = 0;
Onon 3:80837b470692 89 de = 0;
Onon 3:80837b470692 90 df = 0;
Onon 3:80837b470692 91 dg = 0;
Onon 3:80837b470692 92 break;
Onon 3:80837b470692 93 case 2:
Onon 3:80837b470692 94 da = 1;
Onon 3:80837b470692 95 db = 1;
Onon 3:80837b470692 96 dc = 0;
Onon 3:80837b470692 97 dd = 1;
Onon 3:80837b470692 98 de = 1;
Onon 3:80837b470692 99 df = 0;
Onon 3:80837b470692 100 dg = 1;
Onon 3:80837b470692 101 break;
Onon 3:80837b470692 102 case 3:
Onon 3:80837b470692 103 da = 1;
Onon 3:80837b470692 104 db = 1;
Onon 3:80837b470692 105 dc = 1;
Onon 3:80837b470692 106 dd = 1;
Onon 3:80837b470692 107 de = 0;
Onon 3:80837b470692 108 df = 0;
Onon 3:80837b470692 109 dg = 1;
Onon 3:80837b470692 110 break;
Onon 3:80837b470692 111 case 4:
Onon 3:80837b470692 112 da = 0;
Onon 3:80837b470692 113 db = 1;
Onon 3:80837b470692 114 dc = 1;
Onon 3:80837b470692 115 dd = 0;
Onon 3:80837b470692 116 de = 0;
Onon 3:80837b470692 117 df = 1;
Onon 3:80837b470692 118 dg = 1;
Onon 3:80837b470692 119 break;
Onon 3:80837b470692 120 case 5:
Onon 3:80837b470692 121 da = 1;
Onon 3:80837b470692 122 db = 0;
Onon 3:80837b470692 123 dc = 1;
Onon 3:80837b470692 124 dd = 1;
Onon 3:80837b470692 125 de = 0;
Onon 3:80837b470692 126 df = 1;
Onon 3:80837b470692 127 dg = 1;
Onon 3:80837b470692 128 break;
Onon 3:80837b470692 129 case 6:
Onon 3:80837b470692 130 da = 1;
Onon 3:80837b470692 131 db = 0;
Onon 3:80837b470692 132 dc = 1;
Onon 3:80837b470692 133 dd = 1;
Onon 3:80837b470692 134 de = 1;
Onon 3:80837b470692 135 df = 1;
Onon 3:80837b470692 136 dg = 1;
Onon 3:80837b470692 137 break;
Onon 3:80837b470692 138 case 7:
Onon 3:80837b470692 139 da = 1;
Onon 3:80837b470692 140 db = 1;
Onon 3:80837b470692 141 dc = 1;
Onon 3:80837b470692 142 dd = 0;
Onon 3:80837b470692 143 de = 0;
Onon 3:80837b470692 144 df = 0;
Onon 3:80837b470692 145 dg = 0;
Onon 3:80837b470692 146 break;
Onon 3:80837b470692 147 case 8:
Onon 3:80837b470692 148 da = 1;
Onon 3:80837b470692 149 db = 1;
Onon 3:80837b470692 150 dc = 1;
Onon 3:80837b470692 151 dd = 1;
Onon 3:80837b470692 152 de = 1;
Onon 3:80837b470692 153 df = 1;
Onon 3:80837b470692 154 dg = 1;
Onon 3:80837b470692 155 break;
Onon 3:80837b470692 156 case 9:
Onon 3:80837b470692 157 da = 1;
Onon 3:80837b470692 158 db = 1;
Onon 3:80837b470692 159 dc = 1;
Onon 3:80837b470692 160 dd = 1;
Onon 3:80837b470692 161 de = 0;
Onon 3:80837b470692 162 df = 1;
Onon 3:80837b470692 163 dg = 1;
Onon 3:80837b470692 164 break;
Onon 3:80837b470692 165 case 10:
Onon 3:80837b470692 166 da = 1;
Onon 3:80837b470692 167 db = 1;
Onon 3:80837b470692 168 dc = 1;
Onon 3:80837b470692 169 dd = 0;
Onon 3:80837b470692 170 de = 1;
Onon 3:80837b470692 171 df = 1;
Onon 3:80837b470692 172 dg = 1;
Onon 3:80837b470692 173 break;
Onon 3:80837b470692 174 case 11:
Onon 3:80837b470692 175 da = 0;
Onon 3:80837b470692 176 db = 0;
Onon 3:80837b470692 177 dc = 1;
Onon 3:80837b470692 178 dd = 1;
Onon 3:80837b470692 179 de = 1;
Onon 3:80837b470692 180 df = 1;
Onon 3:80837b470692 181 dg = 1;
Onon 3:80837b470692 182 break;
Onon 3:80837b470692 183 case 12:
Onon 3:80837b470692 184 da = 1;
Onon 3:80837b470692 185 db = 0;
Onon 3:80837b470692 186 dc = 0;
Onon 3:80837b470692 187 dd = 1;
Onon 3:80837b470692 188 de = 1;
Onon 3:80837b470692 189 df = 1;
Onon 3:80837b470692 190 dg = 0;
Onon 3:80837b470692 191 break;
Onon 3:80837b470692 192 case 13:
Onon 3:80837b470692 193 da = 0;
Onon 3:80837b470692 194 db = 1;
Onon 3:80837b470692 195 dc = 1;
Onon 3:80837b470692 196 dd = 1;
Onon 3:80837b470692 197 de = 1;
Onon 3:80837b470692 198 df = 0;
Onon 3:80837b470692 199 dg = 1;
Onon 3:80837b470692 200 break;
Onon 3:80837b470692 201 case 14:
Onon 3:80837b470692 202 da = 1;
Onon 3:80837b470692 203 db = 0;
Onon 3:80837b470692 204 dc = 0;
Onon 3:80837b470692 205 dd = 1;
Onon 3:80837b470692 206 de = 1;
Onon 3:80837b470692 207 df = 1;
Onon 3:80837b470692 208 dg = 1;
Onon 3:80837b470692 209 break;
Onon 3:80837b470692 210 case 15:
Onon 3:80837b470692 211 da = 1;
Onon 3:80837b470692 212 db = 0;
Onon 3:80837b470692 213 dc = 0;
Onon 3:80837b470692 214 dd = 0;
Onon 3:80837b470692 215 de = 1;
Onon 3:80837b470692 216 df = 1;
Onon 3:80837b470692 217 dg = 1;
Onon 3:80837b470692 218 break;
Onon 3:80837b470692 219 default:
Onon 3:80837b470692 220 da = 0;
Onon 3:80837b470692 221 db = 0;
Onon 3:80837b470692 222 dc = 0;
Onon 3:80837b470692 223 dd = 0;
Onon 3:80837b470692 224 de = 0;
Onon 3:80837b470692 225 df = 0;
Onon 3:80837b470692 226 dg = 0;
Onon 3:80837b470692 227 ddp = 0;
Onon 3:80837b470692 228 }
Onon 3:80837b470692 229 }
Onon 3:80837b470692 230
Onon 3:80837b470692 231 void displayNumber7Seg(float nr) {
Onon 3:80837b470692 232 nr *= 1000;
Onon 3:80837b470692 233 int nrint = (int) nr;
Onon 3:80837b470692 234 int digits[4];
Onon 3:80837b470692 235 int i = 3;
Onon 3:80837b470692 236 while (nrint > 0) {
Onon 3:80837b470692 237 int digit = nrint % 10;
Onon 3:80837b470692 238 digits[i] = digit;
Onon 3:80837b470692 239 if(i == 0) {
Onon 3:80837b470692 240 break;
Onon 3:80837b470692 241 }
Onon 3:80837b470692 242 i--;
Onon 3:80837b470692 243 nrint /= 10;
Onon 3:80837b470692 244 }
Onon 3:80837b470692 245 for(int i = 0; i < 4; i++) {
Onon 3:80837b470692 246 light7Seg(digits[3-i], i);
Onon 3:80837b470692 247 wait_ms(100/24); //60Hz
Onon 3:80837b470692 248 }
Onon 3:80837b470692 249 }
Onon 2:c719944e080b 250
Bram122 4:325954591d0f 251 void samplePotentio() {
Bram122 4:325954591d0f 252 while (true) {
Bram122 4:325954591d0f 253 float samples[20];
Bram122 4:325954591d0f 254 float sum = 0;
Bram122 4:325954591d0f 255 for(int i = 0; i < 20; i++) {
Bram122 4:325954591d0f 256 samples[i] = a0.read();
Bram122 4:325954591d0f 257 wait_ms(10);
Bram122 4:325954591d0f 258 }
Bram122 4:325954591d0f 259 for (int i = 0; i < 9; i++) {
Bram122 4:325954591d0f 260 sum = sum + samples[i];
Bram122 4:325954591d0f 261 }
Bram122 4:325954591d0f 262 sensorValue = sum / 20;
Bram122 4:325954591d0f 263 }
Bram122 4:325954591d0f 264 }
Bram122 4:325954591d0f 265
Onon 2:c719944e080b 266 int main(void) {
Onon 2:c719944e080b 267 pc.printf("Start");
Bram122 4:325954591d0f 268
Bram122 4:325954591d0f 269 Thread thread_display;
Bram122 4:325954591d0f 270 thread_display.start(samplePotentio);
Bram122 4:325954591d0f 271
Onon 2:c719944e080b 272 // Set debug UART speed
Onon 3:80837b470692 273 //pc.baud(115200);
Onon 2:c719944e080b 274
Onon 2:c719944e080b 275 // Init. RC522 Chip
Onon 2:c719944e080b 276 RfChip.PCD_Init();
Onon 3:80837b470692 277
Onon 3:80837b470692 278 dg0 = 0;
Onon 3:80837b470692 279 dg1 = 0;
Onon 3:80837b470692 280 dg2 = 0;
Onon 3:80837b470692 281 dg3 = 0;
Onon 2:c719944e080b 282
Onon 2:c719944e080b 283 while (true) {
Onon 3:80837b470692 284 led = 0;
Onon 3:80837b470692 285
Bram122 4:325954591d0f 286 displayNumber7Seg(sensorValue);
Onon 3:80837b470692 287
Onon 3:80837b470692 288 //printf("%0.4f \n\r", a0.read());
Onon 2:c719944e080b 289 // Look for new cards
Onon 3:80837b470692 290 /*if ( ! RfChip.PICC_IsNewCardPresent())
Onon 2:c719944e080b 291 {
Onon 2:c719944e080b 292 wait_ms(500);
Onon 2:c719944e080b 293 continue;
Onon 2:c719944e080b 294 }
Onon 2:c719944e080b 295
Onon 2:c719944e080b 296 // Select one of the cards
Onon 2:c719944e080b 297 if ( ! RfChip.PICC_ReadCardSerial())
Onon 2:c719944e080b 298 {
Onon 2:c719944e080b 299 wait_ms(500);
Onon 2:c719944e080b 300 continue;
Onon 2:c719944e080b 301 }
Onon 2:c719944e080b 302
Onon 2:c719944e080b 303 // Print Card UID
Onon 2:c719944e080b 304 pc.printf("Card UID: ");
Onon 2:c719944e080b 305 for (uint8_t i = 0; i < RfChip.uid.size; i++)
Onon 2:c719944e080b 306 {
Onon 2:c719944e080b 307 led = 1;
Onon 2:c719944e080b 308 pc.printf(" %X02", RfChip.uid.uidByte[i]);
Onon 2:c719944e080b 309 }
Onon 2:c719944e080b 310 pc.printf("\n\r");
Onon 2:c719944e080b 311
Onon 2:c719944e080b 312 // Print Card type
Onon 2:c719944e080b 313 uint8_t piccType = RfChip.PICC_GetType(RfChip.uid.sak);
Onon 2:c719944e080b 314 pc.printf("PICC Type: %s \n\r", RfChip.PICC_GetTypeName(piccType));
Onon 2:c719944e080b 315 wait_ms(1000);
Onon 3:80837b470692 316 }*/
Onon 3:80837b470692 317 }
Onon 2:c719944e080b 318 }
Onon 3:80837b470692 319
Onon 3:80837b470692 320
Onon 3:80837b470692 321
Onon 3:80837b470692 322