ENCO

Dependencies:   mbed

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?

UserRevisionLine numberNew 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 }