Practicas / Mbed 2 deprecated Maqueta_Combinada_FINAL

Dependencies:   mbed Adafruit_GFX DS1820

Revision:
0:d6db09ba7537
Child:
1:65e9a9b006c1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Wed Dec 15 18:02:35 2021 +0000
@@ -0,0 +1,337 @@
+#include "mbed.h"
+#include "hcsr04.h"
+#include "DS1820.h"
+
+
+#include "Adafruit_SSD1306.h"
+
+class I2CPreInit : public I2C
+{
+public:
+    I2CPreInit(PinName sda, PinName scl) : I2C(sda, scl)
+    {
+        frequency(100000);
+        start();
+    };
+};
+
+I2CPreInit gI2C(PB_9,PB_8);
+
+Adafruit_SSD1306_I2c gOled(gI2C,NC,0x78,64,128);
+
+
+Serial pc(USBTX, USBRX); 
+
+
+
+Ticker tickerMideDistancia;
+unsigned distancia=20;
+
+HCSR04  usensor(D7,D8);    //(PinName TrigPin,PinName EchoPin):
+DigitalIn finalDer(D2);    //Final de carrera DERECHA
+DigitalIn finalIzq(D3);    //Final de carrera IZQUIERDA
+DigitalIn boton(D5);       //Boton para iniciar el programa seleccionado
+DigitalIn switcher(D9);    //Interruptor para indicar que programa usar
+DigitalOut step(D13);
+DigitalOut dir(D12);
+DigitalOut enable(D11);
+DigitalOut  led(LED1);
+DigitalOut myLed1 (D4);    //Indicador programa Taladro seleccionado
+DigitalOut myLed2 (D6);    //Indicador programa Transportador de Piezas seleccionado
+
+DS1820      ds1820(D10);   //Substitute PA_9 with actual mbed pin name connected to the DS1820 data pin
+
+
+
+float temp = 0;
+int contador=0;            //Contador de Piezas e Impactos del Taladro
+int FUNCIONAR=0;           //Variable que de comienzo al programa en funcion del boton
+
+
+int x=0;                   //Variable abilitadora programa Transportador de Piezas, en funcion del interruptor
+int y=0;                   //Variable abilitadora programa Taladro, en funcion del interruptor
+
+Timer tiempo;              //Temprizador para las acciones del taladro
+
+enum estados {cerrada, abriendose, cerrandose, abierta};
+estados estado;
+
+
+void paso(int d)
+{
+    dir=d;
+    step=1;
+    wait_us(100);   // Cambio de paso
+    step=0;
+    wait_us(900);  //Este hay que cambiar
+}
+
+void estadoCerrada()
+{
+    
+    if (x==1) {          //Entrada al Transportador de Piezas
+        
+        if((finalIzq == 1) && (FUNCIONAR==1)) {     //Inicio en funcion del Final de Carrera de la Izquierda y del Boton
+            wait(0.5);                              //Tiempo de espera para descargar la Pieza
+            enable=1;
+            estado=abriendose;
+
+            pc.printf("Final2 pulsado\r\n");
+
+            }
+    }
+
+    if(y==1) {          //Entrada al Taladro
+        
+        if((finalIzq == 1) && (FUNCIONAR==1)) {    //Inicio en funcion del Final de Carrera de la Izquierda y del Boton
+        enable=1;
+        estado=abriendose;
+        
+        }
+
+       
+        else if (contador>0){                      //Una vez se alcanza la posicion para taladrar, el contador es mayor de 0 y no parara/cumplira esta condicion hasta que al final del programa se iguale el contador a 0 
+    
+        estado=abriendose;   
+        
+        
+        }
+        
+        tiempo.reset();
+        tiempo.start(); 
+    }
+
+
+}
+
+void estadoAbriendose()
+{
+
+    if(x==1) {          //Entrada al Transportador de Piezas
+
+        if((finalDer==1)) {
+
+            estado=abierta;
+            enable=0;
+
+            } 
+            
+        else  {
+            
+            gOled.clearDisplay();
+
+            paso(1);
+
+            }
+    }
+
+
+    if(y==1) {          //Entrada al Taladro
+
+
+        if(tiempo.read() > 4 ){
+        
+        contador++;
+        estado=abierta;
+        enable=0;
+        
+        }
+        
+        else if ((contador>0)  && (tiempo.read() > 0.6)){
+    
+        contador++;
+        estado=abierta;
+        enable=0;   
+             
+        }
+        else  {
+        
+        paso(1);    
+        
+        
+        }
+
+    }
+
+
+}
+
+void estadoCerrandose()
+{
+
+    if(x==1) {          //Entrada al Transportador de Piezas
+        
+        if((finalIzq==1 && contador<3)) {            //Bucle hasta hasta que el contador alcance 3
+
+            estado=cerrada;
+            enable=0;
+        } 
+        
+        else if ((finalIzq==1)&& contador>2) {       //Cuando el contador alcance 3, se terminara el programa
+            
+        estado = cerrada;
+        enable = 0; 
+        contador=0;
+        FUNCIONAR=0;  
+            
+            }
+        
+        else  {                                      //Activar/Mantener movimiento
+
+            paso(0);            
+
+        }
+    }
+    
+    if (y==1){          //Entrada al Taladro
+        
+        if((tiempo.read() > 0.6) && contador<7) {    //Recorrido limitado por tiempo y contador(menor que 7) para taladro
+        
+        estado=cerrada;
+    
+        } 
+        
+
+        else if ((contador>6)&& (finalIzq==1)){      //Cuando el contador alcance 7 se pulse el final de carrera de la izquierda, se terminara el programa
+    
+        estado = cerrada;
+        enable = 0; 
+        contador=0;  
+        FUNCIONAR=0; 
+    
+        }
+    
+    
+        else {
+        
+        paso(0);                                     //Activar/Mantener movimiento
+        
+        }
+        
+    }
+
+}
+
+void estadoAbierta()
+{
+        
+        if(x==1){          //Entrada al Transportador de Piezas
+            
+            contador++;    //Contador Piezas
+            
+            
+            gOled.clearDisplay();
+            gOled.printf("Piezas Transportadas = %d\n",contador);
+            gOled.printf("temp = %3.1f C\r\n", temp);
+            gOled.display();
+            gOled.setTextCursor(0,0);
+            pc.printf("temp = %3.1f C\r\n", temp);
+            
+
+                }
+                
+        if (y==1){         //Entrada al Taladro
+        
+            gOled.clearDisplay();
+            gOled.printf("Impactos Taladro = %d\n",contador);
+            gOled.printf("temp = %3.1f C\r\n", temp);
+            gOled.display();
+            gOled.setTextCursor(0,0);
+            pc.printf("temp = %3.1f C\r\n", temp);
+        
+                    }            
+    
+    
+    tiempo.reset();
+    tiempo.start(); 
+
+    enable=1;
+    estado=cerrandose;
+
+}
+
+
+int main()
+{
+    pc.baud(115200);
+    estado=cerrada;
+    gOled.begin();
+    gOled.clearDisplay();
+    gOled.printf("Hola\n");
+    gOled.display();
+
+
+    if (boton == 1){
+        
+        FUNCIONAR=1;
+        
+        }
+    
+    
+    
+    if(x==1) {
+        gOled.clearDisplay();
+        gOled.printf("Programa: Transporte de Piezas\n");
+        gOled.display();
+    }
+
+    if(y==1) {
+        gOled.clearDisplay();
+        gOled.printf("Programa: Taladro\n");
+        gOled.display();
+    }
+    tiempo.reset();
+
+    pc.baud(115200);
+
+    while(1) {
+        
+        if (switcher ==0){       //Programa Transportador de Piezas
+            
+            y=0;
+            x=1;
+        
+            myLed1=1;   
+            myLed2=0;
+        
+            }
+            
+        else if (switcher==1){   //Programa Taladro
+            
+            y=1;
+            x=0;
+            
+            myLed1=0;
+            myLed2=1;
+            
+            }
+        
+        if (boton==1){
+            
+            FUNCIONAR=1;
+        
+            }
+    
+
+        switch ( estado ) {
+            case cerrada:
+                estadoCerrada();
+                break;
+            case abriendose:
+                estadoAbriendose();
+                break;
+            case abierta:
+                estadoAbierta();
+                break;
+            case cerrandose:
+                estadoCerrandose();
+                break;
+            default:
+                break;
+        }
+
+
+    }
+
+}
+