RET15-01

Dependencies:   BSP_DISCO_F429ZI LCD_DISCO_F429ZI TS_DISCO_F429ZI eprom mbed

Fork of DISCO-F429ZI_LCDTS_demo by ST

main.cpp

Committer:
Gabriel_2112
Date:
2018-09-21
Revision:
4:cddace170681
Parent:
0:91c6ab790bd7

File content as of revision 4:cddace170681:

#include "mbed.h"
#include "TS_DISCO_F429ZI.h"
#include "LCD_DISCO_F429ZI.h"
#include "eeprom.h"

#define PPV_BOB         1720 //  (40/15)*800
#define PPV_AMA         880 //  (
#define PPMM_AVA        7.8 //   800/103

LCD_DISCO_F429ZI lcd;
TS_DISCO_F429ZI ts;

void proc_motores(void);
void proc_ts(void);
void tela_principal(void);

DigitalOut led(PG_14);
DigitalOut pulso_cabo(PE_2);
DigitalOut pulso_ama(PE_3);
DigitalOut pulso_fit(PE_4);
DigitalOut dir_ama(PE_5);
DigitalOut lp_vermelha(PE_6);
DigitalOut vl_pesca(PB_4);
DigitalOut vl_corta(PB_7);
DigitalOut ena_cabo(PF_6);

DigitalIn bt_emerg(PC_3);
DigitalIn bt_pausa(PC_11);
DigitalIn bt_reset(PC_12);
DigitalIn bt_posic(PC_13);
DigitalIn alarm_cabo(PA_5);
DigitalIn sn_cabo(PA_9);
DigitalIn sn_ama(PA_10);
DigitalIn sn_porta(PG_3);

Ticker int_ts;   
TS_StateTypeDef TS_State;

volatile uint16_t x, y;
uint8_t PARADA_SERVO = 0;
uint8_t POSICIONADO = 0;
uint8_t CONDICAO = 0;
uint8_t COND_ANT = 0;

uint16_t VOLTAS_CABO = 10;
uint16_t VOLTAS_FIT = 2;
uint16_t COMP_FIT = 100;
uint16_t VELO_CABO = 8000;
uint16_t PRODUCAO = 0;
float DESLOC = 0;
char text[10];
uint16_t VirtAddVarTab[NB_OF_VAR] = {0x0011, 0x0022, 0x0033, 0x0044, 0x0055, 0x0066};

void proc_ts(void)
{
    ts.GetState(&TS_State);      
    if (TS_State.TouchDetected)
    {
        x = TS_State.X;
        y = TS_State.Y;
        
        //sprintf((char*)text, "  %d  ", y);
        //lcd.DisplayStringAt(0, 0, (uint8_t *)&text, CENTER_MODE);
    }
}

void RODA_SERVO(uint16_t VL_INICIAL, uint16_t VL_FINAL, uint32_t PASSOS, uint8_t MOTOR)
{
    PARADA_SERVO = 0;
    uint16_t VELOCIDADE = VL_INICIAL;
    uint32_t PULSOS = 0;

    POSICIONADO = 0;
  
    while (PARADA_SERVO < 1)
    {
        if (VELOCIDADE < VL_FINAL) { if (VELOCIDADE < 8000) { VELOCIDADE+= 2000; } else { VELOCIDADE+= 5; } }
        switch(MOTOR)
        {
            case 0:
                pulso_cabo=1;
                wait_us(30+(10000-VELOCIDADE));
                pulso_cabo=0;
                break;
            case 1:
                pulso_fit=1;
                wait_us(30+(10000-VELOCIDADE));
                pulso_fit=0;
                break;
            case 2:
                pulso_ama=1;
                wait_us(30+(10000-VELOCIDADE));
                pulso_ama=0;
                break;
            case 3:
                pulso_cabo=1;
                wait_us(30+(10000-VELOCIDADE));
                pulso_cabo=0;
                break;
            case 4:
                pulso_ama=1;
                wait_us(30+(10000-VELOCIDADE));
                pulso_ama=0;
                break;
        }
        wait_us(40);
    
        PULSOS++;
    
        if (PULSOS>PASSOS) { PARADA_SERVO = 1; }
        if (!bt_emerg) { PARADA_SERVO = 2; }
        if (bt_pausa) { PARADA_SERVO = 3; }
        if (!sn_porta) { PARADA_SERVO = 4; }

        if (MOTOR == 0) // BOBINA
        {
            if ( PULSOS > PASSOS-200) { if (sn_cabo) { PARADA_SERVO = 5; POSICIONADO = 1; } }
        }

        if (MOTOR == 1) // AVANÇO FITILHO
        {
            //
        }

        if (MOTOR == 2) // AMARRA FITILHO
        {  
            if ( PULSOS > PASSOS-200) { if (sn_ama) { PARADA_SERVO = 5; POSICIONADO = 1; } }
        }

        if (MOTOR == 3) // REPOSICIONAR BOBINA
        {   
            if (sn_cabo) { PARADA_SERVO = 5; } 
        }

        if (MOTOR == 4) // REPOSICIONAR AMARRA
        {
            if (sn_ama) { PARADA_SERVO = 5; } 
        }
    
    }

  while (bt_pausa || bt_posic) {} 
}

