,.

Dependencies:   mbed qnode2 MFRC522-2 eeprom Buffer2

Committer:
alejo5214416
Date:
Tue Jul 31 19:05:10 2018 +0000
Revision:
8:6f9f9cb92788
Parent:
7:f62ffbdfa977
Child:
9:a169dc80e58f
(escritura, lectura, array) ok

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 7:f62ffbdfa977 49 if (count==0xff) {
alejo5214416 7:f62ffbdfa977 50 count=0x0001;
alejo5214416 7:f62ffbdfa977 51 write_data(eepr_addr, count_address,&count);//---->>>
alejo5214416 7:f62ffbdfa977 52 count=0x0000;
alejo5214416 8:6f9f9cb92788 53 pc.printf("%x UID's registrados en memoria\n",count);
alejo5214416 8:6f9f9cb92788 54 } else {
alejo5214416 8:6f9f9cb92788 55 //
alejo5214416 7:f62ffbdfa977 56
alejo5214416 8:6f9f9cb92788 57 if (count>0&&count<0xff) {
alejo5214416 8:6f9f9cb92788 58 uint16_t array[count];
alejo5214416 8:6f9f9cb92788 59 pc.printf("%x UID's registrados en memoria\n",count);
alejo5214416 8:6f9f9cb92788 60 for(uint8_t uid=0x00; uid<count; uid++) {
alejo5214416 8:6f9f9cb92788 61 array[uid]=0;
alejo5214416 8:6f9f9cb92788 62 for(uint16_t byte_uid=0x0000; byte_uid<4; byte_uid++) {
alejo5214416 8:6f9f9cb92788 63 //printf("Suma %x",array[uid]);
alejo5214416 8:6f9f9cb92788 64 printf("%2X",data_read(eepr_addr, (uint16_t(uid*4)+uint16_t(byte_uid)+0x0001)));
alejo5214416 8:6f9f9cb92788 65 array[uid] = array[uid]+ data_read(eepr_addr, (uint16_t(uid*4)+uint16_t(byte_uid)+0x0001));
alejo5214416 8:6f9f9cb92788 66 }
alejo5214416 8:6f9f9cb92788 67 printf("\n");
alejo5214416 8:6f9f9cb92788 68 //printf("Posicion del arreglo:%d valor:%03X\n",uid,array[uid]);
alejo5214416 8:6f9f9cb92788 69 }
alejo5214416 8:6f9f9cb92788 70 }
alejo5214416 7:f62ffbdfa977 71
alejo5214416 8:6f9f9cb92788 72 //
alejo5214416 8:6f9f9cb92788 73
alejo5214416 8:6f9f9cb92788 74 }
alejo5214416 8:6f9f9cb92788 75
alejo5214416 8:6f9f9cb92788 76 address = (4*uint16_t(count)+1);//--->>Crear posicion de escritura actual
alejo5214416 8:6f9f9cb92788 77
alejo5214416 8:6f9f9cb92788 78
alejo5214416 8:6f9f9cb92788 79
alejo5214416 8:6f9f9cb92788 80
alejo5214416 8:6f9f9cb92788 81
alejo5214416 8:6f9f9cb92788 82 while(1) {
alejo5214416 8:6f9f9cb92788 83
alejo5214416 8:6f9f9cb92788 84
alejo5214416 8:6f9f9cb92788 85
alejo5214416 8:6f9f9cb92788 86
alejo5214416 8:6f9f9cb92788 87
alejo5214416 4:2208f7e44ac6 88 while(flag4==true) {
alejo5214416 4:2208f7e44ac6 89 if(!RfChip.PICC_IsNewCardPresent())
alejo5214416 4:2208f7e44ac6 90 continue;
alejo5214416 4:2208f7e44ac6 91 if (!RfChip.PICC_ReadCardSerial())
alejo5214416 4:2208f7e44ac6 92 continue;
alejo5214416 4:2208f7e44ac6 93 pc.printf("Tarjeta Numero: ");
alejo5214416 4:2208f7e44ac6 94 uint8_t *c = &RfChip.uid.uidByte[0];
alejo5214416 4:2208f7e44ac6 95 enQueue(q,c);
alejo5214416 6:2ca2ebe5b5ed 96 //count = data_read(eepr_addr, count_address);
alejo5214416 4:2208f7e44ac6 97 write_data(eepr_addr, address,c);//---->>>guardar UID en memoria
alejo5214416 4:2208f7e44ac6 98 for(int j=0; j<4; j++) {
alejo5214416 4:2208f7e44ac6 99 uint8_t car = data_read(eepr_addr, (address+j));
alejo5214416 4:2208f7e44ac6 100 pc.printf("%02X",car);
alejo5214416 4:2208f7e44ac6 101 }
alejo5214416 4:2208f7e44ac6 102 pc.printf("\n");
alejo5214416 4:2208f7e44ac6 103 count++;//------>>>>sumar 1 al contador de UID's
alejo5214416 6:2ca2ebe5b5ed 104 address = (4*uint16_t(count)+1);//--->>actualizar posicion de escritura
alejo5214416 4:2208f7e44ac6 105 write_data(eepr_addr, count_address,&count);///---->>actualizar en memoria el contador
alejo5214416 4:2208f7e44ac6 106 pc.printf("\n");
alejo5214416 4:2208f7e44ac6 107 flag4=false;
alejo5214416 4:2208f7e44ac6 108 }
alejo5214416 4:2208f7e44ac6 109 }
alejo5214416 4:2208f7e44ac6 110 }
alejo5214416 4:2208f7e44ac6 111
alejo5214416 4:2208f7e44ac6 112
alejo5214416 6:2ca2ebe5b5ed 113 void flush_memory()
alejo5214416 6:2ca2ebe5b5ed 114 {
alejo5214416 6:2ca2ebe5b5ed 115 led4=1;
alejo5214416 6:2ca2ebe5b5ed 116 uint8_t data= 0xff;
alejo5214416 6:2ca2ebe5b5ed 117 write_data(eepr_addr,0x0000,&data);
alejo5214416 6:2ca2ebe5b5ed 118 data = 0x01;
alejo5214416 6:2ca2ebe5b5ed 119 for(uint16_t k=0x0001; k<0x003f; k++) {
alejo5214416 6:2ca2ebe5b5ed 120 int conf = write_data(eepr_addr,k,&data);
alejo5214416 6:2ca2ebe5b5ed 121 }
alejo5214416 7:f62ffbdfa977 122 int j=0;
alejo5214416 7:f62ffbdfa977 123 while(j<1) {
alejo5214416 7:f62ffbdfa977 124 for(uint16_t i=0x0000; i<0x002f; i++) {
alejo5214416 7:f62ffbdfa977 125 uint8_t count = data_read(eepr_addr, i);
alejo5214416 7:f62ffbdfa977 126 pc.printf("Posicion de memoria:%d dato:%02X\n",i,count);
alejo5214416 7:f62ffbdfa977 127
alejo5214416 7:f62ffbdfa977 128 }
alejo5214416 7:f62ffbdfa977 129 j++;
alejo5214416 7:f62ffbdfa977 130 }
alejo5214416 6:2ca2ebe5b5ed 131 printf("Memoria borrada\n");
alejo5214416 6:2ca2ebe5b5ed 132 led4=0;
alejo5214416 6:2ca2ebe5b5ed 133 }
alejo5214416 4:2208f7e44ac6 134
alejo5214416 4:2208f7e44ac6 135
alejo5214416 7:f62ffbdfa977 136
alejo5214416 7:f62ffbdfa977 137
alejo5214416 7:f62ffbdfa977 138
alejo5214416 1:4235920f89f8 139 void interrupcion()
alejo5214416 1:4235920f89f8 140 {
alejo5214416 7:f62ffbdfa977 141
alejo5214416 1:4235920f89f8 142 flag4=true;
alejo5214416 1:4235920f89f8 143 }
alejo5214416 1:4235920f89f8 144
alejo5214416 0:031eeed95323 145 void disp_unoTx_isr()
alejo5214416 0:031eeed95323 146 {
alejo5214416 0:031eeed95323 147 enable=0;
alejo5214416 0:031eeed95323 148 }
alejo5214416 0:031eeed95323 149
alejo5214416 0:031eeed95323 150 void disp_unoRx_isr()
alejo5214416 0:031eeed95323 151 {
alejo5214416 0:031eeed95323 152 uint8_t b = disp_uno.getc();
alejo5214416 0:031eeed95323 153
alejo5214416 0:031eeed95323 154 if(b!=NULL) {
alejo5214416 0:031eeed95323 155 circular_buf_put(&buf, b);
alejo5214416 0:031eeed95323 156 } else {
alejo5214416 0:031eeed95323 157 uint8_t a;
alejo5214416 0:031eeed95323 158 circular_buf_get(&buf,&a);
alejo5214416 0:031eeed95323 159 if(a=='1') {
alejo5214416 0:031eeed95323 160 circular_buf_get(&buf,&a);
alejo5214416 0:031eeed95323 161 if(a=='S') {
alejo5214416 0:031eeed95323 162 flag1=true;
alejo5214416 0:031eeed95323 163 } else if(a=='Y') {
alejo5214416 0:031eeed95323 164 flag2=true;
alejo5214416 0:031eeed95323 165 } else if(a=='N') {
alejo5214416 0:031eeed95323 166 flag3=true;
alejo5214416 0:031eeed95323 167 }
alejo5214416 1:4235920f89f8 168 } else
alejo5214416 1:4235920f89f8 169 circular_buf_reset(&buf);
alejo5214416 0:031eeed95323 170
alejo5214416 0:031eeed95323 171 }
alejo5214416 0:031eeed95323 172
alejo5214416 0:031eeed95323 173 }
alejo5214416 6:2ca2ebe5b5ed 174
alejo5214416 6:2ca2ebe5b5ed 175
alejo5214416 6:2ca2ebe5b5ed 176