Practicas / Mbed 2 deprecated Maqueta_Combinada_FINAL

Dependencies:   mbed Adafruit_GFX DS1820

main.cpp

Committer:
daniferca
Date:
2021-12-16
Revision:
3:b05574b98b47
Parent:
2:20c2d39d5902
Child:
4:c691dac74f1b

File content as of revision 3:b05574b98b47:

#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;
AnalogIn adc_temp(ADC_TEMP);
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) && contador==0) {     //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;

            gOled.clearDisplay();
            gOled.printf("Programa Transporte");
            gOled.display();
            gOled.setTextCursor(0,0);

            }
            
        else if (contador>0){
            
            wait(0.5);                                             //Tiempo de espera para descargar la Pieza
            enable=1;
            estado=abriendose;
            
            
            }
    }

    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;
        
        gOled.clearDisplay();
        gOled.printf("Programa Taladro");
        gOled.display();
        gOled.setTextCursor(0,0);
        
        }

       
        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 if (FUNCIONAR>1){
            
            estado=abierta;
            
        }
        
            
        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 && FUNCIONAR==1) {            //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 if ((finalIzq==1) && (FUNCIONAR>1)) {       //
            
        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.display();
            gOled.setTextCursor(0,0);
            

                }
                
        if (y==1){         //Entrada al Taladro
        
            gOled.clearDisplay();
            gOled.printf("Impactos Taladro = %d\n",contador);
            gOled.printf("temp = %3.1f C\r\n", adc_temp.read()*100);
            gOled.display();
            gOled.setTextCursor(0,0);
            pc.printf("ADC Temp = %f\n", (adc_temp.read()*100));
        
                }            
    
    
    tiempo.reset();
    tiempo.start(); 

    enable=1;
    estado=cerrandose;

}

//void estadoSEGURIDAD(){
    
//    if(FUNCIONAR>1){
        
//        if(finalIzq==1){
            
 //           FUNCIONAR==0;
 //           estado==cerrada;
        
   //         }

        
//       else{
            
  //          contador==1000;
 //           paso(0);
            
  //          }
    
  //  }
    
 // }
int main()
{
    pc.baud(115200);
    estado=cerrada;
    gOled.begin();
    gOled.clearDisplay();
    gOled.printf("Hola\n");
    gOled.display();
    ds1820.begin();
        ds1820.startConversion();

    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++;
        
            }
    

        switch ( estado ) {
            case cerrada:
                estadoCerrada();
                break;
            case abriendose:
                estadoAbriendose();
                break;
            case abierta:
                estadoAbierta();
                break;
            case cerrandose:
                estadoCerrandose();
                break;
            //case SEGURIDAD:
             //   estadoSEGURIDAD();
             //   break;
            default:
                break;
        }

     

    }

}