void tela_principal(void)
{
    //TITULO
    BSP_LCD_SetFont(&Font24);
    lcd.Clear(LCD_COLOR_BLUE);
    lcd.SetTextColor(LCD_COLOR_WHITE);
    lcd.DrawRect(10, 4, 220, 30);
    lcd.SetBackColor(LCD_COLOR_BLUE);
    lcd.SetTextColor(LCD_COLOR_WHITE);
    lcd.DisplayStringAt(0, 9, (uint8_t *)"RTE15-01", CENTER_MODE);
    
    //LABEL PRODUÇÃO
    BSP_LCD_SetFont(&Font20);
    lcd.SetTextColor(LCD_COLOR_WHITE);
    lcd.DisplayStringAt(0, 60, (uint8_t *)"PRODUCAO", CENTER_MODE);
    BSP_LCD_SetFont(&Font24);
    
    //QUANTIDADE PRODUZIDA
    lcd.SetTextColor(LCD_COLOR_WHITE);
    lcd.FillRect(10, 80, 220, 50);
    lcd.SetTextColor(LCD_COLOR_DARKGRAY);
    lcd.DrawRect(10, 80, 220, 50);
    lcd.SetBackColor(LCD_COLOR_WHITE);
    lcd.SetTextColor(LCD_COLOR_BLUE);
    lcd.DisplayStringAt(0, 95, (uint8_t *)"  0  ", CENTER_MODE);
    
    //BOTÃO ZERAR
    lcd.SetTextColor(LCD_COLOR_LIGHTGRAY);
    lcd.FillRect(10, 140, 220, 40);
    lcd.SetTextColor(LCD_COLOR_DARKGRAY);
    lcd.DrawRect(10, 140, 220, 40);
    lcd.SetBackColor(LCD_COLOR_LIGHTGRAY);
    lcd.SetTextColor(LCD_COLOR_DARKGRAY);
    lcd.DisplayStringAt(0, 150, (uint8_t *)"ZERAR", CENTER_MODE);
    
    //STATUS
    lcd.SetTextColor(LCD_COLOR_WHITE);
    lcd.FillRect(10, 210, 220, 50);
    lcd.SetTextColor(LCD_COLOR_DARKGRAY);
    lcd.DrawRect(10, 210, 220, 50);
    lcd.SetBackColor(LCD_COLOR_WHITE);
    lcd.SetTextColor(LCD_COLOR_BLUE);
    lcd.DisplayStringAt(0, 225, (uint8_t *)"   PRONTO   ", CENTER_MODE);
    
    //BOTÃO CONFIG
    lcd.SetTextColor(LCD_COLOR_LIGHTGRAY);
    lcd.FillRect(10, 270, 220, 40);
    lcd.SetTextColor(LCD_COLOR_DARKGRAY);
    lcd.DrawRect(10, 270, 220, 40);
    lcd.SetBackColor(LCD_COLOR_LIGHTGRAY);
    lcd.SetTextColor(LCD_COLOR_DARKGRAY);
    lcd.DisplayStringAt(0, 280, (uint8_t *)"CONFIG.", CENTER_MODE);
 
}

