,.
Dependencies: mbed qnode2 MFRC522-2 eeprom Buffer2
main.cpp@8:6f9f9cb92788, 2018-07-31 (annotated)
- 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?
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 | 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 |