Dependencies:   mbed

main.cpp

Committer:
rickyqqj
Date:
2020-02-28
Revision:
0:672cd82db097
Child:
1:cedf6a3c299e

File content as of revision 0:672cd82db097:

#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)
    {
    }
    
}