Electronica / Mbed OS Proyecto2

Dependencies:   Adafruit_GFX

Revision:
4:7f4d81ed3984
Parent:
3:3fbadf6c492f
Child:
5:faf450e9aab0
--- a/main.cpp	Thu Dec 16 11:39:46 2021 +0000
+++ b/main.cpp	Thu Dec 16 15:01:29 2021 +0000
@@ -38,11 +38,13 @@
 
 Timer t;
 Timer bot;
+Timer timerVel;
 //Ticker tickerVel;
-int velocidad=0;
+float velocidad=0;
 
 float temperatura;
 int contador=0;
+float velocidad_relativa=0.0;
 //int target=75; Para el control de velocidad
 
 void encoderAIrq()// contador de vueltas
@@ -62,24 +64,22 @@
     step=0;
     wait_us(900);
 }
-void estadoreset()
+void estadoreset()// estado de seguridad, si el taladro esta situado en un sitio que no sea uno de los 2 finales de carrera, retrocederá hasta el principio dejandolo en el estado de apagado.
 {
     if (final1!=1) {
         enableMotor=1;
         paso(0);
-    } else if (final1 ==1) {
-
+    } else if (final1 ==1) {// Una vez pisa el final de carrera 1 habilita un mensaje en pantalla dando el valor de la temperatura del motor  del taladro y la velocidad del mismo en RPM.
         gOled.clearDisplay();
         gOled.printf("La temperatura es de %.4f\n",temperatura);
-        gOled.printf("La velocidad en rpm es de %d\r\n",velocidad);
+        gOled.printf("La velocidad en rpm es de %.4f\r\n",velocidad);
         gOled.display();
         gOled.setTextCursor(0,0);
         estado = apagado;
         enableMotor =0;
     }
 }
-
-void estadoapagado()
+void estadoapagado()// Estado "inicial" en el que pulsando el boton de inicio comenzará su avance para iniciar la perforación.
 {
     dirBMotor =0;
 
@@ -89,23 +89,21 @@
         estado= motorpalante;
     }
 }
-
-void estadomotorpalante()
+void estadomotorpalante()// estado que hace funcionar el avance, el motor taladra a la vez que perfora. 
 {
-    if (boton_emergencia==1) {
+    if (boton_emergencia==1 || temperatura>80) {//es el boton de emergencia y de temperatura, en caso de pulsar la seta de emergencia y que la temperatura supere el valor de 80º, se parará automaticamente. 
         estado=emergencia;
     }
     if (boton_inicial==0&&final2==0) {
         paso(1);
         dirBMotor=1;
         rele =1;
-
     } else if (final2==1) {
         int tiempo=t.read();
         //pc.printf("La temperatura es de %.4f\n",temperatura);
         gOled.clearDisplay();
         gOled.printf("La temperatura es de %.4f\n",temperatura);
-        gOled.printf("La velocidad en rpm es de %d\r\n",velocidad);
+        gOled.printf("La velocidad en rpm es de %f\r\n",velocidad);
         gOled.display();
         gOled.setTextCursor(0,0);
 
@@ -130,25 +128,25 @@
 
 void estadoatras()
 {
-    if (boton_emergencia==1) {
+    if (boton_emergencia==1 || temperatura>80) {//es el boton de emergencia y de temperatura, en caso de pulsar la seta de emergencia y que la temperatura supere el valor de 80º, se parará automaticamente. 
         estado=emergencia;
     }
-    if (final2!=1 && boton_inicial==1 && final1!=1) {
+    if (final2!=1 && boton_inicial==1 && final1!=1) {// si se pulsa el boton de inicio, el avance dejara de funcionar pero el motor seguirá funcionando
         enableMotor=0;
         rele=0;
-        dirBMotor=1;//Esto hay que cambiarlo
+        dirBMotor=1;
         bot.reset();
         estado= estatico;
-    } else if (final1 ==1) {
+    } else if (final1 ==1) {//si pisa el final de carrera 1, el motor irá hacia delante dirección final carrera 2 
         estado = motorpalante;
     } else {
-        paso(0);
+        paso(0);//Va hacia la otra dirección
     }
 
 }
 void estadoestatico()
 {
-    if (boton_emergencia==1) {
+    if (boton_emergencia==1 || temperatura>80) {//es el boton de emergencia y de temperatura, en caso de pulsar la seta de emergencia y que la temperatura supere el valor de 80º, se parará automaticamente. 
         estado=emergencia;
     }
     if (boton_inicial ==0 ) {
@@ -165,7 +163,7 @@
     pc.printf("La temperatura es de %.4f\n",temperatura);
     gOled.clearDisplay();
     gOled.printf("La temperatura es de %.4f\n",temperatura);
-    gOled.printf("%d\r\n",velocidad);
+    gOled.printf("%f\r\n",velocidad);
     gOled.display();
     gOled.setTextCursor(0,0);
 }
@@ -177,31 +175,32 @@
     temperatura = (3950/(log(Rt/100e3)+(3950/298)))-273.1;
 }
 
-void funcionVel()
+void funcionVel(float tiempo)
 {
-    velocidad=contador*60;//esto es en rpm haciendo *60seg para pasar a min.
-    contador=0;
-    /*if(target-velocidad>0){
+    velocidad = contador*60/tiempo;//esto es en rpm haciendo *60seg para pasar a min.
+    contador = 0;
+    velocidad_relativa = temperatura*(96000/80);
+    //diferencia_velocidad = velocidad - velocidad_relativa;
+    if(velocidad_relativa-velocidad>0) {
         dirBMotor=dirBMotor+0.01;
-        }
-        else{
+    } else {
         dirBMotor=dirBMotor-0.01;
-            }*/
+    }
 }
 
 void estadoemergencia()
 {
+    rele=0;
+    paso(0);
     estado = apagado;
 }
 
 int main()
 {
     pc.baud(115200);
-    pc.printf("La velocidad es de %d\r rpm\n",velocidad);
     gOled.begin();
     gOled.clearDisplay();
-    gOled.printf("Hola, bienvenido\n");
-    gOled.printf("La velocidad en rpm es de %d\r\n",velocidad);
+    gOled.printf("Hola, bienvenid@ a la simulacion de un equipo de perforacion rotatoria\n");
     gOled.display();
     gOled.setTextCursor(0,0);
     //visualTemp.attach(&muestraTemp,1.0);
@@ -216,8 +215,13 @@
     // tickerVel.attach(&funcionVel,0.1);
     dirAMotor=0;
     //dirBMotor=0.5;
+    timerVel.start();
     while(1) {
         medir();
+        if(timerVel.read()>0.1) {
+            funcionVel(timerVel.read());
+            timerVel.reset();
+        }
         //distancia=usensor.get_dist_cm();
         switch ( estado ) {