Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
Revision 1:794015d244d3, committed 2021-06-07
- 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;