void tela_config(void)
{
    uint8_t sair=0;
    uint16_t _y1 = 38;
    uint16_t _dy = 56;
    
    //TÍTULO
    lcd.Clear(LCD_COLOR_GREEN);
    lcd.SetTextColor(LCD_COLOR_BLACK);
    lcd.DrawRect(10, 4, 220, 30);
    lcd.SetBackColor(LCD_COLOR_GREEN);
    lcd.SetTextColor(LCD_COLOR_BLACK);
    lcd.DisplayStringAt(0, 9, (uint8_t *)"CONFIG.", CENTER_MODE);
    
    //LABEL VOLTAS CABO
    BSP_LCD_SetFont(&Font20);
    lcd.SetTextColor(LCD_COLOR_BLACK);
    lcd.DisplayStringAt(0, _y1+(_dy*0), (uint8_t *)"VOLTAS CABO", CENTER_MODE);
    BSP_LCD_SetFont(&Font24);
    
    //VOLTAS CABO
    lcd.SetTextColor(LCD_COLOR_WHITE);
    lcd.FillRect(40, _y1+(_dy*0)+20, 160, 34);
    lcd.SetTextColor(LCD_COLOR_DARKGRAY);
    lcd.DrawRect(40, _y1+(_dy*0)+20, 160, 34);
    lcd.SetBackColor(LCD_COLOR_WHITE);
    lcd.SetTextColor(LCD_COLOR_BLACK);
    sprintf((char*)text, "  %d  ", VOLTAS_CABO);
    lcd.DisplayStringAt(0, _y1+(_dy*0)+28, (uint8_t *)&text, CENTER_MODE);
    lcd.FillTriangle(210, 220, 230, _y1+(_dy*0)+34, _y1+(_dy*0)+14, _y1+(_dy*0)+34);
    lcd.FillTriangle(210, 220, 230, _y1+(_dy*0)+40, _y1+(_dy*0)+60, _y1+(_dy*0)+40);
    
    //LABEL VOLTAS FITILHO
    BSP_LCD_SetFont(&Font20);
    lcd.SetTextColor(LCD_COLOR_BLACK);
    lcd.SetBackColor(LCD_COLOR_GREEN);
    lcd.DisplayStringAt(0, _y1+(_dy*1), (uint8_t *)"VOLTAS FIT.", CENTER_MODE);
    BSP_LCD_SetFont(&Font24);
    
    //VOLTAS FITILHO
    lcd.SetTextColor(LCD_COLOR_WHITE);
    lcd.FillRect(40, _y1+(_dy*1)+20, 160, 34);
    lcd.SetTextColor(LCD_COLOR_DARKGRAY);
    lcd.DrawRect(40, _y1+(_dy*1)+20, 160, 34);
    lcd.SetBackColor(LCD_COLOR_WHITE);
    lcd.SetTextColor(LCD_COLOR_BLACK);
    sprintf((char*)text, "  %d  ", VOLTAS_FIT);
    lcd.DisplayStringAt(0, _y1+(_dy*1)+28, (uint8_t *)&text, CENTER_MODE);
    lcd.FillTriangle(210, 220, 230, _y1+(_dy*1)+34, _y1+(_dy*1)+14, _y1+(_dy*1)+34);
    lcd.FillTriangle(210, 220, 230, _y1+(_dy*1)+40, _y1+(_dy*1)+60, _y1+(_dy*1)+40);
    
    //LABEL COMP FITILHO
    BSP_LCD_SetFont(&Font20);
    lcd.SetTextColor(LCD_COLOR_BLACK);
    lcd.SetBackColor(LCD_COLOR_GREEN);
    lcd.DisplayStringAt(0, _y1+(_dy*2), (uint8_t *)"COMP FIT.", CENTER_MODE);
    BSP_LCD_SetFont(&Font24);
    
    //COMP FITILHO
    lcd.SetTextColor(LCD_COLOR_WHITE);
    lcd.FillRect(40, _y1+(_dy*2)+20, 160, 34);
    lcd.SetTextColor(LCD_COLOR_DARKGRAY);
    lcd.DrawRect(40, _y1+(_dy*2)+20, 160, 34);
    lcd.SetBackColor(LCD_COLOR_WHITE);
    lcd.SetTextColor(LCD_COLOR_BLACK);
    sprintf((char*)text, "  %d  ", COMP_FIT);
    lcd.DisplayStringAt(0, _y1+(_dy*2)+28, (uint8_t *)&text, CENTER_MODE);
    lcd.FillTriangle(210, 220, 230, _y1+(_dy*2)+34, _y1+(_dy*2)+14, _y1+(_dy*2)+34);
    lcd.FillTriangle(210, 220, 230, _y1+(_dy*2)+40, _y1+(_dy*2)+60, _y1+(_dy*2)+40);
    
    //LABEL VELOCIDADE CABO
    BSP_LCD_SetFont(&Font20);
    lcd.SetTextColor(LCD_COLOR_BLACK);
    lcd.SetBackColor(LCD_COLOR_GREEN);
    lcd.DisplayStringAt(0, _y1+(_dy*3), (uint8_t *)"VELOC. CABO", CENTER_MODE);
    BSP_LCD_SetFont(&Font24);
    
    //COMP FITILHO
    lcd.SetTextColor(LCD_COLOR_WHITE);
    lcd.FillRect(40, _y1+(_dy*3)+20, 160, 34);
    lcd.SetTextColor(LCD_COLOR_DARKGRAY);
    lcd.DrawRect(40, _y1+(_dy*3)+20, 160, 34);
    lcd.SetBackColor(LCD_COLOR_WHITE);
    lcd.SetTextColor(LCD_COLOR_BLACK);
    sprintf((char*)text, "  %d  ", VELO_CABO);
    lcd.DisplayStringAt(0, _y1+(_dy*3)+28, (uint8_t *)&text, CENTER_MODE);
    lcd.FillTriangle(210, 220, 230, _y1+(_dy*3)+34, _y1+(_dy*3)+14, _y1+(_dy*3)+34);
    lcd.FillTriangle(210, 220, 230, _y1+(_dy*3)+40, _y1+(_dy*3)+60, _y1+(_dy*3)+40);
    
    
    //BOTÃO SAIR
    lcd.SetTextColor(LCD_COLOR_LIGHTGRAY);
    lcd.FillRect(10, 270, 220, 40);
    lcd.SetTextColor(LCD_COLOR_DARKGRAY);
    lcd.DrawRect(10, 270, 220, 40);
    lcd.SetBackColor(LCD_COLOR_LIGHTGRAY);
    lcd.SetTextColor(LCD_COLOR_DARKGRAY);
    lcd.DisplayStringAt(0, 280, (uint8_t *)"SAIR", CENTER_MODE);
    
    while(sair<1)
    {
        
        if(y>(_y1+(_dy*0)+14) && y<(_y1+(_dy*0)+34) && x>200) // + VOLTAS CABO
        {
            y=0; x=0;
            if (VOLTAS_CABO<60) 
            { 
                VOLTAS_CABO+=5;
                lcd.SetBackColor(LCD_COLOR_WHITE);
                lcd.SetTextColor(LCD_COLOR_BLACK);
                sprintf((char*)text, "  %d  ", VOLTAS_CABO);
                lcd.DisplayStringAt(0, _y1+(_dy*0)+28, (uint8_t *)&text, CENTER_MODE);
            }
            wait(0.3);
        }
        
        if(y>(_y1+(_dy*0)+40) && y<(_y1+(_dy*0)+60) && x>200) // - VOLTAS CABO
        {
            y=0; x=0;
            if (VOLTAS_CABO>10)
            {
                VOLTAS_CABO-=5;
                lcd.SetBackColor(LCD_COLOR_WHITE);
                lcd.SetTextColor(LCD_COLOR_BLACK);
                sprintf((char*)text, "  %d  ", VOLTAS_CABO);
                lcd.DisplayStringAt(0, _y1+(_dy*0)+28, (uint8_t *)&text, CENTER_MODE);
            }
            wait(0.3);
        }
        
        if(y>(_y1+(_dy*1)+14) && y<(_y1+(_dy*1)+34) && x>200) // + VOLTAS FITILHO
        {
            y=0; x=0;
            if (VOLTAS_FIT<8)
            {
                VOLTAS_FIT+=1;
                lcd.SetBackColor(LCD_COLOR_WHITE);
                lcd.SetTextColor(LCD_COLOR_BLACK);
                sprintf((char*)text, "  %d  ", VOLTAS_FIT);
                lcd.DisplayStringAt(0, _y1+(_dy*1)+28, (uint8_t *)&text, CENTER_MODE);
            }
            wait(0.3);
        }
        
        if(y>(_y1+(_dy*1)+40) && y<(_y1+(_dy*1)+60) && x>200) // - VOLTAS FITILHO
        {
            y=0; x=0;
            if (VOLTAS_FIT>2)
            {
                VOLTAS_FIT-=1;
                lcd.SetBackColor(LCD_COLOR_WHITE);
                lcd.SetTextColor(LCD_COLOR_BLACK);
                sprintf((char*)text, "  %d  ", VOLTAS_FIT);
                lcd.DisplayStringAt(0, _y1+(_dy*1)+28, (uint8_t *)&text, CENTER_MODE);
            }
            wait(0.3);
        }
        
        if(y>(_y1+(_dy*2)+14) && y<(_y1+(_dy*2)+34) && x>200) // + COMPRIMENTO FITILHO
        {
            y=0; x=0;
            if (COMP_FIT<250)
            {
                COMP_FIT+=1;
                lcd.SetBackColor(LCD_COLOR_WHITE);
                lcd.SetTextColor(LCD_COLOR_BLACK);
                sprintf((char*)text, "  %d  ", COMP_FIT);
                lcd.DisplayStringAt(0, _y1+(_dy*2)+28, (uint8_t *)&text, CENTER_MODE);
            }
            wait(0.1);
        }
        
        if(y>(_y1+(_dy*2)+40) && y<(_y1+(_dy*2)+60) && x>200) // - COMPRIMENTO FITILHO
        {
            y=0; x=0;
            if (COMP_FIT>100)
            {
                COMP_FIT-=1;
                lcd.SetBackColor(LCD_COLOR_WHITE);
                lcd.SetTextColor(LCD_COLOR_BLACK);
                sprintf((char*)text, "  %d  ", COMP_FIT);
                lcd.DisplayStringAt(0, _y1+(_dy*2)+28, (uint8_t *)&text, CENTER_MODE);
            }
            wait(0.1);
        }
        
        if(y>(_y1+(_dy*3)+14) && y<(_y1+(_dy*3)+34) && x>200) // + VELOCIDADE CABO
        {
            y=0; x=0;
            if (VELO_CABO<9900)
            {
                VELO_CABO+=100;
                lcd.SetBackColor(LCD_COLOR_WHITE);
                lcd.SetTextColor(LCD_COLOR_BLACK);
                sprintf((char*)text, "  %d  ", VELO_CABO);
                lcd.DisplayStringAt(0, _y1+(_dy*3)+28, (uint8_t *)&text, CENTER_MODE);
            }
            wait(0.1);
        }
        
        if(y>(_y1+(_dy*3)+40) && y<(_y1+(_dy*3)+60) && x>200) // - VELOCIDADE CABO
        {
            y=0; x=0;
            if (VELO_CABO>4000)
            {
                VELO_CABO-=100;
                lcd.SetBackColor(LCD_COLOR_WHITE);
                lcd.SetTextColor(LCD_COLOR_BLACK);
                sprintf((char*)text, "  %d  ", VELO_CABO);
                lcd.DisplayStringAt(0, _y1+(_dy*3)+28, (uint8_t *)&text, CENTER_MODE);
            }
            wait(0.1);
        }
        
        if(y>270) // sair
        {
            y=0; x=0;
            EE_WriteVariable(VirtAddVarTab[0], VOLTAS_CABO);
            EE_WriteVariable(VirtAddVarTab[1], VOLTAS_FIT);
            EE_WriteVariable(VirtAddVarTab[2], COMP_FIT);
            EE_WriteVariable(VirtAddVarTab[3], VELO_CABO);
            sair=1;
        }
    }
}

