,.

Dependencies:   mbed qnode2 MFRC522-2 eeprom Buffer2

Committer:
alejo5214416
Date:
Fri May 24 03:43:43 2019 +0000
Revision:
11:da25ed58aab0
Parent:
10:90a9aa4482e8
,.

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 11:da25ed58aab0 7 #define max_size 300
alejo5214416 4:2208f7e44ac6 8 uint16_t const count_address=0x0000;
alejo5214416 1:4235920f89f8 9
alejo5214416 1:4235920f89f8 10 I2C i2c(p28,p27);
alejo5214416 1:4235920f89f8 11 DigitalOut led4(LED4);
alejo5214416 1:4235920f89f8 12 DigitalOut led3(LED3);
alejo5214416 1:4235920f89f8 13 DigitalOut led1(LED1);
alejo5214416 0:031eeed95323 14 DigitalOut enable(p19);
alejo5214416 0:031eeed95323 15 Serial pc(USBTX, USBRX);
alejo5214416 0:031eeed95323 16 Serial disp_uno(p9, p10); // tx, rx
alejo5214416 0:031eeed95323 17 MFRC522 RfChip (p5, p6, p7, p8, p21);
alejo5214416 0:031eeed95323 18 circular_buf_t buf; // ---->BUFFER CIRCULAR buf
alejo5214416 1:4235920f89f8 19 InterruptIn event(p16);
alejo5214416 6:2ca2ebe5b5ed 20 InterruptIn reset(p15,PullDown);
alejo5214416 0:031eeed95323 21 bool flag1=false;
alejo5214416 0:031eeed95323 22 bool flag2=false;
alejo5214416 0:031eeed95323 23 bool flag3=false;
alejo5214416 1:4235920f89f8 24 bool flag4=false;
alejo5214416 0:031eeed95323 25 volatile bool buf1ready=false;
alejo5214416 0:031eeed95323 26 volatile bool buf2ready=false;
alejo5214416 9:a169dc80e58f 27
alejo5214416 9:a169dc80e58f 28
alejo5214416 11:da25ed58aab0 29 typedef union reg{
alejo5214416 11:da25ed58aab0 30 uint8_t uid_reg[4];
alejo5214416 11:da25ed58aab0 31 uint32_t clave;
alejo5214416 11:da25ed58aab0 32 }reg;
alejo5214416 11:da25ed58aab0 33
alejo5214416 11:da25ed58aab0 34 reg dtb[max_size];
alejo5214416 11:da25ed58aab0 35
alejo5214416 11:da25ed58aab0 36 void insertionSort(reg *regs, uint8_t count);
alejo5214416 4:2208f7e44ac6 37 void interrupcion();
alejo5214416 4:2208f7e44ac6 38 void disp_unoTx_isr();
alejo5214416 4:2208f7e44ac6 39 void disp_unoRx_isr();
alejo5214416 6:2ca2ebe5b5ed 40 void flush_memory();
alejo5214416 4:2208f7e44ac6 41
alejo5214416 4:2208f7e44ac6 42 int main()
alejo5214416 4:2208f7e44ac6 43 {
alejo5214416 10:90a9aa4482e8 44 uint16_t adr=0x0001;
alejo5214416 4:2208f7e44ac6 45 freq(400000);
alejo5214416 4:2208f7e44ac6 46 event.rise(&interrupcion);
alejo5214416 6:2ca2ebe5b5ed 47 reset.rise(&flush_memory);
alejo5214416 4:2208f7e44ac6 48 disp_uno.attach(&disp_unoRx_isr,Serial::RxIrq);
alejo5214416 4:2208f7e44ac6 49 disp_uno.attach(&disp_unoTx_isr,Serial::TxIrq);
alejo5214416 4:2208f7e44ac6 50 struct Queue *q = createQueue();
alejo5214416 4:2208f7e44ac6 51 buf.size = 5;
alejo5214416 4:2208f7e44ac6 52 buf.buffer = (uint8_t*) malloc(buf.size);
alejo5214416 4:2208f7e44ac6 53 enable=0;
alejo5214416 4:2208f7e44ac6 54 RfChip.PCD_Init();
alejo5214416 6:2ca2ebe5b5ed 55 //count = 0x0001; //-------->>>>>>para iniciar el conteo en 0 de la memoria de cantidad de uid registrados
alejo5214416 6:2ca2ebe5b5ed 56 //write_data(eepr_addr, count_address,&count);//---->>>
alejo5214416 6:2ca2ebe5b5ed 57 uint8_t count = data_read(eepr_addr, count_address);
alejo5214416 11:da25ed58aab0 58 uint16_t uid=0x00;
alejo5214416 10:90a9aa4482e8 59 if (count>0) {
alejo5214416 11:da25ed58aab0 60 //uint16_t array[count];
alejo5214416 10:90a9aa4482e8 61 pc.printf("\n%x UID's registrados en memoria\n",count);
alejo5214416 10:90a9aa4482e8 62 for(uid=0x00; uid<count; uid++) {
alejo5214416 11:da25ed58aab0 63 //array[uid]=0;
alejo5214416 11:da25ed58aab0 64 for(uint8_t byte_uid=0; byte_uid<4; byte_uid++) {
alejo5214416 10:90a9aa4482e8 65 //printf("Suma %x",array[uid]);
alejo5214416 11:da25ed58aab0 66 printf("%02X",data_read(eepr_addr, (uid*4)+byte_uid+0x01));
alejo5214416 11:da25ed58aab0 67 //array[uid] = array[uid]+ data_read(eepr_addr, (uint16_t(uid*4)+uint16_t(byte_uid)+0x0001));
alejo5214416 11:da25ed58aab0 68 dtb[uid].uid_reg[byte_uid] = data_read(eepr_addr,(uid*4)+byte_uid+0x01);
alejo5214416 9:a169dc80e58f 69 }
alejo5214416 11:da25ed58aab0 70 //insertionSort(&dtb[0], count);
alejo5214416 10:90a9aa4482e8 71 printf("\n");
alejo5214416 10:90a9aa4482e8 72 //printf("Posicion del arreglo:%d valor:%03X",uid+1,array[uid]);
alejo5214416 10:90a9aa4482e8 73 }
alejo5214416 10:90a9aa4482e8 74
alejo5214416 11:da25ed58aab0 75
alejo5214416 11:da25ed58aab0 76 pc.printf("\nValores Ordenados ");
alejo5214416 11:da25ed58aab0 77 insertionSort(&dtb[0], count);
alejo5214416 10:90a9aa4482e8 78 for(uint8_t d=0x00; d<count; d++) {
alejo5214416 11:da25ed58aab0 79 for(int i=0;i<4;i++){
alejo5214416 11:da25ed58aab0 80 pc.printf("%02X",dtb[d].uid_reg[i]);
alejo5214416 11:da25ed58aab0 81 }
alejo5214416 11:da25ed58aab0 82 pc.printf("\n");
alejo5214416 8:6f9f9cb92788 83 }
alejo5214416 8:6f9f9cb92788 84
alejo5214416 11:da25ed58aab0 85 /*
alejo5214416 10:90a9aa4482e8 86 pc.printf("\nValores Ordenados ");
alejo5214416 11:da25ed58aab0 87 insertionSort(dtb, count);
alejo5214416 10:90a9aa4482e8 88 for(uint8_t d=0x00; d<count; d++) {
alejo5214416 11:da25ed58aab0 89 pc.printf("%03X ",dtb[d]);
alejo5214416 10:90a9aa4482e8 90 }
alejo5214416 11:da25ed58aab0 91 */
alejo5214416 8:6f9f9cb92788 92 }
alejo5214416 10:90a9aa4482e8 93 else{
alejo5214416 10:90a9aa4482e8 94 pc.printf("%x UID's registrados en memoria\n",count);
alejo5214416 10:90a9aa4482e8 95 }
alejo5214416 10:90a9aa4482e8 96 adr = (4*uint16_t(count)+1);//--->>Crear posicion de escritura actual
alejo5214416 9:a169dc80e58f 97
alejo5214416 9:a169dc80e58f 98 while(1) {
alejo5214416 4:2208f7e44ac6 99 while(flag4==true) {
alejo5214416 4:2208f7e44ac6 100 if(!RfChip.PICC_IsNewCardPresent())
alejo5214416 4:2208f7e44ac6 101 continue;
alejo5214416 4:2208f7e44ac6 102 if (!RfChip.PICC_ReadCardSerial())
alejo5214416 4:2208f7e44ac6 103 continue;
alejo5214416 4:2208f7e44ac6 104 pc.printf("Tarjeta Numero: ");
alejo5214416 4:2208f7e44ac6 105 uint8_t *c = &RfChip.uid.uidByte[0];
alejo5214416 10:90a9aa4482e8 106 //enQueue(q,c);
alejo5214416 6:2ca2ebe5b5ed 107 //count = data_read(eepr_addr, count_address);
alejo5214416 10:90a9aa4482e8 108 write_data(eepr_addr, adr,c);//---->>>guardar UID en memoria
alejo5214416 4:2208f7e44ac6 109 for(int j=0; j<4; j++) {
alejo5214416 10:90a9aa4482e8 110 uint8_t car = data_read(eepr_addr, (adr+j));
alejo5214416 4:2208f7e44ac6 111 pc.printf("%02X",car);
alejo5214416 4:2208f7e44ac6 112 }
alejo5214416 4:2208f7e44ac6 113 pc.printf("\n");
alejo5214416 4:2208f7e44ac6 114 count++;//------>>>>sumar 1 al contador de UID's
alejo5214416 10:90a9aa4482e8 115 adr = (4*uint16_t(count)+1);//--->>actualizar posicion de escritura
alejo5214416 4:2208f7e44ac6 116 write_data(eepr_addr, count_address,&count);///---->>actualizar en memoria el contador
alejo5214416 4:2208f7e44ac6 117 pc.printf("\n");
alejo5214416 4:2208f7e44ac6 118 flag4=false;
alejo5214416 4:2208f7e44ac6 119 }
alejo5214416 4:2208f7e44ac6 120 }
alejo5214416 4:2208f7e44ac6 121 }
alejo5214416 4:2208f7e44ac6 122
alejo5214416 4:2208f7e44ac6 123
alejo5214416 6:2ca2ebe5b5ed 124 void flush_memory()
alejo5214416 6:2ca2ebe5b5ed 125 {
alejo5214416 6:2ca2ebe5b5ed 126 led4=1;
alejo5214416 10:90a9aa4482e8 127 uint8_t data = 0x00;
alejo5214416 10:90a9aa4482e8 128 for(uint16_t k=0x0000; k<0x003f; k++) {
alejo5214416 10:90a9aa4482e8 129 write_data(eepr_addr,k,&data);
alejo5214416 6:2ca2ebe5b5ed 130 }
alejo5214416 7:f62ffbdfa977 131 int j=0;
alejo5214416 7:f62ffbdfa977 132 while(j<1) {
alejo5214416 10:90a9aa4482e8 133 for(uint16_t i=0x0000; i<0x003f; i++) {
alejo5214416 7:f62ffbdfa977 134 uint8_t count = data_read(eepr_addr, i);
alejo5214416 7:f62ffbdfa977 135 pc.printf("Posicion de memoria:%d dato:%02X\n",i,count);
alejo5214416 7:f62ffbdfa977 136
alejo5214416 7:f62ffbdfa977 137 }
alejo5214416 7:f62ffbdfa977 138 j++;
alejo5214416 7:f62ffbdfa977 139 }
alejo5214416 6:2ca2ebe5b5ed 140 printf("Memoria borrada\n");
alejo5214416 6:2ca2ebe5b5ed 141 led4=0;
alejo5214416 6:2ca2ebe5b5ed 142 }
alejo5214416 4:2208f7e44ac6 143
alejo5214416 4:2208f7e44ac6 144
alejo5214416 7:f62ffbdfa977 145
alejo5214416 7:f62ffbdfa977 146
alejo5214416 7:f62ffbdfa977 147
alejo5214416 1:4235920f89f8 148 void interrupcion()
alejo5214416 1:4235920f89f8 149 {
alejo5214416 7:f62ffbdfa977 150
alejo5214416 1:4235920f89f8 151 flag4=true;
alejo5214416 1:4235920f89f8 152 }
alejo5214416 1:4235920f89f8 153
alejo5214416 0:031eeed95323 154 void disp_unoTx_isr()
alejo5214416 0:031eeed95323 155 {
alejo5214416 0:031eeed95323 156 enable=0;
alejo5214416 0:031eeed95323 157 }
alejo5214416 0:031eeed95323 158
alejo5214416 0:031eeed95323 159 void disp_unoRx_isr()
alejo5214416 0:031eeed95323 160 {
alejo5214416 0:031eeed95323 161 uint8_t b = disp_uno.getc();
alejo5214416 0:031eeed95323 162
alejo5214416 0:031eeed95323 163 if(b!=NULL) {
alejo5214416 0:031eeed95323 164 circular_buf_put(&buf, b);
alejo5214416 0:031eeed95323 165 } else {
alejo5214416 0:031eeed95323 166 uint8_t a;
alejo5214416 0:031eeed95323 167 circular_buf_get(&buf,&a);
alejo5214416 0:031eeed95323 168 if(a=='1') {
alejo5214416 0:031eeed95323 169 circular_buf_get(&buf,&a);
alejo5214416 0:031eeed95323 170 if(a=='S') {
alejo5214416 0:031eeed95323 171 flag1=true;
alejo5214416 0:031eeed95323 172 } else if(a=='Y') {
alejo5214416 0:031eeed95323 173 flag2=true;
alejo5214416 0:031eeed95323 174 } else if(a=='N') {
alejo5214416 0:031eeed95323 175 flag3=true;
alejo5214416 0:031eeed95323 176 }
alejo5214416 1:4235920f89f8 177 } else
alejo5214416 1:4235920f89f8 178 circular_buf_reset(&buf);
alejo5214416 0:031eeed95323 179
alejo5214416 0:031eeed95323 180 }
alejo5214416 0:031eeed95323 181
alejo5214416 0:031eeed95323 182 }
alejo5214416 6:2ca2ebe5b5ed 183
alejo5214416 6:2ca2ebe5b5ed 184
alejo5214416 6:2ca2ebe5b5ed 185
alejo5214416 11:da25ed58aab0 186 void insertionSort(reg *regs, uint8_t count)
alejo5214416 10:90a9aa4482e8 187 {
alejo5214416 11:da25ed58aab0 188 uint32_t i, key;
alejo5214416 11:da25ed58aab0 189 int j;
alejo5214416 10:90a9aa4482e8 190 for (i = 1; i < count; i++) {
alejo5214416 11:da25ed58aab0 191 key = regs[i].clave;
alejo5214416 10:90a9aa4482e8 192 j = i-1;
alejo5214416 10:90a9aa4482e8 193
alejo5214416 10:90a9aa4482e8 194 /* Move elements of arr[0..i-1], that are
alejo5214416 10:90a9aa4482e8 195 greater than key, to one position ahead
alejo5214416 10:90a9aa4482e8 196 of their current position */
alejo5214416 11:da25ed58aab0 197 while ((j>=0) && (regs[j].clave> key)) {
alejo5214416 11:da25ed58aab0 198 regs[j+1].clave = regs[j].clave;
alejo5214416 10:90a9aa4482e8 199 j = j-1;
alejo5214416 10:90a9aa4482e8 200 }
alejo5214416 11:da25ed58aab0 201 regs[j+1].clave = key;
alejo5214416 10:90a9aa4482e8 202 }
alejo5214416 10:90a9aa4482e8 203 }