project van rtos

Dependencies:   mbed-os

Fork of MFRC522 by Martin Olejar

Committer:
Onon
Date:
Thu May 17 11:01:22 2018 +0000
Revision:
7:1c712013123b
Parent:
5:e45681989201
Child:
8:4638e3f14c41
rfid dinges

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
Bram122 5:e45681989201 23 DigitalOut led1(LED1);
Bram122 5:e45681989201 24 DigitalOut led2(LED2);
Bram122 5:e45681989201 25 DigitalOut led3(LED3);
Bram122 5:e45681989201 26 DigitalOut led4(LED4);
Onon 3:80837b470692 27 DigitalOut dg0(p27);
Onon 3:80837b470692 28 DigitalOut dg1(p28);
Onon 3:80837b470692 29 DigitalOut dg2(p29);
Onon 3:80837b470692 30 DigitalOut dg3(p30);
Onon 3:80837b470692 31
Onon 3:80837b470692 32 DigitalOut da(p26);
Onon 3:80837b470692 33 DigitalOut db(p25);
Onon 3:80837b470692 34 DigitalOut dc(p24);
Onon 3:80837b470692 35 DigitalOut dd(p23);
Onon 3:80837b470692 36 DigitalOut de(p22);
Onon 3:80837b470692 37 DigitalOut df(p21);
Onon 3:80837b470692 38 DigitalOut dg(p19);
Onon 3:80837b470692 39 DigitalOut ddp(p18);
Onon 3:80837b470692 40
Onon 3:80837b470692 41 AnalogIn a0(p20);
Onon 3:80837b470692 42
Bram122 5:e45681989201 43 DigitalOut IN1(p11);
Bram122 5:e45681989201 44 DigitalOut IN2(p12);
Bram122 5:e45681989201 45 DigitalOut IN3(p13);
Bram122 5:e45681989201 46 DigitalOut IN4(p14);
Bram122 5:e45681989201 47
Bram122 5:e45681989201 48 float sensorValue = 0.0000;
Bram122 4:325954591d0f 49
Onon 3:80837b470692 50 int sevenSeg;
Onon 3:80837b470692 51
Onon 3:80837b470692 52 void light7Seg(int nr, int output) {
Onon 3:80837b470692 53 da = 0;
Onon 3:80837b470692 54 db = 0;
Onon 3:80837b470692 55 dc = 0;
Onon 3:80837b470692 56 dd = 0;
Onon 3:80837b470692 57 de = 0;
Onon 3:80837b470692 58 df = 0;
Onon 3:80837b470692 59 dg = 0;
Onon 3:80837b470692 60 ddp = 0;
Onon 3:80837b470692 61 dg0 = 1;
Onon 3:80837b470692 62 dg1 = 1;
Onon 3:80837b470692 63 dg2 = 1;
Onon 3:80837b470692 64 dg3 = 1;
Onon 3:80837b470692 65 switch(output) {
Onon 3:80837b470692 66 case 0:
Onon 3:80837b470692 67 dg0 = 0;
Onon 3:80837b470692 68 break;
Onon 3:80837b470692 69 case 1:
Onon 3:80837b470692 70 dg1 = 0;
Onon 3:80837b470692 71 break;
Onon 3:80837b470692 72 case 2:
Onon 3:80837b470692 73 dg2 = 0;
Onon 3:80837b470692 74 break;
Onon 3:80837b470692 75 case 3:
Onon 3:80837b470692 76 dg3 = 0;
Onon 3:80837b470692 77 ddp = 1;
Onon 3:80837b470692 78 break;
Onon 3:80837b470692 79 default:
Onon 3:80837b470692 80 break;
Onon 3:80837b470692 81 }
Onon 3:80837b470692 82 switch(nr) {
Onon 3:80837b470692 83 case 0:
Onon 3:80837b470692 84 da = 1;
Onon 3:80837b470692 85 db = 1;
Onon 3:80837b470692 86 dc = 1;
Onon 3:80837b470692 87 dd = 1;
Onon 3:80837b470692 88 de = 1;
Onon 3:80837b470692 89 df = 1;
Onon 3:80837b470692 90 dg = 0;
Onon 3:80837b470692 91 break;
Onon 3:80837b470692 92 case 1:
Onon 3:80837b470692 93 da = 0;
Onon 3:80837b470692 94 db = 1;
Onon 3:80837b470692 95 dc = 1;
Onon 3:80837b470692 96 dd = 0;
Onon 3:80837b470692 97 de = 0;
Onon 3:80837b470692 98 df = 0;
Onon 3:80837b470692 99 dg = 0;
Onon 3:80837b470692 100 break;
Onon 3:80837b470692 101 case 2:
Onon 3:80837b470692 102 da = 1;
Onon 3:80837b470692 103 db = 1;
Onon 3:80837b470692 104 dc = 0;
Onon 3:80837b470692 105 dd = 1;
Onon 3:80837b470692 106 de = 1;
Onon 3:80837b470692 107 df = 0;
Onon 3:80837b470692 108 dg = 1;
Onon 3:80837b470692 109 break;
Onon 3:80837b470692 110 case 3:
Onon 3:80837b470692 111 da = 1;
Onon 3:80837b470692 112 db = 1;
Onon 3:80837b470692 113 dc = 1;
Onon 3:80837b470692 114 dd = 1;
Onon 3:80837b470692 115 de = 0;
Onon 3:80837b470692 116 df = 0;
Onon 3:80837b470692 117 dg = 1;
Onon 3:80837b470692 118 break;
Onon 3:80837b470692 119 case 4:
Onon 3:80837b470692 120 da = 0;
Onon 3:80837b470692 121 db = 1;
Onon 3:80837b470692 122 dc = 1;
Onon 3:80837b470692 123 dd = 0;
Onon 3:80837b470692 124 de = 0;
Onon 3:80837b470692 125 df = 1;
Onon 3:80837b470692 126 dg = 1;
Onon 3:80837b470692 127 break;
Onon 3:80837b470692 128 case 5:
Onon 3:80837b470692 129 da = 1;
Onon 3:80837b470692 130 db = 0;
Onon 3:80837b470692 131 dc = 1;
Onon 3:80837b470692 132 dd = 1;
Onon 3:80837b470692 133 de = 0;
Onon 3:80837b470692 134 df = 1;
Onon 3:80837b470692 135 dg = 1;
Onon 3:80837b470692 136 break;
Onon 3:80837b470692 137 case 6:
Onon 3:80837b470692 138 da = 1;
Onon 3:80837b470692 139 db = 0;
Onon 3:80837b470692 140 dc = 1;
Onon 3:80837b470692 141 dd = 1;
Onon 3:80837b470692 142 de = 1;
Onon 3:80837b470692 143 df = 1;
Onon 3:80837b470692 144 dg = 1;
Onon 3:80837b470692 145 break;
Onon 3:80837b470692 146 case 7:
Onon 3:80837b470692 147 da = 1;
Onon 3:80837b470692 148 db = 1;
Onon 3:80837b470692 149 dc = 1;
Onon 3:80837b470692 150 dd = 0;
Onon 3:80837b470692 151 de = 0;
Onon 3:80837b470692 152 df = 0;
Onon 3:80837b470692 153 dg = 0;
Onon 3:80837b470692 154 break;
Onon 3:80837b470692 155 case 8:
Onon 3:80837b470692 156 da = 1;
Onon 3:80837b470692 157 db = 1;
Onon 3:80837b470692 158 dc = 1;
Onon 3:80837b470692 159 dd = 1;
Onon 3:80837b470692 160 de = 1;
Onon 3:80837b470692 161 df = 1;
Onon 3:80837b470692 162 dg = 1;
Onon 3:80837b470692 163 break;
Onon 3:80837b470692 164 case 9:
Onon 3:80837b470692 165 da = 1;
Onon 3:80837b470692 166 db = 1;
Onon 3:80837b470692 167 dc = 1;
Onon 3:80837b470692 168 dd = 1;
Onon 3:80837b470692 169 de = 0;
Onon 3:80837b470692 170 df = 1;
Onon 3:80837b470692 171 dg = 1;
Onon 3:80837b470692 172 break;
Onon 3:80837b470692 173 case 10:
Onon 3:80837b470692 174 da = 1;
Onon 3:80837b470692 175 db = 1;
Onon 3:80837b470692 176 dc = 1;
Onon 3:80837b470692 177 dd = 0;
Onon 3:80837b470692 178 de = 1;
Onon 3:80837b470692 179 df = 1;
Onon 3:80837b470692 180 dg = 1;
Onon 3:80837b470692 181 break;
Onon 3:80837b470692 182 case 11:
Onon 3:80837b470692 183 da = 0;
Onon 3:80837b470692 184 db = 0;
Onon 3:80837b470692 185 dc = 1;
Onon 3:80837b470692 186 dd = 1;
Onon 3:80837b470692 187 de = 1;
Onon 3:80837b470692 188 df = 1;
Onon 3:80837b470692 189 dg = 1;
Onon 3:80837b470692 190 break;
Onon 3:80837b470692 191 case 12:
Onon 3:80837b470692 192 da = 1;
Onon 3:80837b470692 193 db = 0;
Onon 3:80837b470692 194 dc = 0;
Onon 3:80837b470692 195 dd = 1;
Onon 3:80837b470692 196 de = 1;
Onon 3:80837b470692 197 df = 1;
Onon 3:80837b470692 198 dg = 0;
Onon 3:80837b470692 199 break;
Onon 3:80837b470692 200 case 13:
Onon 3:80837b470692 201 da = 0;
Onon 3:80837b470692 202 db = 1;
Onon 3:80837b470692 203 dc = 1;
Onon 3:80837b470692 204 dd = 1;
Onon 3:80837b470692 205 de = 1;
Onon 3:80837b470692 206 df = 0;
Onon 3:80837b470692 207 dg = 1;
Onon 3:80837b470692 208 break;
Onon 3:80837b470692 209 case 14:
Onon 3:80837b470692 210 da = 1;
Onon 3:80837b470692 211 db = 0;
Onon 3:80837b470692 212 dc = 0;
Onon 3:80837b470692 213 dd = 1;
Onon 3:80837b470692 214 de = 1;
Onon 3:80837b470692 215 df = 1;
Onon 3:80837b470692 216 dg = 1;
Onon 3:80837b470692 217 break;
Onon 3:80837b470692 218 case 15:
Onon 3:80837b470692 219 da = 1;
Onon 3:80837b470692 220 db = 0;
Onon 3:80837b470692 221 dc = 0;
Onon 3:80837b470692 222 dd = 0;
Onon 3:80837b470692 223 de = 1;
Onon 3:80837b470692 224 df = 1;
Onon 3:80837b470692 225 dg = 1;
Onon 3:80837b470692 226 break;
Onon 3:80837b470692 227 default:
Onon 3:80837b470692 228 da = 0;
Onon 3:80837b470692 229 db = 0;
Onon 3:80837b470692 230 dc = 0;
Onon 3:80837b470692 231 dd = 0;
Onon 3:80837b470692 232 de = 0;
Onon 3:80837b470692 233 df = 0;
Onon 3:80837b470692 234 dg = 0;
Onon 3:80837b470692 235 ddp = 0;
Onon 3:80837b470692 236 }
Onon 3:80837b470692 237 }
Onon 3:80837b470692 238
Bram122 5:e45681989201 239 void control() {
Bram122 5:e45681989201 240 while (true) {
Bram122 5:e45681989201 241 led1 = IN1;
Bram122 5:e45681989201 242 led2 = IN2;
Bram122 5:e45681989201 243 led3 = IN3;
Bram122 5:e45681989201 244 led4 = IN4;
Bram122 5:e45681989201 245 }
Bram122 5:e45681989201 246 }
Bram122 5:e45681989201 247
Bram122 5:e45681989201 248 void motorControl() {
Bram122 5:e45681989201 249 while(true) {
Bram122 5:e45681989201 250 IN1 = 1;
Bram122 5:e45681989201 251 IN2 = 0;
Bram122 5:e45681989201 252 IN3 = 1;
Bram122 5:e45681989201 253 IN4 = 0;
Bram122 5:e45681989201 254
Bram122 5:e45681989201 255 Thread::wait(100 - sensorValue * 100);
Bram122 5:e45681989201 256
Bram122 5:e45681989201 257 IN1 = 1;
Bram122 5:e45681989201 258 IN2 = 0;
Bram122 5:e45681989201 259 IN3 = 0;
Bram122 5:e45681989201 260 IN4 = 1;
Bram122 5:e45681989201 261
Bram122 5:e45681989201 262 Thread::wait(100 - sensorValue * 100);
Bram122 5:e45681989201 263
Bram122 5:e45681989201 264 IN1 = 0;
Bram122 5:e45681989201 265 IN2 = 1;
Bram122 5:e45681989201 266 IN3 = 0;
Bram122 5:e45681989201 267 IN4 = 1;
Bram122 5:e45681989201 268
Bram122 5:e45681989201 269 Thread::wait(100 - sensorValue * 100);
Bram122 5:e45681989201 270
Bram122 5:e45681989201 271 IN1 = 0;
Bram122 5:e45681989201 272 IN2 = 1;
Bram122 5:e45681989201 273 IN3 = 1;
Bram122 5:e45681989201 274 IN4 = 0;
Bram122 5:e45681989201 275
Bram122 5:e45681989201 276 Thread::wait(100 - sensorValue * 100);
Bram122 5:e45681989201 277 }
Bram122 5:e45681989201 278 }
Bram122 5:e45681989201 279
Bram122 5:e45681989201 280 void displayNumber7Seg() {
Bram122 5:e45681989201 281 while (true) {
Bram122 5:e45681989201 282 float nr = sensorValue;
Bram122 5:e45681989201 283 nr *= 1000;
Bram122 5:e45681989201 284 int nrint = (int) nr;
Bram122 5:e45681989201 285 int digits[4];
Bram122 5:e45681989201 286 int i = 3;
Bram122 5:e45681989201 287 while (nrint >= 0) {
Bram122 5:e45681989201 288 int digit = nrint % 10;
Bram122 5:e45681989201 289 digits[i] = digit;
Bram122 5:e45681989201 290 if(i == 0) {
Bram122 5:e45681989201 291 break;
Bram122 5:e45681989201 292 }
Bram122 5:e45681989201 293 --i;
Bram122 5:e45681989201 294 nrint /= 10;
Bram122 5:e45681989201 295 }
Bram122 5:e45681989201 296 for(int i = 0; i < 4; i++) {
Bram122 5:e45681989201 297 light7Seg(digits[3-i], i);
Bram122 5:e45681989201 298 Thread::wait(100/24); //60Hz
Onon 3:80837b470692 299 }
Onon 3:80837b470692 300 }
Onon 3:80837b470692 301 }
Onon 2:c719944e080b 302
Bram122 4:325954591d0f 303 void samplePotentio() {
Bram122 4:325954591d0f 304 while (true) {
Bram122 4:325954591d0f 305 float samples[20];
Bram122 4:325954591d0f 306 float sum = 0;
Bram122 4:325954591d0f 307 for(int i = 0; i < 20; i++) {
Bram122 4:325954591d0f 308 samples[i] = a0.read();
Bram122 5:e45681989201 309 Thread::wait(5);
Bram122 4:325954591d0f 310 }
Bram122 5:e45681989201 311 for (int i = 0; i < 20; i++) {
Bram122 4:325954591d0f 312 sum = sum + samples[i];
Bram122 4:325954591d0f 313 }
Bram122 4:325954591d0f 314 sensorValue = sum / 20;
Bram122 4:325954591d0f 315 }
Bram122 4:325954591d0f 316 }
Bram122 4:325954591d0f 317
Onon 7:1c712013123b 318 void checkRFID() {
Onon 7:1c712013123b 319 while (true) {
Onon 7:1c712013123b 320
Onon 7:1c712013123b 321 // Look for new cards
Onon 7:1c712013123b 322 if ( ! RfChip.PICC_IsNewCardPresent())
Onon 7:1c712013123b 323 {
Onon 7:1c712013123b 324 Thread::wait(500);
Onon 7:1c712013123b 325 continue;
Onon 7:1c712013123b 326 }
Onon 7:1c712013123b 327
Onon 7:1c712013123b 328 // Select one of the cards
Onon 7:1c712013123b 329 if ( ! RfChip.PICC_ReadCardSerial())
Onon 7:1c712013123b 330 {
Onon 7:1c712013123b 331 Thread::wait(500);
Onon 7:1c712013123b 332 continue;
Onon 7:1c712013123b 333 }
Onon 7:1c712013123b 334
Onon 7:1c712013123b 335 // Print Card UID
Onon 7:1c712013123b 336 pc.printf("Card UID: ");
Onon 7:1c712013123b 337 for (uint8_t i = 0; i < RfChip.uid.size; i++)
Onon 7:1c712013123b 338 {
Onon 7:1c712013123b 339 pc.printf(" %X02", RfChip.uid.uidByte[i]);
Onon 7:1c712013123b 340 }
Onon 7:1c712013123b 341 pc.printf("\n\r");
Onon 7:1c712013123b 342
Onon 7:1c712013123b 343 // Print Card type
Onon 7:1c712013123b 344 uint8_t piccType = RfChip.PICC_GetType(RfChip.uid.sak);
Onon 7:1c712013123b 345 pc.printf("PICC Type: %s \n\r", RfChip.PICC_GetTypeName(piccType));
Onon 7:1c712013123b 346 Thread::wait(1000);
Onon 7:1c712013123b 347 }
Onon 7:1c712013123b 348 }
Onon 7:1c712013123b 349
Onon 7:1c712013123b 350
Onon 2:c719944e080b 351 int main(void) {
Onon 2:c719944e080b 352 pc.printf("Start");
Bram122 4:325954591d0f 353
Bram122 5:e45681989201 354 Thread thread_sample;
Bram122 5:e45681989201 355 thread_sample.start(samplePotentio);
Bram122 5:e45681989201 356
Bram122 5:e45681989201 357 Thread thread_control;
Bram122 5:e45681989201 358 thread_control.start(control);
Bram122 5:e45681989201 359
Bram122 5:e45681989201 360 Thread thread_motor(osPriorityRealtime);
Bram122 5:e45681989201 361 thread_motor.start(motorControl);
Bram122 5:e45681989201 362
Bram122 5:e45681989201 363 Thread thread_display(osPriorityRealtime);
Bram122 5:e45681989201 364 thread_display.start(displayNumber7Seg);
Bram122 4:325954591d0f 365
Onon 7:1c712013123b 366 Thread thread_rfid;
Onon 7:1c712013123b 367 thread_rfid.start(checkRFID);
Onon 2:c719944e080b 368 // Set debug UART speed
Onon 3:80837b470692 369 //pc.baud(115200);
Onon 2:c719944e080b 370
Onon 2:c719944e080b 371 // Init. RC522 Chip
Onon 2:c719944e080b 372 RfChip.PCD_Init();
Onon 3:80837b470692 373
Onon 3:80837b470692 374 dg0 = 0;
Onon 3:80837b470692 375 dg1 = 0;
Onon 3:80837b470692 376 dg2 = 0;
Onon 3:80837b470692 377 dg3 = 0;
Onon 2:c719944e080b 378
Bram122 5:e45681989201 379 while (true) {
Onon 3:80837b470692 380
Onon 2:c719944e080b 381 // Look for new cards
Onon 3:80837b470692 382 /*if ( ! RfChip.PICC_IsNewCardPresent())
Onon 2:c719944e080b 383 {
Onon 2:c719944e080b 384 wait_ms(500);
Onon 2:c719944e080b 385 continue;
Onon 2:c719944e080b 386 }
Onon 2:c719944e080b 387
Onon 2:c719944e080b 388 // Select one of the cards
Onon 2:c719944e080b 389 if ( ! RfChip.PICC_ReadCardSerial())
Onon 2:c719944e080b 390 {
Onon 2:c719944e080b 391 wait_ms(500);
Onon 2:c719944e080b 392 continue;
Onon 2:c719944e080b 393 }
Onon 2:c719944e080b 394
Onon 2:c719944e080b 395 // Print Card UID
Onon 2:c719944e080b 396 pc.printf("Card UID: ");
Onon 2:c719944e080b 397 for (uint8_t i = 0; i < RfChip.uid.size; i++)
Onon 2:c719944e080b 398 {
Onon 2:c719944e080b 399 led = 1;
Onon 2:c719944e080b 400 pc.printf(" %X02", RfChip.uid.uidByte[i]);
Onon 2:c719944e080b 401 }
Onon 2:c719944e080b 402 pc.printf("\n\r");
Onon 2:c719944e080b 403
Onon 2:c719944e080b 404 // Print Card type
Onon 2:c719944e080b 405 uint8_t piccType = RfChip.PICC_GetType(RfChip.uid.sak);
Onon 2:c719944e080b 406 pc.printf("PICC Type: %s \n\r", RfChip.PICC_GetTypeName(piccType));
Onon 2:c719944e080b 407 wait_ms(1000);
Onon 3:80837b470692 408 }*/
Onon 3:80837b470692 409 }
Onon 2:c719944e080b 410 }
Onon 3:80837b470692 411
Onon 3:80837b470692 412
Onon 3:80837b470692 413
Onon 3:80837b470692 414