Dependencies:   mbed qnode2 MFRC522-2 eeprom Buffer2

main.cpp

Committer:
alejo5214416
Date:
2018-07-28
Revision:
4:2208f7e44ac6
Parent:
3:5d963b3e042f
Child:
5:24335ea5e4d3

File content as of revision 4:2208f7e44ac6:

#include "mbed.h"
#include "MFRC522.h"
#include "qnode.h"
#include "Buffer.h"
#include "eeprom.h"
#define eepr_addr 0x50
uint16_t const count_address=0x0000;


I2C i2c(p28,p27);
DigitalOut led4(LED4);
DigitalOut led3(LED3);
DigitalOut led1(LED1);
DigitalOut enable(p19);
Serial pc(USBTX, USBRX);
Serial disp_uno(p9, p10);  // tx, rx
MFRC522    RfChip   (p5, p6, p7, p8, p21);
circular_buf_t buf; // ---->BUFFER CIRCULAR buf
InterruptIn event(p16);
bool flag1=false;
bool flag2=false;
bool flag3=false;
bool flag4=false;
volatile bool buf1ready=false;
volatile bool buf2ready=false;
uint16_t address=0x0001;


void interrupcion();
void disp_unoTx_isr();
void disp_unoRx_isr();

int main()
{
    freq(400000);
    event.rise(&interrupcion);
    disp_uno.attach(&disp_unoRx_isr,Serial::RxIrq);
    disp_uno.attach(&disp_unoTx_isr,Serial::TxIrq);
    struct Queue *q = createQueue();
    buf.size = 5;
    buf.buffer = (uint8_t*) malloc(buf.size);
    enable=0;
    RfChip.PCD_Init();
    uint8_t count = 0; //-------->>>>>>para iniciar el conteo en 0 de la memoria de cantidad de uid registrados
    write_data(eepr_addr, count_address,&count);//---->>>
    count = data_read(eepr_addr, count_address);
    pc.printf("%d UID's registrados en memoria\n",count);
    address = (4*uint16_t(count)+1);//--->>actualizar posicion de escritura
    while(1) {
        while(flag4==true) {
            if(!RfChip.PICC_IsNewCardPresent())
                continue;
            if (!RfChip.PICC_ReadCardSerial())
                continue;
            pc.printf("Tarjeta Numero: ");
            uint8_t *c = &RfChip.uid.uidByte[0];
            enQueue(q,c);
            count = data_read(eepr_addr, count_address);
            address = (4*uint16_t(count)+1);//--->>actualizar posicion de escritura
            write_data(eepr_addr, address,c);//---->>>guardar UID en memoria
            for(int j=0; j<4; j++) {
                uint8_t car = data_read(eepr_addr, (address+j));
                pc.printf("%02X",car);
            }
            pc.printf("\n");
            count++;//------>>>>sumar 1 al contador de UID's
            write_data(eepr_addr, count_address,&count);///---->>actualizar en memoria el contador
            pc.printf("\n");
            flag4=false;
        }
    }
}





void interrupcion()
{
    led4=0;
    flag4=true;
}

void disp_unoTx_isr()
{
    enable=0;
}

void disp_unoRx_isr()
{
    uint8_t b = disp_uno.getc();

    if(b!=NULL) {
        circular_buf_put(&buf, b);
    } else {
        uint8_t a;
        circular_buf_get(&buf,&a);
        if(a=='1') {
            circular_buf_get(&buf,&a);
            if(a=='S') {
                flag1=true;
            } else if(a=='Y') {
                flag2=true;
            } else if(a=='N') {
                flag3=true;
            }
        } else
            circular_buf_reset(&buf);

    }

}