Projeto Mecatrônico / Mbed 2 deprecated Acionamento_Pipeta

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 
00003 // Pinos para emitir pulsos para cada motor
00004 DigitalOut sinal(PC_10);
00005 
00006 float tempo = 1.5;
00007 
00008 // Valores de Teste
00009 int total_pega = 40; // 40 mL na posição de pega
00010 int quant_desejada = 30; // 30 mL na posição de solta 1
00011 //int npos_pega = [1,2,3,4];
00012 //int pos_pega_total = 4;
00013 float posZ_atual = 0;
00014 float posX_atual = 10;
00015 float posY_atual = 20;
00016 float posX0_desejada = 0;
00017 float posY0_desejada = 5;
00018 float posZ0_desejada = 10;
00019 float posX_desejada = 10;
00020 float posY_desejada = 20;
00021 float posZ_desejada = 90;
00022 
00023 int atual_pega = total_pega; // "total_pega" é a quantidade inserida pelo usuário na posição de pega
00024 //int quant_desejada; // "quant desejada" é a quantidade inserida pelo usuário na posição de solta
00025 int quant_depositada = 0;
00026 int n_pulsosX;
00027 int n_pulsosY;
00028 int n_pulsosZ;
00029 int posZ_origem = 0;
00030 int deslocamentoZ_partida = posZ_origem - posZ_atual; // deslocamento do eixo Z até a posição de partida (origem)
00031 int deslocamentoX0 = posX0_desejada - posX_atual; // deslocamento do eixo X até a posição de pega desejada
00032 int deslocamentoY0 = posY0_desejada - posY_atual; // deslocamento do eixo Y até a posição de pega desejada
00033 int deslocamentoZ0 = posZ0_desejada - posZ_atual; // deslocamento do eixo Z até a posição de pega desejada
00034 int deslocamentoX = posX_desejada - posX_atual; // deslocamento do eixo X até a posição de solta desejada
00035 int deslocamentoY = posY_desejada - posY_atual; // deslocamento do eixo Y até a posição de solta desejada
00036 int deslocamentoZ = posZ_desejada - posZ_atual; // deslocamento do eixo Z até a posição de solta desejada
00037 
00038 
00039 void Rotina_Pega(void);
00040 void Rotina_Solta(void);
00041 
00042 int main()
00043 {
00044     //while (npos_pega < pos_pega_total) // checa se existem mais posições de solta
00045     {
00046         if (valor_SELECT == 1) // o usuário não quer alterar nenhum parâmetro
00047         {
00048         
00049             //Chama a rotina de pega
00050             Rotina_Pega();
00051                     
00052             //Chama a rotina de solta
00053             Rotina_Solta();
00054             
00055             atual_pega = atual_pega - 1; // após a rotina de solta, a quantidade atual do substrato é reduzida por 1mL
00056             quant_depositada = quant_depositada + 1; //  +1mL na quantidade depositada
00057             
00058             if (atual_pega == 0) // não existe mais substrato na posição de pega
00059             {
00060                 lcd.locate(2,0);
00061                 lcd.printf("Coleta vazia");
00062             }
00063             else
00064             {
00065                 while (quant_depositada < quant_desejada) // "quant_desejada" definido pelo usuário na IHM
00066                 {
00067                     Rotina_Pega();
00068                     atual_pega = atual_pega - 1;
00069                 
00070                     if (atual_pega == 0)
00071                     {
00072                         lcd.locate(2,0);
00073                         lcd.printf("Coleta vazia");
00074                     }
00075                 
00076                     else
00077                     {
00078                         Rotina_Solta();
00079                         quant_depositada = quant_depositada + 1;
00080                     }   
00081                 
00082                 }
00083             }
00084         }
00085 }
00086 
00087 void Rotina_Pega()
00088 {
00089     sinal = 0; // saída nível lógico "baixo"
00090     
00091     n_pulsosZ = (1/(passo_motor*passo_fuso))*360*deslocamentoZ_partida; // desloca a pipeta no eixo Z para sua posição de partida para evitar colisão
00092     
00093     n_pulsosX = (1/(passo_motor*passo_fuso))*360*deslocamento_X0; //movimentação do eixo X para posição de pega
00094     n_pulsosY = (1/(passo_motor*passo_fuso))*360*deslocamento_Y0; //movimentação do eixo Y para posição de pega
00095     n_pulsosZ = (1/(passo_motor*passo_fuso))*360*deslocamento_Z0; //movimentação do eixo Z para posição de pega
00096     
00097     sinal = 1; // saída nível lógico "alto"
00098     lcd.locate(2,0);
00099     lcd.printf("Coletando");
00100     wait(tempo);
00101             
00102 }
00103 
00104 void Rotina_Solta()
00105 {
00106    sinal = 0; // saída nível lógico "baixo"
00107     
00108     n_pulsosZ = (1/(passo_motor*passo_fuso))*360*deslocamentoZ_partida; // desloca a pipeta no eixo Z para sua posição de partida para evitar colisão
00109     
00110     n_pulsosX = (1/(passo_motor*passo_fuso))*360*deslocamento_X; //movimentação do eixo X para posição de pega
00111     n_pulsosY = (1/(passo_motor*passo_fuso))*360*deslocamento_Y; //movimentação do eixo Y para posição de pega
00112     n_pulsosZ = (1/(passo_motor*passo_fuso))*360*deslocamento_Z; //movimentação do eixo Z para posição de pega
00113     
00114     sinal = 1; // saída nível lógico "alto"
00115     lcd.locate(2,0);
00116     lcd.printf("Depositando");
00117     wait(tempo); 
00118 }
00119