Projeto Mecatrônico / Mbed 2 deprecated ARDUINO_NEXTION

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
diogonac
Date:
Mon Jun 07 17:47:56 2021 +0000
Parent:
0:9344dd7c7e26
Child:
2:af4dc49198bf
Commit message:
Melhorias, logica para salvar posicoes e volume por posicao

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/main.cpp	Fri Jun 04 18:35:25 2021 +0000
+++ b/main.cpp	Mon Jun 07 17:47:56 2021 +0000
@@ -1,20 +1,21 @@
 #include "mbed.h"
-//#include "TextLCD.h"
-
+#include <string>
+#include <stdio.h>      /* printf, fgets */
+#include <stdlib.h>
+#include <iostream>
 //=============== NEXTION ========================
 
 Serial recebe_arduino(PA_9, PA_10); //TX, RX
-unsigned char set_eixos[4];
+unsigned char set_eixos[5];
 void recebe_dados(unsigned char *data_buf, int numchar);
+
 unsigned char contador_X = 0;
 unsigned char contador_Y = 0;
 unsigned char contador_Z = 0;
 
+char tmp[2];
 //================================================
 
-
-
-
 //TextLCD lcd(D8, D9, D4, D5, D6, D7); //Comunicação com LCD
 BusOut motor_x(PC_8, PC_6, PC_5, PA_12); //Pinos para acionamento do motor do eixo X
 BusOut motor_y(PA_11, PB_12, PB_11, PB_2); //Pinos para acionamento do motor do eixo Y
@@ -35,7 +36,7 @@
 int pulsos_Z = 0; //Contagem dos pulsos para o motor_Z
 int pulsos_X = 0; //Contagem dos pulsos para o motor_X
 int pulsos_Y = 0; //Contagem dos pulsos para o motor_Y
-
+int count;
 int i; //Variável para contar o incremento no motor
 int cont_fim_curso = 0; //Variável para contar o incremento do fim de curso
 int J_XYZ; //Variável para ler o potenciometro do Joystick
@@ -47,6 +48,10 @@
 int contador_rise = 0;
 int seguranca_fdc = 0;
 
+float posicoes[180];//XYZ PEGA, XYZ SOLTA1, XYZ SOLTA2, ...
+
+int quantidades[10];//ml PEGA, ml SOLTA1, ml SOLTA2, ...
+
 float tempo_horario, tempo_anti_horario; //Define os tempos de acionamento do motor
 float deslocamento_X = 0; //Define o deslocamento linear total
 float deslocamento_Y = 0; //Define o deslocamento linear total
@@ -57,7 +62,8 @@
 float deslocamento_max_Z = 0; //Define o deslocamento linear total
 
 float passo_motor = 5.625/32; //Declara o passo angular do motor
-float velocidade = 0.1; //Armazena a velocidade dos motores
+float velocidade = 0.003; //Armazena a velocidade dos motores
+int tempo_acionamento = 3180; //Tempo padrao de acionamento dos eixos
 
 bool valor_SELECT = false; //Boleana para lógica do botão SELECT
 bool estado_referenciamento = false; //Boleana para identificar a necessidade do referênciamento
@@ -73,7 +79,6 @@
 void rotina_deslocamento_eixo (void);
 void rotina_deslocamento_eixo_menos_Z (void);
 void rotina_JOG (void);
-void rotina_botoes_IHM (void);
 
 void rotina_fdc_rise (void);
 void referenciamento (void);
