Codigo que funciona

Dependencies:   DebouncedIn Door HCSR04 mbed

Fork of Ascensor by Andrés Felipe Toro Betancur

Committer:
laura015
Date:
Thu Jun 07 21:25:25 2018 +0000
Revision:
1:27e51c864014
Parent:
0:4f72e674f36d
C?digo manual ascensor

Who changed what in which revision?

UserRevisionLine numberNew contents of line
aftorob 0:4f72e674f36d 1 #include "mbed.h"
aftorob 0:4f72e674f36d 2 #include "DebouncedIn.h"
aftorob 0:4f72e674f36d 3 #include "hcsr04.h"
aftorob 0:4f72e674f36d 4
aftorob 0:4f72e674f36d 5 DigitalIn B_stop(PTC8); //Boton de paro de emergencia
aftorob 0:4f72e674f36d 6 DigitalIn B_close(PTC9); //Boton “Cerrar” de la cabina
aftorob 0:4f72e674f36d 7 DigitalIn B_open(PTA13); //Boton “Abrir” de la cabina
aftorob 0:4f72e674f36d 8
aftorob 0:4f72e674f36d 9 DigitalIn B_c1(PTB1); //Boton "1" de la cabina
aftorob 0:4f72e674f36d 10 DigitalIn B_c2(PTB0); //Boton "2" de la cabina
aftorob 0:4f72e674f36d 11 DigitalIn B_c3(PTA5); //Boton "3" de la cabina
aftorob 0:4f72e674f36d 12
aftorob 0:4f72e674f36d 13 DigitalIn B_p1(PTB2); //Boton piso 1
aftorob 0:4f72e674f36d 14 DigitalIn B_p3(PTC1); //Boton piso 3
aftorob 0:4f72e674f36d 15 DigitalIn B_p2u(PTB3); //Boton piso 2 arriba
aftorob 0:4f72e674f36d 16 DigitalIn B_p2d(PTC2); //Boton piso 2 abajo
aftorob 0:4f72e674f36d 17
aftorob 0:4f72e674f36d 18 PwmOut S_1(PTD2); //Servomotor piso 1
aftorob 0:4f72e674f36d 19 PwmOut S_2(PTD0); //Servomotor piso 2
aftorob 0:4f72e674f36d 20 PwmOut S_3(PTD5); //Servomotor piso 3
aftorob 0:4f72e674f36d 21
aftorob 0:4f72e674f36d 22 PwmOut Motor_en(PTA12); //Motor enable
aftorob 0:4f72e674f36d 23 DigitalOut Motor_up(PTD4); //Motor arriba
aftorob 0:4f72e674f36d 24 DigitalOut Motor_down(PTA4); //Motor abajo
aftorob 0:4f72e674f36d 25
aftorob 0:4f72e674f36d 26 DigitalOut Trigger(PTD3); //Trigger Ultrasonido
aftorob 0:4f72e674f36d 27 DigitalIn Echo(PTD1); //Echo ultrasonido
aftorob 0:4f72e674f36d 28 DigitalOut myled(LED1); //monitor trigger
aftorob 0:4f72e674f36d 29 DigitalOut myled2(LED2); //monitor echo
aftorob 0:4f72e674f36d 30
aftorob 0:4f72e674f36d 31 Serial pc(PTA2, PTA1);
aftorob 0:4f72e674f36d 32
aftorob 0:4f72e674f36d 33 int distance = 0;
aftorob 0:4f72e674f36d 34 int correction = 0;
aftorob 0:4f72e674f36d 35 Timer sonar;
aftorob 0:4f72e674f36d 36
aftorob 0:4f72e674f36d 37 int sensordist(void);
aftorob 0:4f72e674f36d 38 void comp(int dmeasured);
aftorob 0:4f72e674f36d 39
laura015 1:27e51c864014 40 int Piso_trans;
laura015 1:27e51c864014 41 int Piso_act;
laura015 1:27e51c864014 42
aftorob 0:4f72e674f36d 43 int main(){
laura015 1:27e51c864014 44 sonar.reset(); // Se resetea el temporizador
laura015 1:27e51c864014 45 sonar.start(); // Se inicia el temporizador
aftorob 0:4f72e674f36d 46 while(Echo == 2){};
aftorob 0:4f72e674f36d 47 myled=0;
aftorob 0:4f72e674f36d 48 sonar.stop();
laura015 1:27e51c864014 49 correction = sonar.read_us(); // Se halla el factor de corrección
aftorob 0:4f72e674f36d 50
aftorob 0:4f72e674f36d 51 while(true){
aftorob 0:4f72e674f36d 52
laura015 1:27e51c864014 53 int d = sensordist(); // Lectura del sensor de ultrasonido
laura015 1:27e51c864014 54 comp(d); // Entrego el valor del piso actual
aftorob 0:4f72e674f36d 55 wait_ms(50);
aftorob 0:4f72e674f36d 56
aftorob 0:4f72e674f36d 57 while((B_p2u == 0)){
aftorob 0:4f72e674f36d 58 pc.printf("u");
aftorob 0:4f72e674f36d 59 Motor_up = 1;
aftorob 0:4f72e674f36d 60 Motor_down = 0;
aftorob 0:4f72e674f36d 61 Motor_en.period_ms(50);
laura015 1:27e51c864014 62 Motor_en.pulsewidth_us(3500);
aftorob 0:4f72e674f36d 63 }
aftorob 0:4f72e674f36d 64 while((B_p2d == 0)){
aftorob 0:4f72e674f36d 65 pc.printf("d");
aftorob 0:4f72e674f36d 66 Motor_up = 0;
aftorob 0:4f72e674f36d 67 Motor_down = 1;
aftorob 0:4f72e674f36d 68 Motor_en.period_ms(50);
laura015 1:27e51c864014 69 Motor_en.pulsewidth_us(150);
aftorob 0:4f72e674f36d 70 }
aftorob 0:4f72e674f36d 71 if ((B_p2u == 1) && (B_p2d == 1)){
aftorob 0:4f72e674f36d 72 pc.printf("p");
aftorob 0:4f72e674f36d 73 Motor_up = 0;
aftorob 0:4f72e674f36d 74 Motor_down = 0;
laura015 1:27e51c864014 75 }
aftorob 0:4f72e674f36d 76
laura015 1:27e51c864014 77 if (Piso_act==1){
laura015 1:27e51c864014 78 if(B_open == 0){ // Si presiono el boton de apertura
laura015 1:27e51c864014 79 S_1.period_ms(30) ;
laura015 1:27e51c864014 80 S_1.pulsewidth_us(2300);
laura015 1:27e51c864014 81 }
laura015 1:27e51c864014 82 if(B_close == 0){ // Si presiono el boton de apertura
laura015 1:27e51c864014 83 S_1.period_ms(30) ;
laura015 1:27e51c864014 84 S_1.pulsewidth_us(600);
aftorob 0:4f72e674f36d 85 }
laura015 1:27e51c864014 86 }
laura015 1:27e51c864014 87 if (Piso_act==3){
laura015 1:27e51c864014 88 if(B_open == 0){ // Si presiono el boton de apertura
laura015 1:27e51c864014 89 S_3.period_ms(30) ;
laura015 1:27e51c864014 90 S_3.pulsewidth_us(2300);
laura015 1:27e51c864014 91 }
laura015 1:27e51c864014 92 if(B_close == 0){ // Si presiono el boton de apertura
laura015 1:27e51c864014 93 S_3.period_ms(30) ;
laura015 1:27e51c864014 94 S_3.pulsewidth_us(600);
laura015 1:27e51c864014 95 }
laura015 1:27e51c864014 96 }
laura015 1:27e51c864014 97
laura015 1:27e51c864014 98 if(B_p1 == 0){
laura015 1:27e51c864014 99 while(Piso_act!=1){
aftorob 0:4f72e674f36d 100
aftorob 0:4f72e674f36d 101 }
aftorob 0:4f72e674f36d 102 }
laura015 1:27e51c864014 103
laura015 1:27e51c864014 104
laura015 1:27e51c864014 105 wait_ms(300);
laura015 1:27e51c864014 106
laura015 1:27e51c864014 107 }
aftorob 0:4f72e674f36d 108 }
aftorob 0:4f72e674f36d 109
aftorob 0:4f72e674f36d 110
aftorob 0:4f72e674f36d 111
aftorob 0:4f72e674f36d 112 int sensordist(void){
aftorob 0:4f72e674f36d 113 Trigger = 1;
aftorob 0:4f72e674f36d 114 myled = 1;
aftorob 0:4f72e674f36d 115 myled2 = 0;
aftorob 0:4f72e674f36d 116 sonar.reset();
aftorob 0:4f72e674f36d 117 wait_us(10.0);
aftorob 0:4f72e674f36d 118 Trigger = 0;
aftorob 0:4f72e674f36d 119 myled = 0;
aftorob 0:4f72e674f36d 120 while (Echo==0) {};
aftorob 0:4f72e674f36d 121 myled2=Echo;
aftorob 0:4f72e674f36d 122 sonar.start();
aftorob 0:4f72e674f36d 123 while (Echo==1) {};
aftorob 0:4f72e674f36d 124 sonar.stop();
aftorob 0:4f72e674f36d 125 distance = (sonar.read_us()-correction)/58.0;
aftorob 0:4f72e674f36d 126 myled2 = 0;
aftorob 0:4f72e674f36d 127 return distance;
aftorob 0:4f72e674f36d 128 }
aftorob 0:4f72e674f36d 129
laura015 1:27e51c864014 130 void comp(int dmeasured){ // Comparación de distancia para determinar piso actual
laura015 1:27e51c864014 131 if((dmeasured <= 20)){
laura015 1:27e51c864014 132 pc.printf("3");
laura015 1:27e51c864014 133 Piso_trans=3;
laura015 1:27e51c864014 134 if (dmeasured <= 6){
laura015 1:27e51c864014 135 Piso_act=3;
laura015 1:27e51c864014 136 }
aftorob 0:4f72e674f36d 137 }
laura015 1:27e51c864014 138 /*else if ((dmeasured > 5 && dmeasured <= 10)){
aftorob 0:4f72e674f36d 139 pc.printf("8");
aftorob 0:4f72e674f36d 140 }
aftorob 0:4f72e674f36d 141 else if ((dmeasured > 10 && dmeasured <= 15)){
aftorob 0:4f72e674f36d 142 pc.printf("7");
aftorob 0:4f72e674f36d 143 }
aftorob 0:4f72e674f36d 144 else if ((dmeasured > 15 && dmeasured <= 20)){
aftorob 0:4f72e674f36d 145 pc.printf("6");
aftorob 0:4f72e674f36d 146 }
aftorob 0:4f72e674f36d 147 else if ((dmeasured > 20 && dmeasured <= 25)){
aftorob 0:4f72e674f36d 148 pc.printf("5");
laura015 1:27e51c864014 149 }*/
laura015 1:27e51c864014 150 else if ((dmeasured > 20 && dmeasured <= 35)){
laura015 1:27e51c864014 151 pc.printf("2");
laura015 1:27e51c864014 152 Piso_trans=2;
laura015 1:27e51c864014 153 if ((dmeasured > 25 && dmeasured <= 27)){
laura015 1:27e51c864014 154 Piso_act=2;
laura015 1:27e51c864014 155 }
aftorob 0:4f72e674f36d 156 }
laura015 1:27e51c864014 157 /*else if ((dmeasured > 30 && dmeasured <= 35)){
aftorob 0:4f72e674f36d 158 pc.printf("3");
aftorob 0:4f72e674f36d 159 }
aftorob 0:4f72e674f36d 160 else if ((dmeasured > 35 && dmeasured <= 40)){
aftorob 0:4f72e674f36d 161 pc.printf("2");
laura015 1:27e51c864014 162 }*/
laura015 1:27e51c864014 163 else if ((dmeasured > 35){
aftorob 0:4f72e674f36d 164 pc.printf("1");
laura015 1:27e51c864014 165 Piso_trans=1;
laura015 1:27e51c864014 166 if ((dmeasured > 45)){
laura015 1:27e51c864014 167 Piso_act=1;
laura015 1:27e51c864014 168 }
laura015 1:27e51c864014 169 }
aftorob 0:4f72e674f36d 170 else{
aftorob 0:4f72e674f36d 171 pc.printf("0");
aftorob 0:4f72e674f36d 172 }
aftorob 0:4f72e674f36d 173 }
aftorob 0:4f72e674f36d 174
aftorob 0:4f72e674f36d 175