
,.
Dependencies: mbed qnode2 MFRC522-2 eeprom Buffer2
main.cpp@11:da25ed58aab0, 2019-05-24 (annotated)
- Committer:
- alejo5214416
- Date:
- Fri May 24 03:43:43 2019 +0000
- Revision:
- 11:da25ed58aab0
- Parent:
- 10:90a9aa4482e8
,.
Who changed what in which revision?
User | Revision | Line number | New 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 | } |