@@ -110,7 +115,6 @@
     while(1) {
 
 
-        recebe_dados(set_eixos, 3);
         //pc.printf("%s \r\n", set_eixos);
 
 //        if(set_eixos[0] == '+' & set_eixos[1] == 'Y') {
@@ -180,6 +184,13 @@
 //        //pc.printf("estado_referenciamento=%4d, estado_botao_emergencia_in=%d valor_SELECT=%d\r\n", estado_referenciamento, estado_botao_emergencia_in, valor_SELECT);
 //        //pc.printf("deslocamento_Z=%4f, pulsos=%d\r\n", deslocamento_Z, pulsos);
 //
+
+        for(i = 0; i <= sizeof(set_eixos); i++) {
+            set_eixos[i] = 0;
+        }
+
+        recebe_dados(set_eixos, 4);
+
         if(set_eixos[0] == 'R' & set_eixos[1] == 'F') {
 
             pc.printf("Referenciamento \r\n");
@@ -203,20 +214,171 @@
                 pc.printf("%s \r\n", set_eixos);
 
             }
-            if(set_eixos[0] == 'R' & set_eixos[1] == 'S') {
+            //recebe_dados(set_eixos, 3);
+
+            if(set_eixos[0] == 'P') { //set_eixos = P27
+
+                //pc.printf("Pagina 4\r\n");
+//                pc.printf("Pega= %s\r\n", set_eixos);
+                //pc.printf("X%3.2f, Y%3.2f, Z%3.2f\n", deslocamento_X, deslocamento_Y, deslocamento_Z); //posicao[180] = {23.00, 100.00, 45.22}
+
+                //int tmp = atoi(cstr);
 
-                pc.printf("Maquina em RESET \r\n");
+                posicoes[0] = deslocamento_X;
+                posicoes[1] = deslocamento_Y;
+                posicoes[2] = deslocamento_Z;
 
-                estado_referenciamento = false;
-                velocidade = 0.1;
+                for(i = 1; i < 3; i++) {
+                    tmp[i-1] = set_eixos[i];
+                }
+
+                quantidades[0] = atoi(tmp);
+
+                pc.printf("PosicoesX= %f, PosicoesY= %f, PosicoesZ= %f \r\n", posicoes[0], posicoes[1], posicoes[2]);
+                pc.printf("Quantidades_pega= %d \r\n", quantidades[0]);
+                pc.printf("set_eixos= %s\r\n", set_eixos);
 
             }
+
+            if(set_eixos[0] == 'S') {
+
+                switch(set_eixos[1]) {
+
+                    case '1':
+
+                        posicoes[3] = deslocamento_X;
+                        posicoes[4] = deslocamento_Y;
+                        posicoes[5] = deslocamento_Z;
+
+                        for(i = 2; i < 4; i++) {
+                            tmp[i-2] = set_eixos[i];
+                        }
+
+                        quantidades[1] = atoi(tmp);
+                        pc.printf("PosicoesX1= %f, PosicoesY1= %f, PosicoesZ1= %f \r\n", posicoes[3], posicoes[4], posicoes[5]);
+                        pc.printf("Quantidades_solta1= %d \r\n", quantidades[1]);
+
+                        break;
+                    case '2':
+
+                        posicoes[6] = deslocamento_X;
+                        posicoes[7] = deslocamento_Y;
+                        posicoes[8] = deslocamento_Z;
+
+                        for(i = 2; i < 4; i++) {
+                            tmp[i-2] = set_eixos[i];
+                        }
+
+                        quantidades[2] = atoi(tmp);
+                        pc.printf("PosicoesX2= %f, PosicoesY2= %f, PosicoesZ2= %f \r\n", posicoes[6], posicoes[7], posicoes[8]);
+                        pc.printf("Quantidades_solta2= %d \r\n", quantidades[2]);
+
+                        break;
+                    case '3':
+
+                        posicoes[9] = deslocamento_X;
+                        posicoes[10] = deslocamento_Y;
+                        posicoes[11] = deslocamento_Z;
+
+                        for(i = 2; i < 4; i++) {
+                            tmp[i-2] = set_eixos[i];
+                        }
+
+                        quantidades[3] = atoi(tmp);
+                        pc.printf("PosicoesX3= %f, PosicoesY3= %f, PosicoesZ3= %f \r\n", posicoes[9], posicoes[10], posicoes[11]);
+                        pc.printf("Quantidades_solta3= %d \r\n", quantidades[3]);
+
+                        break;
+
+                }
+                
+                      case '4':
+
+                        posicoes[12] = deslocamento_X;
+                        posicoes[13] = deslocamento_Y;
+                        posicoes[14] = deslocamento_Z;
+
+                        for(i = 2; i < 4; i++) {
+                            tmp[i-2] = set_eixos[i];
+                        }
+
+                        quantidades[4] = atoi(tmp);
+                        pc.printf("PosicoesX4= %f, PosicoesY4= %f, PosicoesZ4= %f \r\n", posicoes[12], posicoes[13], posicoes[14]);
+                        pc.printf("Quantidades_solta4= %d \r\n", quantidades[4]);
+
+                        break;
+                    case '5':
+
+                        posicoes[15] = deslocamento_X;
+                        posicoes[16] = deslocamento_Y;
+                        posicoes[17] = deslocamento_Z;
+
+                        for(i = 2; i < 4; i++) {
+                            tmp[i-2] = set_eixos[i];
+                        }
+
+                        quantidades[5] = atoi(tmp);
+                        pc.printf("PosicoesX5= %f, PosicoesY5= %f, PosicoesZ5= %f \r\n", posicoes[15], posicoes[16], posicoes[17]);
+                        pc.printf("Quantidades_solta5= %d \r\n", quantidades[5]);
+
+                        break;
+                    case '6':
+
+                        posicoes[18] = deslocamento_X;
+                        posicoes[19] = deslocamento_Y;
+                        posicoes[20] = deslocamento_Z;
+
+                        for(i = 2; i < 4; i++) {
+                            tmp[i-2] = set_eixos[i];
+                        }
+
+                        quantidades[6] = atoi(tmp);
+                        pc.printf("PosicoesX6= %f, PosicoesY6= %f, PosicoesZ6= %f \r\n", posicoes[18], posicoes[19], posicoes[20]);
+                        pc.printf("Quantidades_solta6= %d \r\n", quantidades[6]);
+
+                        break;
+
+                }              
+                
+                
+                
+                
+                
+                
+                
+                
+                
+                
+                
+                
+                
+                
+                
+                
+                
+                
+                
+                
+
+                pc.printf("set_eixos= %s\r\n", set_eixos);
+
+            }
+
+        }
+
+        if(set_eixos[0] == 'R' & set_eixos[1] == 'S') {
+
+            pc.printf("Maquina em RESET \r\n");
+
+            estado_referenciamento = false;
+            velocidade = 0.003;
         }
     }
 }
 
 
 
