Programación Ascensor Tiempo Real

Dependencies:   DebouncedIn SRF05 mbed

Files at this revision

API Documentation at this revision

Comitter:
AaronGonzalez
Date:
Wed Jun 07 19:36:48 2017 +0000
Commit message:
Ascensor Tiempo Real

Changed in this revision

DebouncedIn.lib Show annotated file Show diff for this revision Revisions of this file
SRF05.lib Show annotated file Show diff for this revision Revisions of this file
ascensor.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r cbc582265222 DebouncedIn.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DebouncedIn.lib	Wed Jun 07 19:36:48 2017 +0000
@@ -0,0 +1,1 @@
+https://mbed.org/users/janhavi/code/DebouncedIn/#e2ba40ab11e8
diff -r 000000000000 -r cbc582265222 SRF05.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SRF05.lib	Wed Jun 07 19:36:48 2017 +0000
@@ -0,0 +1,1 @@
+https://mbed.org/users/simon/code/SRF05/#e758665e072c
diff -r 000000000000 -r cbc582265222 ascensor.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ascensor.cpp	Wed Jun 07 19:36:48 2017 +0000
@@ -0,0 +1,428 @@
+#include "mbed.h"
+#include "SRF05.h"
+#include "DebouncedIn.h"
+
+Serial pc(USBTX, USBRX);
+
+// Declaración de pines para las puertas
+// a partir de entradas analógicas
+PwmOut servo1(PTB0);    // entrada analógica servo 1 - listo
+PwmOut servo2(PTB1);    // entrada analógica servo 2 - listo
+PwmOut servo3(PTB2);    // sentrada analógica servo 3 - listo
+
+int STOP=0;                     // estado detenido inicializado en 0
+
+//servo1.period(0.025);
+//servo2.period(0.025);
+//servo3.period(0.025);
+//servo1.pulsewidth(0.00055);
+//servo2.pulsewidth(0.0022);
+//servo3.pulsewidth(0.0022);
+
+// Declaración de pines de los motores
+//DigitalOut motor1(PTC16);
+//DigitalOut motor2(PTC13);
+//DigitalOut enable(PTB3);
+
+int motor1;
+int motor2;
+
+// Declaración de pines para los botones
+DebouncedIn boton1(PTC11);
+DebouncedIn boton2b(PTC10);
+DebouncedIn boton2s(PTC6);
+DebouncedIn boton3(PTC5);
+DebouncedIn boton1i(PTC4);
+DebouncedIn boton2i(PTC3);
+DebouncedIn boton3i(PTC0);
+DebouncedIn boton_p(PTC7);
+
+// Declaración pines del sensor de ultrasonido
+SRF05 sensor(PTD3,PTD1);
+
+// Declaración pines digitales para los led's
+DigitalOut led1(PTE5);
+DigitalOut led2(PTE4);
+DigitalOut led3(PTE3);
+
+// Declaración pines de salida para el motor principal tipo PWM 
+// Entradas tipo PWM Análogas para inversión de giro
+PwmOut giro1(PTC1);    
+PwmOut giro2(PTC2);
+DigitalOut enable(PTB3);
+
+//giro1.period_ms(20);
+//giro2.period_ms(20);
+    
+//A continuación se describe el número de botones a usar
+// los pisos del ascensor, el botón de paro
+// y las distancias entre los pisos
+int botones[4],pisos[3],paro;
+int bussy=0;                    
+float distancia;
+float dist3=8.0;
+float dist2=28.0;
+float dist1=47.0;
+
+// Pulsadores 
+void pulsadores(void const *args){
+    
+    while(1) {
+        if (boton_p.read()==1){    // Lectura de boton de paro
+            STOP=1;           
+            paro=1; 
+            }
+        if (boton1.read()==1){
+            botones[0]=1; //luego irá al piso 1
+            }
+        if (boton2b.read()==1){
+            botones[1]=1; //luego irá al piso 1
+            }
+        if (boton2s.read()==1){
+            botones[2]=1; //luego irá al piso 1
+            }
+        if (boton3.read()==1){
+            botones[3]=1; //luego irá al piso 1
+            }
+        if (boton1i.read()==1){
+            pisos[0]=1; //luego irá al piso 1
+            }
+        if (boton2i.read()==1){
+            pisos[1]=1;  //luego irá al piso 2
+            }
+        if (boton3i.read()==1){
+            pisos[2]=1; //luego irá al piso 3
+            }
+      // Thread::wait(1000.0*0.02);
+    }
+}
+
+void sensar(void const *args){
+    
+    while(1) {
+        
+        distancia=sensor.read(); //sensar
+        
+        //Thread::wait(1000.0*0.02);
+        
+        distancia=floor(distancia); 
+    }
+}
+void subir(void){ 
+
+    if(motor2==0){
+        giro1.period_ms(20);
+        giro2.period_ms(20);
+        enable=1;
+        motor1=1;
+        
+        //giro1=1;
+        //motor2=0;
+        //giro2=0;
+        
+        giro1.pulsewidth_ms(15);
+        giro2.pulsewidth_ms(0);
+        }
+}
+void bajar(void){
+    
+    if(motor1==0){
+        giro1.period_ms(20);
+        giro2.period_ms(20);
+        enable=1;
+        motor1=0;
+        
+        //giro1=0;
+        //motor2=1;
+        //giro2=1;
+        
+        giro1.pulsewidth_ms(0);
+        giro2.pulsewidth_ms(8);
+        }
+}
+void stop(void){          
+
+    giro1.period_ms(20);
+    giro2.period_ms(20);
+    enable=0;
+    motor1=0;
+    
+    //giro1=0;
+    //motor2=0;
+    //giro2=0;
+    
+    enable=0;
+    giro1.pulsewidth_ms(0);
+    giro2.pulsewidth_ms(0);
+}
+
+void tercero(void){
+    
+    bussy=1;
+    botones[3]=0;
+    pisos[2]=0;
+    servo1.period(0.025);   
+    servo1.pulsewidth(0.0008);
+    servo2.period(0.025);   
+    servo2.pulsewidth(0.0055);  
+    servo3.period(0.025);   
+    servo3.pulsewidth(0.0055);   
+
+    int flag1=0,flag2=0;
+    subir();
+    
+    while(1){
+        
+        if (botones[2]==1 && distancia>=dist2){
+            flag2=1;
+            }    
+        
+        if (flag2==1 && distancia==dist2 && flag1==0){
+            stop();
+            servo2.pulsewidth(0.0008); 
+            wait(5);
+            servo2.pulsewidth(0.0055);    
+            flag1=1; 
+            subir();    
+            botones[2]=0;
+            }
+        
+        if (botones[1]==1){
+            pisos[1]=1; // va luego para el piso 2
+            }
+
+        if (distancia<=dist3){
+            stop();
+            servo3.pulsewidth(0.0008); 
+            wait(5);
+            servo3.pulsewidth(0.0055);
+            break;
+            }
+        }
+        bussy=0;
+}
+
+void segundo(void){
+    
+    botones[1]=0; 
+    botones[2]=0;
+    pisos[1]=0; 
+    bussy=1;
+    servo1.period(0.025);   
+    servo1.pulsewidth(0.0008);
+    servo2.period(0.025);   
+    servo2.pulsewidth(0.0055);  
+    servo3.period(0.025);   
+    servo3.pulsewidth(0.0055);   
+
+    if (distancia>(dist2+2.0)){
+        subir(); 
+        }
+    else{
+        
+        if (distancia<(dist2-2.0)){
+            bajar();}
+            }
+         
+        while(1){
+            if (distancia==dist2){
+                stop();
+                servo2.pulsewidth(0.0008); 
+                wait(5);
+                servo2.pulsewidth(0.0055);    
+                break;
+                }
+        }
+    bussy=0;
+}
+
+void primero(void){
+        
+        botones[0]=0;
+        pisos[0]=0;
+        bussy=1;
+        servo1.period(0.025);   
+        servo1.pulsewidth(0.0008);
+        servo2.period(0.025);   
+        servo2.pulsewidth(0.0055);  
+        servo3.period(0.025);   
+        servo3.pulsewidth(0.0055);   
+        int flag1=0,flag2=0;
+        bajar();
+        
+        while(1){
+            
+            if (botones[1]==1 && distancia<=dist2){
+                flag2=1;
+                }
+            if (flag2==1 && distancia==dist2 && flag1==0){
+                stop();
+                servo2.pulsewidth(0.0008);
+                wait(5);
+                servo2.pulsewidth(0.0055);      
+                flag1=1;  
+                bajar();  
+                botones[1]=0;
+                }
+            if(botones[2]==1){
+                pisos[1]=1;
+                }
+            if (distancia>=dist1){
+                stop();
+                servo1.pulsewidth(0.0022);
+                wait(5);
+                servo1.pulsewidth(0.0008);
+                break;
+                }
+        }
+        bussy=0;
+}
+
+void bombillos(void const *args){
+   
+    while(1){
+        
+        if (motor2==1){
+            if (distancia>=dist3 && distancia<dist2){
+                led3=1;
+                led2=0;
+                led1=0;  
+                }
+            if (distancia>=dist2 && distancia<dist1){
+                led3=0;
+                led2=1;
+                led1=0;     
+                }  
+            if (distancia>=dist1){
+                led3=0;
+                led2=0;
+                led1=1;     
+                }
+        }
+        if (motor1==1 || (motor1==0 && motor2==0)){
+            
+            if (distancia<=dist1 && distancia>dist2){
+                led3=0;
+                led2=0;
+                led1=1;  
+                }
+            if (distancia<=dist2 && distancia>dist3){
+                led3=0;
+                led2=1;
+                led1=0;     
+                }
+            if (distancia<=dist3){
+                led3=1;
+                led2=0;
+                led1=0;     
+                }
+        }
+        
+        //Thread::wait(1000.0*0.02);
+        
+    }
+}
+
+void parar(void){
+
+    servo1.period(0.025);   
+    servo1.pulsewidth(0.0008);
+    servo2.period(0.025);   
+    servo2.pulsewidth(0.0055);  
+    servo3.period(0.025);   
+    servo3.pulsewidth(0.0055); 
+    bajar();
+    
+    while(1) {
+        if (distancia>=dist1){
+            stop();
+            servo1.pulsewidth(0.0008);
+            botones[0]=0;
+            botones[1]=0;
+            botones[2]=0;
+            botones[3]=0;
+            pisos[0]=0;
+            pisos[1]=0;
+            pisos[2]=0;
+            STOP=0;
+            paro=0;
+            break;
+           }
+    }
+}
+
+int main() {
+    
+    giro1.period_ms(20);
+    giro2.period_ms(20);
+    giro1.pulsewidth_ms(0);
+    giro2.pulsewidth_ms(0);
+    
+    enable=0;
+    motor1=0;
+    motor2=0;
+    led1=0;
+    led2=0;
+    led3=0;
+    
+    //Thread thread2(pulsadores);
+    //Thread thread4(sensar);
+    //Thread thread5(bombillos);
+    
+    botones[0]=0;
+    botones[1]=0;
+    botones[2]=0;
+    botones[3]=0;
+    pisos[0]=0;
+    pisos[1]=0;
+    pisos[2]=0;
+    
+    while(1) {
+        if (paro==1 ){
+            botones[0]=0;
+            botones[1]=0;
+            botones[2]=0;
+            botones[3]=0;
+            pisos[0]=0;
+            pisos[1]=0;
+            pisos[2]=0;
+            STOP=0;
+            paro=0;
+            primero();
+            }
+        if (STOP==0 && bussy==0){
+            
+            if (pisos[0]==1){
+                pisos[0]=0;
+                primero();
+                }
+            if ( pisos[1]==1){
+                pisos[1]=0;
+                segundo();
+                }
+            if (pisos[2]==1){
+                pisos[2]=0;
+                tercero();
+                }   
+            if (botones[0]==0 && botones[1]==0 && botones[2]==0 && botones[3]==0){
+                }
+            if ( botones[3]==1){
+                botones[3]=0; 
+                tercero();
+                }
+            if (botones[1]==1 || botones[2]==1){
+                botones[1]=0; 
+                botones[2]=0; 
+                segundo();
+                }
+            if (botones[0]==1 ){
+                botones[0]=0;    
+                primero();  
+                }
+        }
+        
+        //Thread::wait(1000.0*0.2);
+        //myled = 0;
+        //Thread::wait(1000.0*0.2);     
+    }
+}
diff -r 000000000000 -r cbc582265222 mbed.bld
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Wed Jun 07 19:36:48 2017 +0000
@@ -0,0 +1,1 @@
+https://mbed.org/users/mbed_official/code/mbed/builds/86740a56073b
\ No newline at end of file