![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
escaner RF - RTOS multitareas
Dependencies: mbed Servo MFRC522_Updated HC-SR04 ssd1306_library
main.cpp@3:e7eaa479e804, 2020-06-10 (annotated)
- Committer:
- 20172573073
- Date:
- Wed Jun 10 16:24:24 2020 +0000
- Revision:
- 3:e7eaa479e804
- Parent:
- 2:ad8f0cdf7015
ex
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
20172573073 | 0:366b3e64c83c | 1 | #include "mbed.h" |
20172573073 | 0:366b3e64c83c | 2 | #include "rtos.h" |
20172573073 | 0:366b3e64c83c | 3 | #include "Servo.h" |
20172573073 | 0:366b3e64c83c | 4 | #include "HCSR04.h" |
20172573073 | 0:366b3e64c83c | 5 | #include "MFRC522.h" |
20172573073 | 0:366b3e64c83c | 6 | #include "ssd1306.h" |
20172573073 | 1:849d12c9b2be | 7 | |
20172573073 | 1:849d12c9b2be | 8 | MFRC522 RfChip (D11, D12, D13, PTE0, D10); |
20172573073 | 0:366b3e64c83c | 9 | SSD1306 lcd (D7,D6); |
20172573073 | 0:366b3e64c83c | 10 | BusOut display7Seg(PTC10, PTC7, PTC6, PTC4, PTC0, PTB19, PTB18); |
20172573073 | 0:366b3e64c83c | 11 | DigitalOut display1(PTC11); |
20172573073 | 0:366b3e64c83c | 12 | DigitalOut display2(PTC13); |
20172573073 | 1:849d12c9b2be | 13 | DigitalOut display3(PTC16); |
20172573073 | 0:366b3e64c83c | 14 | Servo myservo(D2); |
20172573073 | 1:849d12c9b2be | 15 | |
20172573073 | 0:366b3e64c83c | 16 | Thread t; |
20172573073 | 0:366b3e64c83c | 17 | Thread t1; |
20172573073 | 0:366b3e64c83c | 18 | Thread t2; |
20172573073 | 0:366b3e64c83c | 19 | Thread t3; |
20172573073 | 1:849d12c9b2be | 20 | Thread t4; |
20172573073 | 1:849d12c9b2be | 21 | |
20172573073 | 0:366b3e64c83c | 22 | Serial pc(USBTX, USBRX); |
20172573073 | 0:366b3e64c83c | 23 | HCSR04 sonar(D3,D4); |
20172573073 | 2:ad8f0cdf7015 | 24 | |
20172573073 | 0:366b3e64c83c | 25 | float menor; |
20172573073 | 0:366b3e64c83c | 26 | float da; |
20172573073 | 0:366b3e64c83c | 27 | float dis = 0.0; |
20172573073 | 2:ad8f0cdf7015 | 28 | static const char tar[]={0xD7,0x4F,0x88,0x19}; |
20172573073 | 2:ad8f0cdf7015 | 29 | static const char llav[]={0x27,0x57,0xC1,0x7B}; |
20172573073 | 2:ad8f0cdf7015 | 30 | int q,a,al,b,w; |
20172573073 | 0:366b3e64c83c | 31 | |
20172573073 | 0:366b3e64c83c | 32 | |
20172573073 | 0:366b3e64c83c | 33 | int anodeComun[10] = { |
20172573073 | 0:366b3e64c83c | 34 | 0b0000001, // 0 |
20172573073 | 0:366b3e64c83c | 35 | 0b1001111, // 1 |
20172573073 | 0:366b3e64c83c | 36 | 0b0010010, // 2 |
20172573073 | 0:366b3e64c83c | 37 | 0b0000110, // 3 |
20172573073 | 0:366b3e64c83c | 38 | 0b1001100, // 4 |
20172573073 | 0:366b3e64c83c | 39 | 0b0100100, // 5 |
20172573073 | 0:366b3e64c83c | 40 | 0b0100000, // 6 |
20172573073 | 0:366b3e64c83c | 41 | 0b0001111, // 7 |
20172573073 | 0:366b3e64c83c | 42 | 0b0000000, // 8 |
20172573073 | 0:366b3e64c83c | 43 | 0b0001100, // 9 |
20172573073 | 0:366b3e64c83c | 44 | }; |
20172573073 | 0:366b3e64c83c | 45 | |
20172573073 | 0:366b3e64c83c | 46 | void servo() |
20172573073 | 0:366b3e64c83c | 47 | { |
20172573073 | 1:849d12c9b2be | 48 | |
20172573073 | 0:366b3e64c83c | 49 | while(true) { |
20172573073 | 0:366b3e64c83c | 50 | menor = sonar.getCm(); |
20172573073 | 0:366b3e64c83c | 51 | for(int i=0; i<40; i++) { |
20172573073 | 0:366b3e64c83c | 52 | myservo = i/40.0; |
20172573073 | 0:366b3e64c83c | 53 | da = sonar.getCm(); |
20172573073 | 2:ad8f0cdf7015 | 54 | w=i; |
20172573073 | 0:366b3e64c83c | 55 | if(menor > da) { |
20172573073 | 0:366b3e64c83c | 56 | menor = da; |
20172573073 | 0:366b3e64c83c | 57 | a=(i*180)/40; |
20172573073 | 0:366b3e64c83c | 58 | } |
20172573073 | 3:e7eaa479e804 | 59 | Thread::wait(50); |
20172573073 | 0:366b3e64c83c | 60 | } |
20172573073 | 0:366b3e64c83c | 61 | menor=sonar.getCm(); |
20172573073 | 0:366b3e64c83c | 62 | a=0; |
20172573073 | 0:366b3e64c83c | 63 | for(int i=40; i>0; i--) { |
20172573073 | 0:366b3e64c83c | 64 | myservo = i/40.0; |
20172573073 | 0:366b3e64c83c | 65 | da = sonar.getCm(); |
20172573073 | 2:ad8f0cdf7015 | 66 | w=i; |
20172573073 | 0:366b3e64c83c | 67 | if(menor > da) { |
20172573073 | 0:366b3e64c83c | 68 | menor = da; |
20172573073 | 0:366b3e64c83c | 69 | a=(i*180)/40; |
20172573073 | 0:366b3e64c83c | 70 | } |
20172573073 | 3:e7eaa479e804 | 71 | Thread::wait(50); |
20172573073 | 0:366b3e64c83c | 72 | } |
20172573073 | 0:366b3e64c83c | 73 | } |
20172573073 | 0:366b3e64c83c | 74 | } |
20172573073 | 0:366b3e64c83c | 75 | void seg7() |
20172573073 | 0:366b3e64c83c | 76 | { |
20172573073 | 0:366b3e64c83c | 77 | while(1) { |
20172573073 | 1:849d12c9b2be | 78 | int d,u,n,c; |
20172573073 | 0:366b3e64c83c | 79 | n=int(menor); |
20172573073 | 2:ad8f0cdf7015 | 80 | |
20172573073 | 1:849d12c9b2be | 81 | c= n/100; |
20172573073 | 1:849d12c9b2be | 82 | d = (n - (c*100))/10; |
20172573073 | 0:366b3e64c83c | 83 | u = n % 10; |
20172573073 | 0:366b3e64c83c | 84 | |
20172573073 | 0:366b3e64c83c | 85 | display1=1; |
20172573073 | 0:366b3e64c83c | 86 | display2=0; |
20172573073 | 1:849d12c9b2be | 87 | display3=0; |
20172573073 | 0:366b3e64c83c | 88 | display7Seg=anodeComun[d]; |
20172573073 | 3:e7eaa479e804 | 89 | |
20172573073 | 3:e7eaa479e804 | 90 | Thread::wait(3); |
20172573073 | 1:849d12c9b2be | 91 | |
20172573073 | 0:366b3e64c83c | 92 | display1=0; |
20172573073 | 0:366b3e64c83c | 93 | display2=1; |
20172573073 | 1:849d12c9b2be | 94 | display3=0; |
20172573073 | 0:366b3e64c83c | 95 | display7Seg=anodeComun[u]; |
20172573073 | 1:849d12c9b2be | 96 | |
20172573073 | 3:e7eaa479e804 | 97 | Thread::wait(3); |
20172573073 | 2:ad8f0cdf7015 | 98 | |
20172573073 | 2:ad8f0cdf7015 | 99 | display1=0; |
20172573073 | 1:849d12c9b2be | 100 | display2=0; |
20172573073 | 1:849d12c9b2be | 101 | display3=1; |
20172573073 | 1:849d12c9b2be | 102 | display7Seg=anodeComun[c]; |
20172573073 | 1:849d12c9b2be | 103 | |
20172573073 | 3:e7eaa479e804 | 104 | Thread::wait(3); |
20172573073 | 2:ad8f0cdf7015 | 105 | |
20172573073 | 2:ad8f0cdf7015 | 106 | |
20172573073 | 0:366b3e64c83c | 107 | } |
20172573073 | 0:366b3e64c83c | 108 | } |
20172573073 | 0:366b3e64c83c | 109 | void oled() |
20172573073 | 0:366b3e64c83c | 110 | { |
20172573073 | 0:366b3e64c83c | 111 | while(1) { |
20172573073 | 0:366b3e64c83c | 112 | lcd.init(); |
20172573073 | 0:366b3e64c83c | 113 | lcd.speed (SSD1306::Fast); |
20172573073 | 0:366b3e64c83c | 114 | lcd.cls(); |
20172573073 | 1:849d12c9b2be | 115 | lcd.locate (4,1); |
20172573073 | 1:849d12c9b2be | 116 | lcd.printf ("dis menor :%2.f ",menor); |
20172573073 | 0:366b3e64c83c | 117 | lcd.locate (5,1); |
20172573073 | 1:849d12c9b2be | 118 | lcd.printf ("angulo :%d ",a); |
20172573073 | 0:366b3e64c83c | 119 | lcd.locate (1,0); |
20172573073 | 0:366b3e64c83c | 120 | time_t seconds = time(NULL); |
20172573073 | 1:849d12c9b2be | 121 | lcd.printf("Fecha= %s", ctime(&seconds)); |
20172573073 | 0:366b3e64c83c | 122 | lcd.redraw(); |
20172573073 | 3:e7eaa479e804 | 123 | |
20172573073 | 3:e7eaa479e804 | 124 | Thread::wait(500); |
20172573073 | 0:366b3e64c83c | 125 | } |
20172573073 | 0:366b3e64c83c | 126 | } |
20172573073 | 1:849d12c9b2be | 127 | void rf() |
20172573073 | 0:366b3e64c83c | 128 | { |
20172573073 | 0:366b3e64c83c | 129 | while(1) { |
20172573073 | 2:ad8f0cdf7015 | 130 | al=0; |
20172573073 | 2:ad8f0cdf7015 | 131 | b=0; |
20172573073 | 1:849d12c9b2be | 132 | lcd.init(); |
20172573073 | 1:849d12c9b2be | 133 | lcd.speed (SSD1306::Fast); |
20172573073 | 1:849d12c9b2be | 134 | if ( ! RfChip.PICC_IsNewCardPresent()) { |
20172573073 | 3:e7eaa479e804 | 135 | |
20172573073 | 3:e7eaa479e804 | 136 | Thread::wait(500); |
20172573073 | 1:849d12c9b2be | 137 | continue; |
20172573073 | 1:849d12c9b2be | 138 | } |
20172573073 | 1:849d12c9b2be | 139 | if ( ! RfChip.PICC_ReadCardSerial()) { |
20172573073 | 3:e7eaa479e804 | 140 | |
20172573073 | 3:e7eaa479e804 | 141 | Thread::wait(500); |
20172573073 | 1:849d12c9b2be | 142 | continue; |
20172573073 | 1:849d12c9b2be | 143 | } |
20172573073 | 1:849d12c9b2be | 144 | uint8_t piccType = RfChip.PICC_GetType(RfChip.uid.sak); |
20172573073 | 1:849d12c9b2be | 145 | lcd.locate (6,3); |
20172573073 | 1:849d12c9b2be | 146 | lcd.printf(" %s ", RfChip.PICC_GetTypeName(piccType)); |
20172573073 | 1:849d12c9b2be | 147 | lcd.redraw(); |
20172573073 | 2:ad8f0cdf7015 | 148 | for (uint8_t i = 0; i < RfChip.uid.size; i++) { |
20172573073 | 2:ad8f0cdf7015 | 149 | |
20172573073 | 2:ad8f0cdf7015 | 150 | if(uint8_t (tar[i])==RfChip.uid.uidByte[i]){ |
20172573073 | 2:ad8f0cdf7015 | 151 | al=al+1; |
20172573073 | 2:ad8f0cdf7015 | 152 | }else{ |
20172573073 | 2:ad8f0cdf7015 | 153 | al=0; |
20172573073 | 2:ad8f0cdf7015 | 154 | } |
20172573073 | 2:ad8f0cdf7015 | 155 | } |
20172573073 | 2:ad8f0cdf7015 | 156 | for (uint8_t i = 0; i < RfChip.uid.size; i++) { |
20172573073 | 2:ad8f0cdf7015 | 157 | |
20172573073 | 2:ad8f0cdf7015 | 158 | if(uint8_t (llav[i])==RfChip.uid.uidByte[i]){ |
20172573073 | 2:ad8f0cdf7015 | 159 | b=b+1; |
20172573073 | 2:ad8f0cdf7015 | 160 | }else{ |
20172573073 | 2:ad8f0cdf7015 | 161 | b=0; |
20172573073 | 2:ad8f0cdf7015 | 162 | } |
20172573073 | 2:ad8f0cdf7015 | 163 | } |
20172573073 | 2:ad8f0cdf7015 | 164 | |
20172573073 | 0:366b3e64c83c | 165 | //ThisThread::sleep_for(1000); |
20172573073 | 3:e7eaa479e804 | 166 | Thread::wait(1000); |
20172573073 | 0:366b3e64c83c | 167 | } |
20172573073 | 0:366b3e64c83c | 168 | } |
20172573073 | 2:ad8f0cdf7015 | 169 | void serial() |
20172573073 | 2:ad8f0cdf7015 | 170 | { |
20172573073 | 2:ad8f0cdf7015 | 171 | while(1) { |
20172573073 | 1:849d12c9b2be | 172 | |
20172573073 | 2:ad8f0cdf7015 | 173 | time_t seconds = time(NULL); |
20172573073 | 1:849d12c9b2be | 174 | |
20172573073 | 2:ad8f0cdf7015 | 175 | char buffer2[32]; |
20172573073 | 2:ad8f0cdf7015 | 176 | strftime(buffer2, 32, "%m/%d/%y", localtime(&seconds)); |
20172573073 | 2:ad8f0cdf7015 | 177 | pc.printf("%s", buffer2); |
20172573073 | 2:ad8f0cdf7015 | 178 | |
20172573073 | 2:ad8f0cdf7015 | 179 | char buffer1[32]; |
20172573073 | 2:ad8f0cdf7015 | 180 | strftime(buffer1, 32, "%H:%M:%S", localtime(&seconds)); |
20172573073 | 2:ad8f0cdf7015 | 181 | pc.printf(" , %s", buffer1); |
20172573073 | 2:ad8f0cdf7015 | 182 | pc.printf(" , %1.f , %.2f , ",float(w*4.5),da); |
20172573073 | 2:ad8f0cdf7015 | 183 | if(al==4){ |
20172573073 | 2:ad8f0cdf7015 | 184 | pc.printf("tarjeta"); |
20172573073 | 2:ad8f0cdf7015 | 185 | }else if(b==4){ |
20172573073 | 2:ad8f0cdf7015 | 186 | pc.printf("llavero"); |
20172573073 | 2:ad8f0cdf7015 | 187 | }else{ |
20172573073 | 2:ad8f0cdf7015 | 188 | pc.printf("sin lectura"); |
20172573073 | 2:ad8f0cdf7015 | 189 | } |
20172573073 | 2:ad8f0cdf7015 | 190 | pc.printf("\n\r"); |
20172573073 | 3:e7eaa479e804 | 191 | Thread::wait(40); |
20172573073 | 2:ad8f0cdf7015 | 192 | |
20172573073 | 2:ad8f0cdf7015 | 193 | } |
20172573073 | 2:ad8f0cdf7015 | 194 | } |
20172573073 | 0:366b3e64c83c | 195 | int main() |
20172573073 | 0:366b3e64c83c | 196 | { |
20172573073 | 3:e7eaa479e804 | 197 | myservo.calibrate(0.0015,180); |
20172573073 | 1:849d12c9b2be | 198 | set_time(1591673863); |
20172573073 | 1:849d12c9b2be | 199 | RfChip.PCD_Init(); |
20172573073 | 0:366b3e64c83c | 200 | t.start((servo)); |
20172573073 | 1:849d12c9b2be | 201 | t.set_priority (osPriorityNormal3); |
20172573073 | 0:366b3e64c83c | 202 | t1.start(seg7); |
20172573073 | 2:ad8f0cdf7015 | 203 | t1.set_priority (osPriorityNormal); |
20172573073 | 0:366b3e64c83c | 204 | t2.start(oled); |
20172573073 | 1:849d12c9b2be | 205 | t2.set_priority (osPriorityNormal1); |
20172573073 | 2:ad8f0cdf7015 | 206 | t3.start(serial); |
20172573073 | 2:ad8f0cdf7015 | 207 | t2.set_priority (osPriorityNormal2); |
20172573073 | 1:849d12c9b2be | 208 | t4.start(rf); |
20172573073 | 1:849d12c9b2be | 209 | t.join(); |
20172573073 | 0:366b3e64c83c | 210 | } |