James Nagendran
/
4180_final_RFID
RFID code for SLVM
main.cpp
- Committer:
- jnagendran3
- Date:
- 2014-12-03
- Revision:
- 0:23e85e8989fc
File content as of revision 0:23e85e8989fc:
#include "mbed.h" #include "ID12RFID.h" ID12RFID rfid(p27); // uart rx Serial pc(USBTX,USBRX); DigitalOut interrupt(p23); DigitalOut MSB(p21); DigitalOut LSB(p22); DigitalOut led1(LED1); DigitalOut led2(LED2); DigitalOut led3(LED3); float speedModifiers[] = { 1.0, 0.7, 0.5, 0.3 }; int speedTags[] = { 5452129, 5449063, 36902518 }; volatile int tag = 0; volatile bool tagRead = false; int intCorrection; void readCard(); void checkTag(); void readCard() { // First, disable interrupts to allow critical sections to run through NVIC_DisableIRQ(UART2_IRQn); //led3 = !led3; if(rfid.readable()) { tag = rfid.read(); tagRead = true; bool match = false; int length = (sizeof(speedTags)/sizeof(speedTags[0]) < sizeof(speedModifiers)/sizeof(speedModifiers[0])) ? (sizeof(speedTags)/sizeof(speedTags[0])) : (sizeof(speedModifiers)/(sizeof(speedModifiers[0]))); for (int i=0; i<length; i++) { if (speedTags[i] == tag) { printf("RFID Tag number : %d\nSpeed now at %d\n", tag, ((int)(speedModifiers[i]*100))); match = true; intCorrection++; } } // For some reason, this function is entered twice each time an RFID tag is read. // This bit here is to detect that case and just ignore it, while still catching // other cases and displaying a warning if (!match and intCorrection == 0) { printf("[ WARNING ] Tag number %d not recognized\n", tag); } else if (!match == 1) { intCorrection = 0; } } NVIC_EnableIRQ(UART2_IRQn); } void checkTag() { } int main() { interrupt=0; rfid.setInterrupt(&readCard); printf("Entering main loop\n"); while(1) { if (tagRead) { checkTag(); if(tag==5452129 || tag==5449063) LSB=1; else LSB=0; if(tag==5449063 || tag==36902518) MSB=1; else MSB=0; interrupt=1; led1=MSB; led2=LSB; led3=interrupt; wait(.5); interrupt=0; led3=interrupt; tagRead = false;} //led1 = 1; wait(0.5); //led1 = 0; wait(0.5); wait(.1); } }