escaner RF - RTOS multitareas

Dependencies:   mbed Servo MFRC522_Updated HC-SR04 ssd1306_library

Committer:
20172573073
Date:
Tue Jun 09 05:15:28 2020 +0000
Revision:
1:849d12c9b2be
Parent:
0:366b3e64c83c
Child:
2:ad8f0cdf7015
rtos : escaner_rf

Who changed what in which revision?

UserRevisionLine numberNew 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 0:366b3e64c83c 24 int a,q;
20172573073 0:366b3e64c83c 25 float menor;
20172573073 0:366b3e64c83c 26 float da;
20172573073 0:366b3e64c83c 27 float dis = 0.0;
20172573073 0:366b3e64c83c 28
20172573073 0:366b3e64c83c 29
20172573073 0:366b3e64c83c 30 int anodeComun[10] = {
20172573073 0:366b3e64c83c 31 0b0000001, // 0
20172573073 0:366b3e64c83c 32 0b1001111, // 1
20172573073 0:366b3e64c83c 33 0b0010010, // 2
20172573073 0:366b3e64c83c 34 0b0000110, // 3
20172573073 0:366b3e64c83c 35 0b1001100, // 4
20172573073 0:366b3e64c83c 36 0b0100100, // 5
20172573073 0:366b3e64c83c 37 0b0100000, // 6
20172573073 0:366b3e64c83c 38 0b0001111, // 7
20172573073 0:366b3e64c83c 39 0b0000000, // 8
20172573073 0:366b3e64c83c 40 0b0001100, // 9
20172573073 0:366b3e64c83c 41 };
20172573073 0:366b3e64c83c 42
20172573073 0:366b3e64c83c 43 void servo()
20172573073 0:366b3e64c83c 44 {
20172573073 1:849d12c9b2be 45
20172573073 0:366b3e64c83c 46 while(true) {
20172573073 0:366b3e64c83c 47 menor = sonar.getCm();
20172573073 0:366b3e64c83c 48 for(int i=0; i<40; i++) {
20172573073 0:366b3e64c83c 49 myservo = i/40.0;
20172573073 0:366b3e64c83c 50 da = sonar.getCm();
20172573073 1:849d12c9b2be 51 pc.printf("%1.f , %.2f \n\r",float(i*4.5),da);
20172573073 0:366b3e64c83c 52 if(menor > da) {
20172573073 0:366b3e64c83c 53 menor = da;
20172573073 0:366b3e64c83c 54 a=(i*180)/40;
20172573073 0:366b3e64c83c 55 }
20172573073 0:366b3e64c83c 56 //ThisThread::sleep_for(500);
20172573073 1:849d12c9b2be 57 wait(0.05);
20172573073 0:366b3e64c83c 58 }
20172573073 0:366b3e64c83c 59 menor=sonar.getCm();
20172573073 0:366b3e64c83c 60 a=0;
20172573073 0:366b3e64c83c 61 for(int i=40; i>0; i--) {
20172573073 0:366b3e64c83c 62 myservo = i/40.0;
20172573073 0:366b3e64c83c 63 da = sonar.getCm();
20172573073 1:849d12c9b2be 64 pc.printf("%1.f , %.2f \n\r",float(i*4.5),da);
20172573073 0:366b3e64c83c 65 if(menor > da) {
20172573073 0:366b3e64c83c 66 menor = da;
20172573073 0:366b3e64c83c 67 a=(i*180)/40;
20172573073 0:366b3e64c83c 68 }
20172573073 0:366b3e64c83c 69 //ThisThread::sleep_for(500);
20172573073 1:849d12c9b2be 70 wait(0.05);
20172573073 0:366b3e64c83c 71 }
20172573073 0:366b3e64c83c 72 }
20172573073 0:366b3e64c83c 73 }
20172573073 0:366b3e64c83c 74 void seg7()
20172573073 0:366b3e64c83c 75 {
20172573073 0:366b3e64c83c 76 while(1) {
20172573073 1:849d12c9b2be 77 int d,u,n,c;
20172573073 0:366b3e64c83c 78 n=int(menor);
20172573073 1:849d12c9b2be 79
20172573073 1:849d12c9b2be 80 c= n/100;
20172573073 1:849d12c9b2be 81 d = (n - (c*100))/10;
20172573073 0:366b3e64c83c 82 u = n % 10;
20172573073 0:366b3e64c83c 83
20172573073 0:366b3e64c83c 84 display1=1;
20172573073 0:366b3e64c83c 85 display2=0;
20172573073 1:849d12c9b2be 86 display3=0;
20172573073 0:366b3e64c83c 87 display7Seg=anodeComun[d];
20172573073 1:849d12c9b2be 88
20172573073 0:366b3e64c83c 89 //ThisThread::sleep_for(25);
20172573073 1:849d12c9b2be 90 wait(0.003);
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 0:366b3e64c83c 97 //ThisThread::sleep_for(25);
20172573073 1:849d12c9b2be 98 wait(0.003);
20172573073 1:849d12c9b2be 99
20172573073 1:849d12c9b2be 100 display1=0;
20172573073 1:849d12c9b2be 101 display2=0;
20172573073 1:849d12c9b2be 102 display3=1;
20172573073 1:849d12c9b2be 103 display7Seg=anodeComun[c];
20172573073 1:849d12c9b2be 104
20172573073 1:849d12c9b2be 105 //ThisThread::sleep_for(25);
20172573073 1:849d12c9b2be 106 wait(0.003);
20172573073 1:849d12c9b2be 107
20172573073 1:849d12c9b2be 108
20172573073 0:366b3e64c83c 109 }
20172573073 0:366b3e64c83c 110 }
20172573073 0:366b3e64c83c 111 void oled()
20172573073 0:366b3e64c83c 112 {
20172573073 0:366b3e64c83c 113 while(1) {
20172573073 0:366b3e64c83c 114 lcd.init();
20172573073 0:366b3e64c83c 115 lcd.speed (SSD1306::Fast);
20172573073 0:366b3e64c83c 116 lcd.cls();
20172573073 1:849d12c9b2be 117 lcd.locate (4,1);
20172573073 1:849d12c9b2be 118 lcd.printf ("dis menor :%2.f ",menor);
20172573073 0:366b3e64c83c 119 lcd.locate (5,1);
20172573073 1:849d12c9b2be 120 lcd.printf ("angulo :%d ",a);
20172573073 0:366b3e64c83c 121 lcd.locate (1,0);
20172573073 0:366b3e64c83c 122 time_t seconds = time(NULL);
20172573073 1:849d12c9b2be 123 lcd.printf("Fecha= %s", ctime(&seconds));
20172573073 0:366b3e64c83c 124 lcd.redraw();
20172573073 1:849d12c9b2be 125 //ThisThread::sleep_for(500);
20172573073 0:366b3e64c83c 126 wait(0.5);
20172573073 0:366b3e64c83c 127 }
20172573073 0:366b3e64c83c 128 }
20172573073 1:849d12c9b2be 129 void rf()
20172573073 0:366b3e64c83c 130 {
20172573073 0:366b3e64c83c 131 while(1) {
20172573073 1:849d12c9b2be 132 lcd.init();
20172573073 1:849d12c9b2be 133 lcd.speed (SSD1306::Fast);
20172573073 1:849d12c9b2be 134 if ( ! RfChip.PICC_IsNewCardPresent()) {
20172573073 1:849d12c9b2be 135 //ThisThread::sleep_for(500);
20172573073 1:849d12c9b2be 136 wait_ms(500);
20172573073 1:849d12c9b2be 137 continue;
20172573073 1:849d12c9b2be 138 }
20172573073 1:849d12c9b2be 139 if ( ! RfChip.PICC_ReadCardSerial()) {
20172573073 1:849d12c9b2be 140 //ThisThread::sleep_for(500);
20172573073 1:849d12c9b2be 141 wait_ms(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 0:366b3e64c83c 148 //ThisThread::sleep_for(1000);
20172573073 1:849d12c9b2be 149 wait_ms(1000);
20172573073 0:366b3e64c83c 150 }
20172573073 0:366b3e64c83c 151 }
20172573073 1:849d12c9b2be 152
20172573073 1:849d12c9b2be 153
20172573073 0:366b3e64c83c 154 int main()
20172573073 0:366b3e64c83c 155 {
20172573073 0:366b3e64c83c 156 myservo.calibrate(0.0015,360);
20172573073 1:849d12c9b2be 157 set_time(1591673863);
20172573073 1:849d12c9b2be 158 RfChip.PCD_Init();
20172573073 0:366b3e64c83c 159 t.start((servo));
20172573073 1:849d12c9b2be 160 t.set_priority (osPriorityNormal3);
20172573073 0:366b3e64c83c 161 t1.start(seg7);
20172573073 1:849d12c9b2be 162 t1.set_priority (osPriorityNormal2);
20172573073 0:366b3e64c83c 163 t2.start(oled);
20172573073 1:849d12c9b2be 164 t2.set_priority (osPriorityNormal1);
20172573073 1:849d12c9b2be 165 t4.start(rf);
20172573073 1:849d12c9b2be 166 t.join();
20172573073 0:366b3e64c83c 167 }