
ENCO
main.cpp@1:214e5fb18573, 2020-12-07 (annotated)
- Committer:
- jota_ud
- Date:
- Mon Dec 07 15:49:55 2020 +0000
- Revision:
- 1:214e5fb18573
- Parent:
- 0:fb45c2082cb8
Programa para contar las revoluciones de un motor con RTOS
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
20172573073 | 0:fb45c2082cb8 | 1 | #include "mbed.h" |
20172573073 | 0:fb45c2082cb8 | 2 | #include "rtos.h" |
jota_ud | 1:214e5fb18573 | 3 | |
20172573073 | 0:fb45c2082cb8 | 4 | |
jota_ud | 1:214e5fb18573 | 5 | |
20172573073 | 0:fb45c2082cb8 | 6 | InterruptIn botoncito(PTC12); |
20172573073 | 0:fb45c2082cb8 | 7 | InterruptIn botoncito2(PTC3); |
20172573073 | 0:fb45c2082cb8 | 8 | InterruptIn botoncito3(D2); |
jota_ud | 1:214e5fb18573 | 9 | //DigitalOut myled(LED_RED); |
jota_ud | 1:214e5fb18573 | 10 | |
jota_ud | 1:214e5fb18573 | 11 | |
jota_ud | 1:214e5fb18573 | 12 | PwmOut pwm1(PTD4); |
jota_ud | 1:214e5fb18573 | 13 | PwmOut pwm2(PTA13); |
jota_ud | 1:214e5fb18573 | 14 | DigitalOut myled(D9); |
jota_ud | 1:214e5fb18573 | 15 | |
jota_ud | 1:214e5fb18573 | 16 | int contador=0,a=1,c=0,r,h,q,nivel=0; |
jota_ud | 1:214e5fb18573 | 17 | bool s=0,k=0,DC=0; |
jota_ud | 1:214e5fb18573 | 18 | |
20172573073 | 0:fb45c2082cb8 | 19 | Serial pc(USBTX,USBRX); |
jota_ud | 1:214e5fb18573 | 20 | |
20172573073 | 0:fb45c2082cb8 | 21 | Semaphore one_slot(1); |
20172573073 | 0:fb45c2082cb8 | 22 | Mutex mutex1; |
20172573073 | 0:fb45c2082cb8 | 23 | |
20172573073 | 0:fb45c2082cb8 | 24 | |
20172573073 | 0:fb45c2082cb8 | 25 | Thread thread; |
20172573073 | 0:fb45c2082cb8 | 26 | Thread thread1; |
20172573073 | 0:fb45c2082cb8 | 27 | Thread thread2; |
20172573073 | 0:fb45c2082cb8 | 28 | Thread thread3; |
20172573073 | 0:fb45c2082cb8 | 29 | |
20172573073 | 0:fb45c2082cb8 | 30 | |
jota_ud | 1:214e5fb18573 | 31 | void herra(){ |
jota_ud | 1:214e5fb18573 | 32 | |
20172573073 | 0:fb45c2082cb8 | 33 | one_slot.release(); |
20172573073 | 0:fb45c2082cb8 | 34 | one_slot.wait(); |
20172573073 | 0:fb45c2082cb8 | 35 | r=r+1; |
jota_ud | 1:214e5fb18573 | 36 | |
jota_ud | 1:214e5fb18573 | 37 | |
20172573073 | 0:fb45c2082cb8 | 38 | one_slot.release(); |
20172573073 | 0:fb45c2082cb8 | 39 | } |
20172573073 | 0:fb45c2082cb8 | 40 | |
20172573073 | 0:fb45c2082cb8 | 41 | void boton1() |
20172573073 | 0:fb45c2082cb8 | 42 | { |
20172573073 | 0:fb45c2082cb8 | 43 | one_slot.release(); |
20172573073 | 0:fb45c2082cb8 | 44 | one_slot.wait(); |
20172573073 | 0:fb45c2082cb8 | 45 | //one_slot.try_acquire(); |
20172573073 | 0:fb45c2082cb8 | 46 | s=!s; |
20172573073 | 0:fb45c2082cb8 | 47 | one_slot.release(); |
20172573073 | 0:fb45c2082cb8 | 48 | } |
20172573073 | 0:fb45c2082cb8 | 49 | void boton2() |
20172573073 | 0:fb45c2082cb8 | 50 | { |
20172573073 | 0:fb45c2082cb8 | 51 | one_slot.release(); |
20172573073 | 0:fb45c2082cb8 | 52 | one_slot.wait(); |
20172573073 | 0:fb45c2082cb8 | 53 | NVIC_SystemReset (); |
20172573073 | 0:fb45c2082cb8 | 54 | one_slot.release(); |
20172573073 | 0:fb45c2082cb8 | 55 | } |
20172573073 | 0:fb45c2082cb8 | 56 | |
20172573073 | 0:fb45c2082cb8 | 57 | |
20172573073 | 0:fb45c2082cb8 | 58 | |
20172573073 | 0:fb45c2082cb8 | 59 | void motor1() |
20172573073 | 0:fb45c2082cb8 | 60 | { |
20172573073 | 0:fb45c2082cb8 | 61 | while(1) { |
20172573073 | 0:fb45c2082cb8 | 62 | if(s==1) { |
20172573073 | 0:fb45c2082cb8 | 63 | c++; |
20172573073 | 0:fb45c2082cb8 | 64 | switch(c) { |
20172573073 | 0:fb45c2082cb8 | 65 | case 1: |
20172573073 | 0:fb45c2082cb8 | 66 | pwm2=0.3; |
20172573073 | 0:fb45c2082cb8 | 67 | q=30; |
jota_ud | 1:214e5fb18573 | 68 | nivel=1; |
20172573073 | 0:fb45c2082cb8 | 69 | Thread::wait(2000); |
20172573073 | 0:fb45c2082cb8 | 70 | break; |
20172573073 | 0:fb45c2082cb8 | 71 | case 2: |
20172573073 | 0:fb45c2082cb8 | 72 | pwm2=0.5; |
20172573073 | 0:fb45c2082cb8 | 73 | q=50; |
jota_ud | 1:214e5fb18573 | 74 | nivel=1; |
20172573073 | 0:fb45c2082cb8 | 75 | Thread::wait(2000); |
20172573073 | 0:fb45c2082cb8 | 76 | break; |
20172573073 | 0:fb45c2082cb8 | 77 | case 3: |
20172573073 | 0:fb45c2082cb8 | 78 | pwm2=0.7; |
20172573073 | 0:fb45c2082cb8 | 79 | q=70; |
jota_ud | 1:214e5fb18573 | 80 | nivel=1; |
20172573073 | 0:fb45c2082cb8 | 81 | Thread::wait(2000); |
20172573073 | 0:fb45c2082cb8 | 82 | break; |
20172573073 | 0:fb45c2082cb8 | 83 | case 4: |
20172573073 | 0:fb45c2082cb8 | 84 | pwm2=1; |
20172573073 | 0:fb45c2082cb8 | 85 | q=100; |
jota_ud | 1:214e5fb18573 | 86 | nivel=2; |
20172573073 | 0:fb45c2082cb8 | 87 | Thread::wait(6000); |
20172573073 | 0:fb45c2082cb8 | 88 | break; |
20172573073 | 0:fb45c2082cb8 | 89 | case 5: |
20172573073 | 0:fb45c2082cb8 | 90 | pwm2=0.7; |
20172573073 | 0:fb45c2082cb8 | 91 | q=70; |
jota_ud | 1:214e5fb18573 | 92 | nivel=3; |
20172573073 | 0:fb45c2082cb8 | 93 | Thread::wait(2000); |
20172573073 | 0:fb45c2082cb8 | 94 | break; |
20172573073 | 0:fb45c2082cb8 | 95 | case 6: |
20172573073 | 0:fb45c2082cb8 | 96 | pwm2=0.5; |
20172573073 | 0:fb45c2082cb8 | 97 | q=50; |
jota_ud | 1:214e5fb18573 | 98 | nivel=3; |
20172573073 | 0:fb45c2082cb8 | 99 | Thread::wait(2000); |
20172573073 | 0:fb45c2082cb8 | 100 | break; |
20172573073 | 0:fb45c2082cb8 | 101 | case 7: |
20172573073 | 0:fb45c2082cb8 | 102 | q=30; |
20172573073 | 0:fb45c2082cb8 | 103 | pwm2=0.3; |
jota_ud | 1:214e5fb18573 | 104 | nivel=3; |
20172573073 | 0:fb45c2082cb8 | 105 | Thread::wait(2000); |
20172573073 | 0:fb45c2082cb8 | 106 | c=0; |
20172573073 | 0:fb45c2082cb8 | 107 | break; |
20172573073 | 0:fb45c2082cb8 | 108 | |
20172573073 | 0:fb45c2082cb8 | 109 | } |
jota_ud | 1:214e5fb18573 | 110 | |
jota_ud | 1:214e5fb18573 | 111 | }else{ |
jota_ud | 1:214e5fb18573 | 112 | pwm2=0.0; |
jota_ud | 1:214e5fb18573 | 113 | Thread::wait(1000); |
jota_ud | 1:214e5fb18573 | 114 | } |
20172573073 | 0:fb45c2082cb8 | 115 | } |
20172573073 | 0:fb45c2082cb8 | 116 | } |
20172573073 | 0:fb45c2082cb8 | 117 | |
jota_ud | 1:214e5fb18573 | 118 | |
20172573073 | 0:fb45c2082cb8 | 119 | |
jota_ud | 1:214e5fb18573 | 120 | |
20172573073 | 0:fb45c2082cb8 | 121 | void s7() |
20172573073 | 0:fb45c2082cb8 | 122 | { |
20172573073 | 0:fb45c2082cb8 | 123 | while(1) { |
jota_ud | 1:214e5fb18573 | 124 | if(s==1 && r==0) { |
20172573073 | 0:fb45c2082cb8 | 125 | k=1; |
jota_ud | 1:214e5fb18573 | 126 | r=0; |
jota_ud | 1:214e5fb18573 | 127 | DC=1; |
jota_ud | 1:214e5fb18573 | 128 | myled=!myled; |
jota_ud | 1:214e5fb18573 | 129 | Thread::wait(1000); |
jota_ud | 1:214e5fb18573 | 130 | |
jota_ud | 1:214e5fb18573 | 131 | } else if(s==1 && r>0){ |
jota_ud | 1:214e5fb18573 | 132 | k=0; |
jota_ud | 1:214e5fb18573 | 133 | h=r*60; |
jota_ud | 1:214e5fb18573 | 134 | h=h/4; |
jota_ud | 1:214e5fb18573 | 135 | //pc.printf("%d",h); |
jota_ud | 1:214e5fb18573 | 136 | r=0; |
jota_ud | 1:214e5fb18573 | 137 | DC=1; |
jota_ud | 1:214e5fb18573 | 138 | myled=0; |
jota_ud | 1:214e5fb18573 | 139 | Thread::wait(1000); |
20172573073 | 0:fb45c2082cb8 | 140 | |
jota_ud | 1:214e5fb18573 | 141 | } else if(s==0){ |
jota_ud | 1:214e5fb18573 | 142 | k=1; |
jota_ud | 1:214e5fb18573 | 143 | DC=0; |
jota_ud | 1:214e5fb18573 | 144 | myled=0; |
jota_ud | 1:214e5fb18573 | 145 | } |
20172573073 | 0:fb45c2082cb8 | 146 | |
20172573073 | 0:fb45c2082cb8 | 147 | } |
20172573073 | 0:fb45c2082cb8 | 148 | } |
jota_ud | 1:214e5fb18573 | 149 | |
20172573073 | 0:fb45c2082cb8 | 150 | void serial() |
20172573073 | 0:fb45c2082cb8 | 151 | { |
20172573073 | 0:fb45c2082cb8 | 152 | while(1) { |
jota_ud | 1:214e5fb18573 | 153 | |
jota_ud | 1:214e5fb18573 | 154 | if(k==1) { |
jota_ud | 1:214e5fb18573 | 155 | if(DC==0){ |
jota_ud | 1:214e5fb18573 | 156 | pc.printf("Estado - Detenido - nivel:%d\n",q); |
jota_ud | 1:214e5fb18573 | 157 | }else{ |
jota_ud | 1:214e5fb18573 | 158 | if(nivel==1){ |
jota_ud | 1:214e5fb18573 | 159 | pc.printf("Estado - acelerando\n\r Nivel:%d - rpm:Error - Revise el sistema\n",q,h); |
jota_ud | 1:214e5fb18573 | 160 | |
jota_ud | 1:214e5fb18573 | 161 | }else if(nivel==2){ |
jota_ud | 1:214e5fb18573 | 162 | pc.printf("Estado - establecimiento\n\r Nivel:%d - rpm:Error - Revise el sistema\n",q,h); |
jota_ud | 1:214e5fb18573 | 163 | |
jota_ud | 1:214e5fb18573 | 164 | }else if(nivel==3){ |
jota_ud | 1:214e5fb18573 | 165 | pc.printf("Estado - frenado\n\r Nivel:%d - rpm:Error - Revise el sistema\n",q,h); |
jota_ud | 1:214e5fb18573 | 166 | } |
jota_ud | 1:214e5fb18573 | 167 | |
jota_ud | 1:214e5fb18573 | 168 | } |
jota_ud | 1:214e5fb18573 | 169 | |
20172573073 | 0:fb45c2082cb8 | 170 | |
jota_ud | 1:214e5fb18573 | 171 | } else if(k==0){ |
jota_ud | 1:214e5fb18573 | 172 | if(nivel==1){ |
jota_ud | 1:214e5fb18573 | 173 | pc.printf("Estado - acelerando\n\r Nivel:%d - rpm:%d - ok\n",q,h); |
jota_ud | 1:214e5fb18573 | 174 | |
jota_ud | 1:214e5fb18573 | 175 | }else if(nivel==2){ |
jota_ud | 1:214e5fb18573 | 176 | pc.printf("Estado - establecimiento\n\r Nivel:%d - rpm:%d - ok\n",q,h); |
jota_ud | 1:214e5fb18573 | 177 | |
jota_ud | 1:214e5fb18573 | 178 | }else if(nivel==3){ |
jota_ud | 1:214e5fb18573 | 179 | pc.printf("Estado - frenado\n\r Nivel:%d - rpm:%d - ok\n",q,h); |
jota_ud | 1:214e5fb18573 | 180 | |
jota_ud | 1:214e5fb18573 | 181 | } |
jota_ud | 1:214e5fb18573 | 182 | |
jota_ud | 1:214e5fb18573 | 183 | |
20172573073 | 0:fb45c2082cb8 | 184 | } |
jota_ud | 1:214e5fb18573 | 185 | |
jota_ud | 1:214e5fb18573 | 186 | |
jota_ud | 1:214e5fb18573 | 187 | |
jota_ud | 1:214e5fb18573 | 188 | |
20172573073 | 0:fb45c2082cb8 | 189 | pc.printf("\n\r"); |
20172573073 | 0:fb45c2082cb8 | 190 | |
jota_ud | 1:214e5fb18573 | 191 | Thread::wait(200); |
20172573073 | 0:fb45c2082cb8 | 192 | |
20172573073 | 0:fb45c2082cb8 | 193 | } |
20172573073 | 0:fb45c2082cb8 | 194 | } |
20172573073 | 0:fb45c2082cb8 | 195 | int main() |
jota_ud | 1:214e5fb18573 | 196 | { |
20172573073 | 0:fb45c2082cb8 | 197 | botoncito.mode(PullUp); |
20172573073 | 0:fb45c2082cb8 | 198 | botoncito.fall(&boton1); |
jota_ud | 1:214e5fb18573 | 199 | |
20172573073 | 0:fb45c2082cb8 | 200 | botoncito2.mode(PullUp); |
20172573073 | 0:fb45c2082cb8 | 201 | botoncito2.fall(&boton2); |
jota_ud | 1:214e5fb18573 | 202 | |
20172573073 | 0:fb45c2082cb8 | 203 | botoncito3.mode(PullUp); |
20172573073 | 0:fb45c2082cb8 | 204 | botoncito3.fall(&herra); |
jota_ud | 1:214e5fb18573 | 205 | |
jota_ud | 1:214e5fb18573 | 206 | |
jota_ud | 1:214e5fb18573 | 207 | thread1.start(s7); |
jota_ud | 1:214e5fb18573 | 208 | thread2.start(serial); |
jota_ud | 1:214e5fb18573 | 209 | thread3.start((motor1)); |
jota_ud | 1:214e5fb18573 | 210 | thread3.join(); |
20172573073 | 0:fb45c2082cb8 | 211 | } |