poyecto

Revision:
0:cf20365296f5
diff -r 000000000000 -r cf20365296f5 main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Tue Dec 14 10:50:46 2021 +0000
@@ -0,0 +1,184 @@
+#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);
+        }
+
+    }
\ No newline at end of file