![](/media/cache/group/default_image.jpg.50x50_q85.jpg)
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); } }