,.

Dependencies:   mbed qnode2 MFRC522-2 eeprom Buffer2

Committer:
alejo5214416
Date:
Mon Jul 30 03:53:05 2018 +0000
Revision:
6:2ca2ebe5b5ed
Parent:
5:24335ea5e4d3
Child:
7:f62ffbdfa977
conteo ok, escritura ok, reset ok, lectura ok. 29-7-18

Who changed what in which revision?

UserRevisionLine numberNew contents of line
alejo5214416 0:031eeed95323 1 #include "mbed.h"
alejo5214416 0:031eeed95323 2 #include "MFRC522.h"
alejo5214416 0:031eeed95323 3 #include "qnode.h"
alejo5214416 0:031eeed95323 4 #include "Buffer.h"
alejo5214416 1:4235920f89f8 5 #include "eeprom.h"
alejo5214416 1:4235920f89f8 6 #define eepr_addr 0x50
alejo5214416 4:2208f7e44ac6 7 uint16_t const count_address=0x0000;
alejo5214416 1:4235920f89f8 8
alejo5214416 1:4235920f89f8 9 I2C i2c(p28,p27);
alejo5214416 1:4235920f89f8 10 DigitalOut led4(LED4);
alejo5214416 1:4235920f89f8 11 DigitalOut led3(LED3);
alejo5214416 1:4235920f89f8 12 DigitalOut led1(LED1);
alejo5214416 0:031eeed95323 13 DigitalOut enable(p19);
alejo5214416 0:031eeed95323 14 Serial pc(USBTX, USBRX);
alejo5214416 0:031eeed95323 15 Serial disp_uno(p9, p10); // tx, rx
alejo5214416 0:031eeed95323 16 MFRC522 RfChip (p5, p6, p7, p8, p21);
alejo5214416 0:031eeed95323 17 circular_buf_t buf; // ---->BUFFER CIRCULAR buf
alejo5214416 1:4235920f89f8 18 InterruptIn event(p16);
alejo5214416 6:2ca2ebe5b5ed 19 InterruptIn reset(p15,PullDown);
alejo5214416 0:031eeed95323 20 bool flag1=false;
alejo5214416 0:031eeed95323 21 bool flag2=false;
alejo5214416 0:031eeed95323 22 bool flag3=false;
alejo5214416 1:4235920f89f8 23 bool flag4=false;
alejo5214416 0:031eeed95323 24 volatile bool buf1ready=false;
alejo5214416 0:031eeed95323 25 volatile bool buf2ready=false;
alejo5214416 1:4235920f89f8 26 uint16_t address=0x0001;
alejo5214416 0:031eeed95323 27
alejo5214416 0:031eeed95323 28
alejo5214416 4:2208f7e44ac6 29 void interrupcion();
alejo5214416 4:2208f7e44ac6 30 void disp_unoTx_isr();
alejo5214416 4:2208f7e44ac6 31 void disp_unoRx_isr();
alejo5214416 6:2ca2ebe5b5ed 32 void flush_memory();
alejo5214416 4:2208f7e44ac6 33
alejo5214416 4:2208f7e44ac6 34 int main()
alejo5214416 4:2208f7e44ac6 35 {
alejo5214416 4:2208f7e44ac6 36 freq(400000);
alejo5214416 4:2208f7e44ac6 37 event.rise(&interrupcion);
alejo5214416 6:2ca2ebe5b5ed 38 reset.rise(&flush_memory);
alejo5214416 4:2208f7e44ac6 39 disp_uno.attach(&disp_unoRx_isr,Serial::RxIrq);
alejo5214416 4:2208f7e44ac6 40 disp_uno.attach(&disp_unoTx_isr,Serial::TxIrq);
alejo5214416 4:2208f7e44ac6 41 struct Queue *q = createQueue();
alejo5214416 4:2208f7e44ac6 42 buf.size = 5;
alejo5214416 4:2208f7e44ac6 43 buf.buffer = (uint8_t*) malloc(buf.size);
alejo5214416 4:2208f7e44ac6 44 enable=0;
alejo5214416 4:2208f7e44ac6 45 RfChip.PCD_Init();
alejo5214416 6:2ca2ebe5b5ed 46 //count = 0x0001; //-------->>>>>>para iniciar el conteo en 0 de la memoria de cantidad de uid registrados
alejo5214416 6:2ca2ebe5b5ed 47 //write_data(eepr_addr, count_address,&count);//---->>>
alejo5214416 6:2ca2ebe5b5ed 48 uint8_t count = data_read(eepr_addr, count_address);
alejo5214416 6:2ca2ebe5b5ed 49 if (count==0xff){
alejo5214416 6:2ca2ebe5b5ed 50 count=0x0001;
alejo5214416 4:2208f7e44ac6 51 write_data(eepr_addr, count_address,&count);//---->>>
alejo5214416 6:2ca2ebe5b5ed 52 count=0x0000;
alejo5214416 6:2ca2ebe5b5ed 53 }
alejo5214416 6:2ca2ebe5b5ed 54 pc.printf("%x UID's registrados en memoria\n",count);
alejo5214416 6:2ca2ebe5b5ed 55 address = (4*uint16_t(count)+1);//--->>Crear posicion de escritura actual
alejo5214416 4:2208f7e44ac6 56 while(1) {
alejo5214416 4:2208f7e44ac6 57 while(flag4==true) {
alejo5214416 4:2208f7e44ac6 58 if(!RfChip.PICC_IsNewCardPresent())
alejo5214416 4:2208f7e44ac6 59 continue;
alejo5214416 4:2208f7e44ac6 60 if (!RfChip.PICC_ReadCardSerial())
alejo5214416 4:2208f7e44ac6 61 continue;
alejo5214416 4:2208f7e44ac6 62 pc.printf("Tarjeta Numero: ");
alejo5214416 4:2208f7e44ac6 63 uint8_t *c = &RfChip.uid.uidByte[0];
alejo5214416 4:2208f7e44ac6 64 enQueue(q,c);
alejo5214416 6:2ca2ebe5b5ed 65 //count = data_read(eepr_addr, count_address);
alejo5214416 4:2208f7e44ac6 66 write_data(eepr_addr, address,c);//---->>>guardar UID en memoria
alejo5214416 4:2208f7e44ac6 67 for(int j=0; j<4; j++) {
alejo5214416 4:2208f7e44ac6 68 uint8_t car = data_read(eepr_addr, (address+j));
alejo5214416 4:2208f7e44ac6 69 pc.printf("%02X",car);
alejo5214416 4:2208f7e44ac6 70 }
alejo5214416 4:2208f7e44ac6 71 pc.printf("\n");
alejo5214416 4:2208f7e44ac6 72 count++;//------>>>>sumar 1 al contador de UID's
alejo5214416 6:2ca2ebe5b5ed 73 address = (4*uint16_t(count)+1);//--->>actualizar posicion de escritura
alejo5214416 4:2208f7e44ac6 74 write_data(eepr_addr, count_address,&count);///---->>actualizar en memoria el contador
alejo5214416 4:2208f7e44ac6 75 pc.printf("\n");
alejo5214416 4:2208f7e44ac6 76 flag4=false;
alejo5214416 4:2208f7e44ac6 77 }
alejo5214416 4:2208f7e44ac6 78 }
alejo5214416 4:2208f7e44ac6 79 }
alejo5214416 4:2208f7e44ac6 80
alejo5214416 4:2208f7e44ac6 81
alejo5214416 6:2ca2ebe5b5ed 82 void flush_memory()
alejo5214416 6:2ca2ebe5b5ed 83 {
alejo5214416 6:2ca2ebe5b5ed 84 led4=1;
alejo5214416 6:2ca2ebe5b5ed 85 uint8_t data= 0xff;
alejo5214416 6:2ca2ebe5b5ed 86 write_data(eepr_addr,0x0000,&data);
alejo5214416 6:2ca2ebe5b5ed 87 data = 0x01;
alejo5214416 6:2ca2ebe5b5ed 88 for(uint16_t k=0x0001; k<0x003f; k++) {
alejo5214416 6:2ca2ebe5b5ed 89 int conf = write_data(eepr_addr,k,&data);
alejo5214416 6:2ca2ebe5b5ed 90 }
alejo5214416 6:2ca2ebe5b5ed 91 printf("Memoria borrada\n");
alejo5214416 6:2ca2ebe5b5ed 92 led4=0;
alejo5214416 6:2ca2ebe5b5ed 93 }
alejo5214416 4:2208f7e44ac6 94
alejo5214416 4:2208f7e44ac6 95
alejo5214416 1:4235920f89f8 96 void interrupcion()
alejo5214416 1:4235920f89f8 97 {
alejo5214416 6:2ca2ebe5b5ed 98
alejo5214416 1:4235920f89f8 99 flag4=true;
alejo5214416 1:4235920f89f8 100 }
alejo5214416 1:4235920f89f8 101
alejo5214416 0:031eeed95323 102 void disp_unoTx_isr()
alejo5214416 0:031eeed95323 103 {
alejo5214416 0:031eeed95323 104 enable=0;
alejo5214416 0:031eeed95323 105 }
alejo5214416 0:031eeed95323 106
alejo5214416 0:031eeed95323 107 void disp_unoRx_isr()
alejo5214416 0:031eeed95323 108 {
alejo5214416 0:031eeed95323 109 uint8_t b = disp_uno.getc();
alejo5214416 0:031eeed95323 110
alejo5214416 0:031eeed95323 111 if(b!=NULL) {
alejo5214416 0:031eeed95323 112 circular_buf_put(&buf, b);
alejo5214416 0:031eeed95323 113 } else {
alejo5214416 0:031eeed95323 114 uint8_t a;
alejo5214416 0:031eeed95323 115 circular_buf_get(&buf,&a);
alejo5214416 0:031eeed95323 116 if(a=='1') {
alejo5214416 0:031eeed95323 117 circular_buf_get(&buf,&a);
alejo5214416 0:031eeed95323 118 if(a=='S') {
alejo5214416 0:031eeed95323 119 flag1=true;
alejo5214416 0:031eeed95323 120 } else if(a=='Y') {
alejo5214416 0:031eeed95323 121 flag2=true;
alejo5214416 0:031eeed95323 122 } else if(a=='N') {
alejo5214416 0:031eeed95323 123 flag3=true;
alejo5214416 0:031eeed95323 124 }
alejo5214416 1:4235920f89f8 125 } else
alejo5214416 1:4235920f89f8 126 circular_buf_reset(&buf);
alejo5214416 0:031eeed95323 127
alejo5214416 0:031eeed95323 128 }
alejo5214416 0:031eeed95323 129
alejo5214416 0:031eeed95323 130 }
alejo5214416 6:2ca2ebe5b5ed 131
alejo5214416 6:2ca2ebe5b5ed 132
alejo5214416 6:2ca2ebe5b5ed 133