Ricky Jiang
/
Nucleo_printf
rfid reader group 1
Diff: main.cpp
- Revision:
- 0:672cd82db097
- Child:
- 1:cedf6a3c299e
diff -r 000000000000 -r 672cd82db097 main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Fri Feb 28 15:20:53 2020 +0000 @@ -0,0 +1,145 @@ +#include "mbed.h" + +Serial pc(USBTX, USBRX); +Serial reader(PB_6, PB_7); +InterruptIn Green(PB_0); +DigitalIn CTS(PB_1); +int TXBsize = 1; +char TXB[16]; +uint8_t READRFID = 0b01010010; +uint8_t WRITEEEPROM = 0b01010000; +uint8_t POLLING = 0x1; +uint8_t POLLINGADDRESS = 0; +uint8_t RFIDTYPEADDRESS = 0x3; +uint8_t RFIDTYPE = 0x0; +uint8_t ADDRESS = 0; +uint8_t KEY = 0; +bool FINDINGUID = 0; +bool UIDFOUND = 0; +bool SENDSUCCESS = 0; +bool UIDTRIED = 0; +uint8_t UID[8]; +void readerRX() { + if(FINDINGUID == 1) + {UID[0]=reader.getc(); + UID[1]=reader.getc(); + UID[2]=reader.getc(); + UID[3]=reader.getc(); + UID[4]=reader.getc(); + UID[5]=reader.getc(); + UID[6]=reader.getc(); + UID[7]=reader.getc(); + + pc.printf("%d %d %d %d %d %d %d %d", UID[7],UID[6], UID[5], UID[4], UID[3], UID[2], UID[1], UID[0]); + UIDFOUND = 1; + FINDINGUID = 0; + } + else + {pc.putc(reader.getc());} + +} + +void GreenIRQ() { + bool sent = 0; + Timer timer; + timer.start(); + while(!UIDTRIED) + {sent = 0; + while (sent == 0) + {if(CTS == 0) + { FINDINGUID = 1; + reader.putc(0b01010101); + UIDTRIED = 1; + sent = 1;} + } + } + if(UIDTRIED == 1 && UIDFOUND == 0) + { FINDINGUID = 0;} + TXBsize = 3; + TXB[0]=READRFID; + TXB[1]=KEY; + TXB[2]=ADDRESS; + //TXB[2]=0xE0; + TXB[3]=0x04; + TXB[4]=0x01; + TXB[5]=0x50; + TXB[6]=0xD4; + TXB[7]=0xF2; + TXB[8]=0x23; + TXB[9]=0x87; + uint8_t TXBused = 0; + + + if(SENDSUCCESS == 1 && TXB[0] == READRFID) + {ADDRESS++; + SENDSUCCESS = 0; + if(ADDRESS == 0) + {KEY++; + if(KEY == 0b00100000) + {KEY = 0b10000000;} + else if(KEY == 0b10100000) + {KEY = 0b00000000;} + pc.printf("%d",KEY); + } + TXB[1]=ADDRESS; + TXB[2]=KEY; + } + + + // Time keeping + while (TXBused<TXBsize){ + if (CTS == 0 && sent == 0){ + reader.putc(TXB[TXBused]); + // pc.printf("%d",TXB[TXBused]); + TXBused++; + // sent = 1; + } + else if(CTS == 1) + {sent = 0; + } + } + SENDSUCCESS = 1; + +} + + +void initRFID() +{ bool sent = 0; + +while (sent ==0 ) + { if(CTS == 0) + {TXBsize = 3; + reader.putc(WRITEEEPROM); + reader.putc(RFIDTYPEADDRESS); + reader.putc(RFIDTYPE); + sent = 1; + } + } +while (CTS == 0){} +while (CTS == 1){} +sent = 0; +while (sent ==0 ) + { if(CTS == 0) + {TXBsize = 3; + reader.putc(WRITEEEPROM); + reader.putc(POLLINGADDRESS); + reader.putc(POLLING); + sent = 1; + } + } + + } + + +int main() { + + pc.baud(9600); + reader.baud(9600); + initRFID(); + reader.attach(&readerRX,Serial::RxIrq); + Green.fall(&GreenIRQ); // attach the address of the flip function to the rising edge + while(true) + { + } + +}