+
 //void rotina_posicao_salva()
 //{
 //
@@ -229,27 +391,31 @@
 void rotina_emergencia_in()
 {
 
-    if(debounce2.read_ms() >= 10) {
+    if(debounce2.read_ms() >= 25) {
 
         motor_x = 0x00; //Não permite que pulsos sejam enviados para o motor do eixo X
         motor_y = 0x00; //Não permite que pulsos sejam enviados para o motor do eixo Y
         motor_z = 0x00; //Não permite que pulsos sejam enviados para o motor do eixo Z
 
         estado_referenciamento = false; //Solicita um novo referenciamento
-        estado_botao_emergencia_in =! estado_botao_emergencia_in;
+        estado_botao_emergencia_in = true;
         contador_emergencia += 1;
 
-//        lcd.cls();
-//        wait_ms(500);
-//        lcd.locate(0,0);
-//        lcd.printf("Emergencia ON");
-//        lcd.locate(0,1);
-//        lcd.printf("Pressione RST");
-
-        exit(0); //Encerra o programa e obriga o usuário a resetar o sistema
 
         debounce2.reset();
+        pc.printf("contador_emergencia= %d\r\n", contador_emergencia);
     }
+
+
+    if(contador_emergencia == 1) {
+
+        recebe_arduino.printf("E1\n"); //Indica que o botão de emergência foi apertado
+
+        estado_botao_emergencia_in = false;
+
+    }
+
+
 }
 
 void rotina_velocidade_eixo()
@@ -259,19 +425,19 @@
 
     switch(set_eixos[0]) {
         case '1':
-            velocidade = 0.1;
+            tempo_acionamento = 3180; //Desloca 1mm
             break;
         case '2':
-            velocidade = 0.01;
+            tempo_acionamento = 15924; //Desloca 5mm
             break;
         case '3':
-            velocidade = 0.003;
+            tempo_acionamento = 47780; //Desloca 15mm
             break;
 //        default:
 //            velocidade = 0.1;
     }
 
-    pc.printf("Velocidade = %f \r\n", velocidade);
+    pc.printf("tempo_acionamento= %d \r\n", tempo_acionamento);
 //    J_XYZ = joystick.read_u16();
 //    tempo_horario = -1*J_XYZ*0.0000028 + 0.1875;
 //    tempo_anti_horario = J_XYZ*0.000002785 + 0.0025;
@@ -302,11 +468,6 @@
     pc.printf("Z%3.2f\n", deslocamento_Z);
 }
 
-void rotina_botoes_IHM()
-{
-    if(SELECT > 60000 & SELECT < 65000) valor_SELECT =! valor_SELECT;
-    else valor_SELECT = 0;
-}
 
 
 
@@ -370,9 +531,12 @@
                             pulsos_X = 0;
                             pulsos_Y = 0;
                             pulsos_Z = 0;
-                            deslocamento_max_X = 5; //Define o deslocamento linear total
-                            deslocamento_max_Y = 5; //Define o deslocamento linear total
-                            deslocamento_max_Z = 5; //Define o deslocamento linear total
+                            deslocamento_max_X = 100; //Define o deslocamento linear total
+                            deslocamento_max_Y = 100; //Define o deslocamento linear total
+                            deslocamento_max_Z = 100; //Define o deslocamento linear total
+                            tempo_acionamento = 3180;
+                            velocidade = 0.003;
+
                             rotina_deslocamento_eixo();
 
                             recebe_arduino.printf("D\n"); //Done referenciamento
