poyecto

main.cpp

Committer:
agat
Date:
2021-12-14
Revision:
0:cf20365296f5

File content as of revision 0:cf20365296f5:

#include "mbed.h"
#include "math.h"

Serial pc(USBTX, USBRX); // tx, rx

AnalogIn senal(A0);
DigitalOut dirAMotor(A4);
PwmOut     dirBMotor(A3);
InterruptIn encoderA(A2);//puede ser D11
DigitalIn final1(D9);
InterruptIn final2(D10);
DigitalOut rele(A5);
DigitalOut led(LED1);
HCSR04  usensor(D7,D8);
DigitalOut enableMotor(D1);
DigitalOut step(D2);
DigitalIn boton_motor(USER_BUTTON);
DigitalIn boton_(USER_BUTTON);//HAY QUE PONER ALGO
Ticker tickerMideDistancia;

int contador=0;
unsigned int dist;
enum estados {apagado_sistema, finalcarrera1_dado, finalcarrera1_SINdar, }

void paso(int d)
{
    dir=d;
    step=1;
    wait_us(100);
    step=0;//MIRAR ESTO PORQUE AQUI DICE QUE SE VA A PARAR
    wait_us(900);
}


void finalIrq()
{
    pc.printf("Final2 pulsado\r\n");
}

void encoderAIrq()
{
    contador++;
}

void apagado_sistema()
{
    if (boton_motor==1 && boton_pantalla==1) {
        enableMotor=1;
        estado = finalcarrera1_SINdar;
        //encender pantalla
    } else if(boton_pantalla!=1 || boton_motor==1 ) {
        pc.printf("Pulsa los dos botones");
    }
}

void finalcarrera1_dado()
{
    if  (final1!=1) {
        estado = finalcarrera1_SINdar;
        step =1;
        paso(1);
        
    } else if (final1 ==1){
        rele =0;
        enableMotor=0;
        step=0;//HABILITO EL PASO 
        }
}

void finalcarrera1_SINdar()
{
    if (boton_)//ESTO SIRVE PARA QUE LA DIRECCION EN LA QUE ESTA ACTUANDO CAMBIE
    if()//PARA EL GIRO DE MOTOR PERO QUE TODO SIGA 
    if (temperatura >= 353) {
        //rele =0;
        //enableMotor=0;
        //step=0;
        //pordríamos meter el motorcillo del ventilador para que se refrigere el motor
        //poner mensaje en pantalla de que se ha superado la temperaura de trabajo
        // 
        dirAMotor;//COMO SE ACTIVA EL DIR??? 
        estado = ;
    } else if (dist<10) {//MIRAR LO POR QUE NO SABEMOS 
        //rele =0;
        //enableMotor=0;
        //step=0;
        paso(0);
        estado = ;
        paso(0);
    }
else if (final2==1){
 rele =0;
        //enableMotor=0;
        //step=0;
        estado = ;
        
        
 }
 
    int main() {
        pc.baud(115200);
        encoderA.rise(&encoderAIrq);  // attach the address of the flip function to the rising edge
        dirAMotor=0;
//Ultrasonido
        usensor.start();
        ;
        while (true) {
            switch (estado) {
                case apagado_boton_motor:
                    apagado_boton();
                    break;
                case apagado_boton_pantalla:
                    apagado_boton_pantalla();
                    break;
                case finalcarrera1_dado:
                    finalcarrera1_dado();
                    break;

                    //Vueltas del motor
                    for (float i=0; i<1; i=i+0.01) {
                        dirBMotor=i;
                        //wait(0.100);
                    }
                    pc.printf("Vueltas: %d\r\n",contador);
                    contador=0;

                    //lectura del voltaje
                    float tension=senal.read()*3.3;
                    pc.printf("Valor voltios %.4f leido flat\n",tension);
                    uint16_t datonentero=senal.read_u16();
                    tension=(datonentero*3.3)/65536;
                    pc.printf("Valor voltios %.4f leido flat\n",tension);
                    //wait(1.0);

                    //Final de carrera
                    if(final1==1) {
                        pc.printf("Final1 pulsado\r\n");

                    } else {
                        pc.printf("Final1 no pulsado\r\n");
                        //Rele
                        rele=1;//activación del rele para queempiece a calentar, emula el calentamiento de taladro
                        led=1;
                        step =1;
                        dist=usensor.get_dist_cm();
                        pc.printf("Distance =%d\n",dist);//mostrar distancia en la que se va a mover
                        //wait(1.0);
                        //rele=0;
                        //led=0;
                        //wait(1.0);
                        //Vout=(3,3/(Rt+100k))*100k
                        //Vout/100k = (3,3/(Rt+100K))
                        //Vout/(100k*3,3)=1/(Rt+100K)
                        //(Rt+100K)=((100k*3,3)/Vout)
                        //Rt=((100k*3,3)/Vout)-100k
                        Rt= ((100e3*3.3)/tension)-100e3;
                        temperatura = 3950/(log(Rt/100e3)+(3950/298));
                        pc.printf("La temperatura es de %.4f\n",temperatura);
                        if (temperatura >= 353) {
                            rele =0;
                            enableMotor=0;
                            step=0;
                            //pordríamos meter el motorcillo del ventilador para que se refrigere el motor
                            //poner mensaje en pantalla de que se ha superado la temperaura de trabajo
                        }
                        if (dist>=15) {
                            rele =0;
                            enableMotor=0;
                            step=0;
                        }

                    }

            }
//wait(0.100);

//Ultrasonido
            usensor.start();
            dist=usensor.get_dist_cm();
            pc.printf("Distance =%d\n",dist);
            wait_ms(500);
        }

    }