void status(void)
{
    COND_ANT = CONDICAO;
  
    lcd.SetBackColor(LCD_COLOR_WHITE);
    lcd.SetTextColor(LCD_COLOR_BLUE);
  
    if (!sn_porta) { CONDICAO = 7; }
    if (!bt_emerg) { CONDICAO = 8; }
    
    //CONDICAO = 0;
    
    switch (CONDICAO)
    {
        case 0:
            lcd.DisplayStringAt(0, 225, (uint8_t *)" POSICIONAR ", CENTER_MODE);
            lp_vermelha = 0;
            break;
        case 1:
            lcd.DisplayStringAt(0, 225, (uint8_t *)"   PRONTO   ", CENTER_MODE);
            lp_vermelha = 0;
            break;
        case 6:
            lcd.DisplayStringAt(0, 225, (uint8_t *)"    FIM     ", CENTER_MODE);
            lp_vermelha = 0;
            break;
        case 7:
            lcd.DisplayStringAt(0, 225, (uint8_t *)"PORTA ABERTA", CENTER_MODE);
            break;
        case 8:
            lcd.DisplayStringAt(0, 225, (uint8_t *)" EMERGENCIA ", CENTER_MODE);
          break;          
        default:
            lcd.DisplayStringAt(0, 225, (uint8_t *)"EM TRABALHO ", CENTER_MODE);
            lp_vermelha = 1;
          break;
    }

    while (CONDICAO == 8)
    {
        lp_vermelha = 1;
        wait(0.4);
        lp_vermelha = 0;
        wait(0.4);
        if (!bt_emerg) { CONDICAO = 8; } else { CONDICAO = 0; }   
    }

    CONDICAO = COND_ANT;

    if(y>140 && y<180) // ZERAR PRODUÇÃO
    { 
        x=0; y=0;
        PRODUCAO = 0;
        EE_WriteVariable(VirtAddVarTab[4], 0);
    }
    sprintf((char*)text, "  %d  ", PRODUCAO);
    lcd.DisplayStringAt(0, 95, (uint8_t *)&text, CENTER_MODE);
    
    if (y>270) // CONFIGURAÇÕES
    {
        x=0; y=0;
        tela_config();
        tela_principal();
        wait(1);
    } 
}

 
int main()
{
    int_ts.attach(&proc_ts, 0.05);
    ts.Init(lcd.GetXSize(), lcd.GetYSize());
    
    HAL_FLASH_Unlock();
    EE_Init();
    EE_ReadVariable(VirtAddVarTab[0], &VOLTAS_CABO);
    EE_ReadVariable(VirtAddVarTab[1], &VOLTAS_FIT);
    EE_ReadVariable(VirtAddVarTab[2], &COMP_FIT);
    EE_ReadVariable(VirtAddVarTab[3], &VELO_CABO);
    EE_ReadVariable(VirtAddVarTab[4], &PRODUCAO);
    
    tela_principal();
    
    dir_ama=1;
                  
    while(true) 
    {
        status();
        while (POSICIONADO < 1)
        {
            CONDICAO = 0; status();
    
            if ( bt_posic && sn_porta && bt_emerg )
            {
                while (bt_posic) {}

                ena_cabo=1;
                RODA_SERVO(2000, 9000, PPV_BOB, 3); // REPOSICIONA BOBINA

                RODA_SERVO(2000, 9000, PPV_AMA, 4); // REPOSICIONA AMARRA

                if ( sn_cabo && sn_ama ) { POSICIONADO = 1; CONDICAO = 1; status(); }      
            }   
        }
        
        if (!sn_ama) { POSICIONADO = 0; }
  
        if ( bt_pausa && sn_porta && bt_emerg )
        {
            while (bt_pausa) {}
    
            CONDICAO = 2; status();
            ena_cabo=1;
            wait(0.1);

            DESLOC = ((float)PPV_BOB*((float)VOLTAS_CABO/10))+200;
            RODA_SERVO(2000, VELO_CABO, (int)DESLOC, 0);                // Processa cabo
            if ( PARADA_SERVO == 5 )                                    // Se parada correta no cabo, continua ciclo
            {
                CONDICAO = 3; 
                vl_pesca=1;                                             // Aciona PESCA
                RODA_SERVO(4000, 9000, PPMM_AVA*COMP_FIT, 1);           // Processa avanço
                vl_pesca=0;                                             // Recua PESCA
                wait(0.2);
                if ( PARADA_SERVO == 1 )                                // Se parada correta do avanço, continua ciclo
                {
                    CONDICAO = 4; 
                    DESLOC = (float)PPV_AMA/2;
                    RODA_SERVO(5000, 9900, (int)DESLOC, 1);             // Processa pré amarra
                    if ( PARADA_SERVO == 1 )                            // Se parada correta da pre amarra, continua ciclo
                    {
                        CONDICAO = 5; 
                        vl_corta=1;                                                 // Aciona FACA
                        DESLOC = ((PPV_AMA*VOLTAS_FIT)-(float)PPV_AMA/2)+200;
                        RODA_SERVO(5000, 9900, (int)DESLOC, 2);                     // Processa restante da amarra
                        vl_corta=0;               
                        if ( PARADA_SERVO == 5 ) { CONDICAO = 6; PRODUCAO++; EE_WriteVariable(VirtAddVarTab[4], PRODUCAO); status(); }        // Se parada correta da amarra, indica FIM (Condição 6)
                        while (sn_porta){}                                          // Espera abrir a porta
                        CONDICAO = 1; status();
                    }
                }  
            }
            vl_corta=0;                                                 // Recua FACA
            vl_pesca=0;                                                 // Recua PESCA
        }
        
    }
}