@@ -410,10 +574,9 @@
     else {
 //============== Movimenta Eixo Y ======================================
 
-        if (set_eixos[0] == '-' & set_eixos[1] == 'Y' & set_eixos[2] == 'S') {
-            //tempo_motor.start();
-            while(set_eixos[0] == '-' & set_eixos[1] == 'Y' & set_eixos[2] == 'S' & deslocamento_Y > 0 & pulsos_Y >= 0) {
-
+        if (set_eixos[0] == '-' & set_eixos[1] == 'Y') {
+            tempo_motor.start();
+            while(tempo_motor.read_ms() <= tempo_acionamento  & deslocamento_Y > 0 & pulsos_Y >= 0) {
                 for(i = 0; i < 4; i++) {
                     motor_y = 1 << i;
                     pulsos_Y-=1;
@@ -422,44 +585,32 @@
                     rotina_deslocamento_eixo();
 
                 }
-
-                recebe_dados(set_eixos, 3);
-                pc.printf("Comando: %s\r\n", set_eixos);
-
             }
-
-//            tempo_motor.reset();
-//            tempo_motor.stop();
+            tempo_motor.reset();
+            tempo_motor.stop();
         }
 
-        //if(set_eixos[0] == '+' & set_eixos[1] == 'Y' & set_eixos[2] == 'P') {
-
-        recebe_dados(set_eixos, 3);
-        rotina_velocidade_eixo();
-        pc.printf("Comando: %s\r\n", set_eixos);
-
-        if(set_eixos[0] == 'M' & set_eixos[1] == 'Y' & set_eixos[2] == 'P' & deslocamento_max_Y > deslocamento_Y & pulsos_Y >= 0) {
+        if(set_eixos[0] == '+' & set_eixos[1] == 'Y') {
+            tempo_motor.start();
+            while(tempo_motor.read_ms() <= tempo_acionamento & deslocamento_max_Y > deslocamento_Y & pulsos_Y >= 0) {
+                for(i = 3; i > -1; i--) {
+                    motor_y = 1 << i;
+                    pulsos_Y+=1;
+                    wait(velocidade);
+                    rotina_velocidade_eixo();
+                    rotina_deslocamento_eixo();
 
-            for(i = 3; i > -1; i--) {
-                motor_y = 1 << i;
-                pulsos_Y+=1;
-                wait(velocidade);
-                rotina_velocidade_eixo();
-                rotina_deslocamento_eixo();
+                }
             }
-
+            tempo_motor.reset();
+            tempo_motor.stop();
         }
 
-        //tempo_motor.reset();
-        //tempo_motor.stop();
-
-        //}
-
 //============== Movimenta Eixo X ======================================
 
         if (set_eixos[0] == '-' & set_eixos[1] == 'X') {
             tempo_motor.start();
-            while(tempo_motor.read_ms() <= 1000  & deslocamento_X > 0 & pulsos_X >= 0) {
+            while(tempo_motor.read_ms() <= tempo_acionamento  & deslocamento_X > 0 & pulsos_X >= 0) {
                 for(i = 0; i < 4; i++) {
                     motor_x = 1 << i;
                     pulsos_X-=1;
@@ -475,7 +626,7 @@
 
         if(set_eixos[0] == '+' & set_eixos[1] == 'X') {
             tempo_motor.start();
-            while(tempo_motor.read_ms() <= 1000 & deslocamento_max_X > deslocamento_X & pulsos_X >= 0) {
+            while(tempo_motor.read_ms() <= tempo_acionamento & deslocamento_max_X > deslocamento_X & pulsos_X >= 0) {
                 for(i = 3; i > -1; i--) {
                     motor_x = 1 << i;
                     pulsos_X+=1;
@@ -494,7 +645,7 @@
 
         if (set_eixos[0] == '-' & set_eixos[1] == 'Z') {
             tempo_motor.start();
-            while(tempo_motor.read_ms() <= 1000 & deslocamento_Z > 0 & pulsos_Z >= 0) {
+            while(tempo_motor.read_ms() <= tempo_acionamento & deslocamento_Z > 0 & pulsos_Z >= 0) {
                 for(i = 0; i < 4; i++) {
                     motor_z = 1 << i;
                     pulsos_Z-=1;
@@ -510,7 +661,7 @@
 
         if(set_eixos[0] == '+' & set_eixos[1] == 'Z') {
             tempo_motor.start();
-            while(tempo_motor.read_ms() <= 1000 & deslocamento_max_Z > deslocamento_Z & pulsos_Z >= 0) {
+            while(tempo_motor.read_ms() <= tempo_acionamento & deslocamento_max_Z > deslocamento_Z & pulsos_Z >= 0) {
                 for(i = 3; i > -1; i--) {
                     motor_z = 1 << i;
                     pulsos_Z+=1;