RET15-01

Dependencies:   BSP_DISCO_F429ZI LCD_DISCO_F429ZI TS_DISCO_F429ZI eprom mbed

Fork of DISCO-F429ZI_LCDTS_demo by ST

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "TS_DISCO_F429ZI.h"
00003 #include "LCD_DISCO_F429ZI.h"
00004 #include "eeprom.h"
00005 
00006 #define PPV_BOB         1720 //  (40/15)*800
00007 #define PPV_AMA         880 //  (
00008 #define PPMM_AVA        7.8 //   800/103
00009 
00010 LCD_DISCO_F429ZI lcd;
00011 TS_DISCO_F429ZI ts;
00012 
00013 void proc_motores(void);
00014 void proc_ts(void);
00015 void tela_principal(void);
00016 
00017 DigitalOut led(PG_14);
00018 DigitalOut pulso_cabo(PE_2);
00019 DigitalOut pulso_ama(PE_3);
00020 DigitalOut pulso_fit(PE_4);
00021 DigitalOut dir_ama(PE_5);
00022 DigitalOut lp_vermelha(PE_6);
00023 DigitalOut vl_pesca(PB_4);
00024 DigitalOut vl_corta(PB_7);
00025 DigitalOut ena_cabo(PF_6);
00026 
00027 DigitalIn bt_emerg(PC_3);
00028 DigitalIn bt_pausa(PC_11);
00029 DigitalIn bt_reset(PC_12);
00030 DigitalIn bt_posic(PC_13);
00031 DigitalIn alarm_cabo(PA_5);
00032 DigitalIn sn_cabo(PA_9);
00033 DigitalIn sn_ama(PA_10);
00034 DigitalIn sn_porta(PG_3);
00035 
00036 Ticker int_ts;   
00037 TS_StateTypeDef TS_State;
00038 
00039 volatile uint16_t x, y;
00040 uint8_t PARADA_SERVO = 0;
00041 uint8_t POSICIONADO = 0;
00042 uint8_t CONDICAO = 0;
00043 uint8_t COND_ANT = 0;
00044 
00045 uint16_t VOLTAS_CABO = 10;
00046 uint16_t VOLTAS_FIT = 2;
00047 uint16_t COMP_FIT = 100;
00048 uint16_t VELO_CABO = 8000;
00049 uint16_t PRODUCAO = 0;
00050 float DESLOC = 0;
00051 char text[10];
00052 uint16_t VirtAddVarTab[NB_OF_VAR] = {0x0011, 0x0022, 0x0033, 0x0044, 0x0055, 0x0066};
00053 
00054 void proc_ts(void)
00055 {
00056     ts.GetState(&TS_State);      
00057     if (TS_State.TouchDetected)
00058     {
00059         x = TS_State.X;
00060         y = TS_State.Y;
00061         
00062         //sprintf((char*)text, "  %d  ", y);
00063         //lcd.DisplayStringAt(0, 0, (uint8_t *)&text, CENTER_MODE);
00064     }
00065 }
00066 
00067 void RODA_SERVO(uint16_t VL_INICIAL, uint16_t VL_FINAL, uint32_t PASSOS, uint8_t MOTOR)
00068 {
00069     PARADA_SERVO = 0;
00070     uint16_t VELOCIDADE = VL_INICIAL;
00071     uint32_t PULSOS = 0;
00072 
00073     POSICIONADO = 0;
00074   
00075     while (PARADA_SERVO < 1)
00076     {
00077         if (VELOCIDADE < VL_FINAL) { if (VELOCIDADE < 8000) { VELOCIDADE+= 2000; } else { VELOCIDADE+= 5; } }
00078         switch(MOTOR)
00079         {
00080             case 0:
00081                 pulso_cabo=1;
00082                 wait_us(30+(10000-VELOCIDADE));
00083                 pulso_cabo=0;
00084                 break;
00085             case 1:
00086                 pulso_fit=1;
00087                 wait_us(30+(10000-VELOCIDADE));
00088                 pulso_fit=0;
00089                 break;
00090             case 2:
00091                 pulso_ama=1;
00092                 wait_us(30+(10000-VELOCIDADE));
00093                 pulso_ama=0;
00094                 break;
00095             case 3:
00096                 pulso_cabo=1;
00097                 wait_us(30+(10000-VELOCIDADE));
00098                 pulso_cabo=0;
00099                 break;
00100             case 4:
00101                 pulso_ama=1;
00102                 wait_us(30+(10000-VELOCIDADE));
00103                 pulso_ama=0;
00104                 break;
00105         }
00106         wait_us(40);
00107     
00108         PULSOS++;
00109     
00110         if (PULSOS>PASSOS) { PARADA_SERVO = 1; }
00111         if (!bt_emerg) { PARADA_SERVO = 2; }
00112         if (bt_pausa) { PARADA_SERVO = 3; }
00113         if (!sn_porta) { PARADA_SERVO = 4; }
00114 
00115         if (MOTOR == 0) // BOBINA
00116         {
00117             if ( PULSOS > PASSOS-200) { if (sn_cabo) { PARADA_SERVO = 5; POSICIONADO = 1; } }
00118         }
00119 
00120         if (MOTOR == 1) // AVANÇO FITILHO
00121         {
00122             //
00123         }
00124 
00125         if (MOTOR == 2) // AMARRA FITILHO
00126         {  
00127             if ( PULSOS > PASSOS-200) { if (sn_ama) { PARADA_SERVO = 5; POSICIONADO = 1; } }
00128         }
00129 
00130         if (MOTOR == 3) // REPOSICIONAR BOBINA
00131         {   
00132             if (sn_cabo) { PARADA_SERVO = 5; } 
00133         }
00134 
00135         if (MOTOR == 4) // REPOSICIONAR AMARRA
00136         {
00137             if (sn_ama) { PARADA_SERVO = 5; } 
00138         }
00139     
00140     }
00141 
00142   while (bt_pausa || bt_posic) {} 
00143 }
00144 
00145 void tela_principal(void)
00146 {
00147     //TITULO
00148     BSP_LCD_SetFont(&Font24);
00149     lcd.Clear(LCD_COLOR_BLUE);
00150     lcd.SetTextColor(LCD_COLOR_WHITE);
00151     lcd.DrawRect(10, 4, 220, 30);
00152     lcd.SetBackColor(LCD_COLOR_BLUE);
00153     lcd.SetTextColor(LCD_COLOR_WHITE);
00154     lcd.DisplayStringAt(0, 9, (uint8_t *)"RTE15-01", CENTER_MODE);
00155     
00156     //LABEL PRODUÇÃO
00157     BSP_LCD_SetFont(&Font20);
00158     lcd.SetTextColor(LCD_COLOR_WHITE);
00159     lcd.DisplayStringAt(0, 60, (uint8_t *)"PRODUCAO", CENTER_MODE);
00160     BSP_LCD_SetFont(&Font24);
00161     
00162     //QUANTIDADE PRODUZIDA
00163     lcd.SetTextColor(LCD_COLOR_WHITE);
00164     lcd.FillRect(10, 80, 220, 50);
00165     lcd.SetTextColor(LCD_COLOR_DARKGRAY);
00166     lcd.DrawRect(10, 80, 220, 50);
00167     lcd.SetBackColor(LCD_COLOR_WHITE);
00168     lcd.SetTextColor(LCD_COLOR_BLUE);
00169     lcd.DisplayStringAt(0, 95, (uint8_t *)"  0  ", CENTER_MODE);
00170     
00171     //BOTÃO ZERAR
00172     lcd.SetTextColor(LCD_COLOR_LIGHTGRAY);
00173     lcd.FillRect(10, 140, 220, 40);
00174     lcd.SetTextColor(LCD_COLOR_DARKGRAY);
00175     lcd.DrawRect(10, 140, 220, 40);
00176     lcd.SetBackColor(LCD_COLOR_LIGHTGRAY);
00177     lcd.SetTextColor(LCD_COLOR_DARKGRAY);
00178     lcd.DisplayStringAt(0, 150, (uint8_t *)"ZERAR", CENTER_MODE);
00179     
00180     //STATUS
00181     lcd.SetTextColor(LCD_COLOR_WHITE);
00182     lcd.FillRect(10, 210, 220, 50);
00183     lcd.SetTextColor(LCD_COLOR_DARKGRAY);
00184     lcd.DrawRect(10, 210, 220, 50);
00185     lcd.SetBackColor(LCD_COLOR_WHITE);
00186     lcd.SetTextColor(LCD_COLOR_BLUE);
00187     lcd.DisplayStringAt(0, 225, (uint8_t *)"   PRONTO   ", CENTER_MODE);
00188     
00189     //BOTÃO CONFIG
00190     lcd.SetTextColor(LCD_COLOR_LIGHTGRAY);
00191     lcd.FillRect(10, 270, 220, 40);
00192     lcd.SetTextColor(LCD_COLOR_DARKGRAY);
00193     lcd.DrawRect(10, 270, 220, 40);
00194     lcd.SetBackColor(LCD_COLOR_LIGHTGRAY);
00195     lcd.SetTextColor(LCD_COLOR_DARKGRAY);
00196     lcd.DisplayStringAt(0, 280, (uint8_t *)"CONFIG.", CENTER_MODE);
00197  
00198 }
00199 
00200 void tela_config(void)
00201 {
00202     uint8_t sair=0;
00203     uint16_t _y1 = 38;
00204     uint16_t _dy = 56;
00205     
00206     //TÍTULO
00207     lcd.Clear(LCD_COLOR_GREEN);
00208     lcd.SetTextColor(LCD_COLOR_BLACK);
00209     lcd.DrawRect(10, 4, 220, 30);
00210     lcd.SetBackColor(LCD_COLOR_GREEN);
00211     lcd.SetTextColor(LCD_COLOR_BLACK);
00212     lcd.DisplayStringAt(0, 9, (uint8_t *)"CONFIG.", CENTER_MODE);
00213     
00214     //LABEL VOLTAS CABO
00215     BSP_LCD_SetFont(&Font20);
00216     lcd.SetTextColor(LCD_COLOR_BLACK);
00217     lcd.DisplayStringAt(0, _y1+(_dy*0), (uint8_t *)"VOLTAS CABO", CENTER_MODE);
00218     BSP_LCD_SetFont(&Font24);
00219     
00220     //VOLTAS CABO
00221     lcd.SetTextColor(LCD_COLOR_WHITE);
00222     lcd.FillRect(40, _y1+(_dy*0)+20, 160, 34);
00223     lcd.SetTextColor(LCD_COLOR_DARKGRAY);
00224     lcd.DrawRect(40, _y1+(_dy*0)+20, 160, 34);
00225     lcd.SetBackColor(LCD_COLOR_WHITE);
00226     lcd.SetTextColor(LCD_COLOR_BLACK);
00227     sprintf((char*)text, "  %d  ", VOLTAS_CABO);
00228     lcd.DisplayStringAt(0, _y1+(_dy*0)+28, (uint8_t *)&text, CENTER_MODE);
00229     lcd.FillTriangle(210, 220, 230, _y1+(_dy*0)+34, _y1+(_dy*0)+14, _y1+(_dy*0)+34);
00230     lcd.FillTriangle(210, 220, 230, _y1+(_dy*0)+40, _y1+(_dy*0)+60, _y1+(_dy*0)+40);
00231     
00232     //LABEL VOLTAS FITILHO
00233     BSP_LCD_SetFont(&Font20);
00234     lcd.SetTextColor(LCD_COLOR_BLACK);
00235     lcd.SetBackColor(LCD_COLOR_GREEN);
00236     lcd.DisplayStringAt(0, _y1+(_dy*1), (uint8_t *)"VOLTAS FIT.", CENTER_MODE);
00237     BSP_LCD_SetFont(&Font24);
00238     
00239     //VOLTAS FITILHO
00240     lcd.SetTextColor(LCD_COLOR_WHITE);
00241     lcd.FillRect(40, _y1+(_dy*1)+20, 160, 34);
00242     lcd.SetTextColor(LCD_COLOR_DARKGRAY);
00243     lcd.DrawRect(40, _y1+(_dy*1)+20, 160, 34);
00244     lcd.SetBackColor(LCD_COLOR_WHITE);
00245     lcd.SetTextColor(LCD_COLOR_BLACK);
00246     sprintf((char*)text, "  %d  ", VOLTAS_FIT);
00247     lcd.DisplayStringAt(0, _y1+(_dy*1)+28, (uint8_t *)&text, CENTER_MODE);
00248     lcd.FillTriangle(210, 220, 230, _y1+(_dy*1)+34, _y1+(_dy*1)+14, _y1+(_dy*1)+34);
00249     lcd.FillTriangle(210, 220, 230, _y1+(_dy*1)+40, _y1+(_dy*1)+60, _y1+(_dy*1)+40);
00250     
00251     //LABEL COMP FITILHO
00252     BSP_LCD_SetFont(&Font20);
00253     lcd.SetTextColor(LCD_COLOR_BLACK);
00254     lcd.SetBackColor(LCD_COLOR_GREEN);
00255     lcd.DisplayStringAt(0, _y1+(_dy*2), (uint8_t *)"COMP FIT.", CENTER_MODE);
00256     BSP_LCD_SetFont(&Font24);
00257     
00258     //COMP FITILHO
00259     lcd.SetTextColor(LCD_COLOR_WHITE);
00260     lcd.FillRect(40, _y1+(_dy*2)+20, 160, 34);
00261     lcd.SetTextColor(LCD_COLOR_DARKGRAY);
00262     lcd.DrawRect(40, _y1+(_dy*2)+20, 160, 34);
00263     lcd.SetBackColor(LCD_COLOR_WHITE);
00264     lcd.SetTextColor(LCD_COLOR_BLACK);
00265     sprintf((char*)text, "  %d  ", COMP_FIT);
00266     lcd.DisplayStringAt(0, _y1+(_dy*2)+28, (uint8_t *)&text, CENTER_MODE);
00267     lcd.FillTriangle(210, 220, 230, _y1+(_dy*2)+34, _y1+(_dy*2)+14, _y1+(_dy*2)+34);
00268     lcd.FillTriangle(210, 220, 230, _y1+(_dy*2)+40, _y1+(_dy*2)+60, _y1+(_dy*2)+40);
00269     
00270     //LABEL VELOCIDADE CABO
00271     BSP_LCD_SetFont(&Font20);
00272     lcd.SetTextColor(LCD_COLOR_BLACK);
00273     lcd.SetBackColor(LCD_COLOR_GREEN);
00274     lcd.DisplayStringAt(0, _y1+(_dy*3), (uint8_t *)"VELOC. CABO", CENTER_MODE);
00275     BSP_LCD_SetFont(&Font24);
00276     
00277     //COMP FITILHO
00278     lcd.SetTextColor(LCD_COLOR_WHITE);
00279     lcd.FillRect(40, _y1+(_dy*3)+20, 160, 34);
00280     lcd.SetTextColor(LCD_COLOR_DARKGRAY);
00281     lcd.DrawRect(40, _y1+(_dy*3)+20, 160, 34);
00282     lcd.SetBackColor(LCD_COLOR_WHITE);
00283     lcd.SetTextColor(LCD_COLOR_BLACK);
00284     sprintf((char*)text, "  %d  ", VELO_CABO);
00285     lcd.DisplayStringAt(0, _y1+(_dy*3)+28, (uint8_t *)&text, CENTER_MODE);
00286     lcd.FillTriangle(210, 220, 230, _y1+(_dy*3)+34, _y1+(_dy*3)+14, _y1+(_dy*3)+34);
00287     lcd.FillTriangle(210, 220, 230, _y1+(_dy*3)+40, _y1+(_dy*3)+60, _y1+(_dy*3)+40);
00288     
00289     
00290     //BOTÃO SAIR
00291     lcd.SetTextColor(LCD_COLOR_LIGHTGRAY);
00292     lcd.FillRect(10, 270, 220, 40);
00293     lcd.SetTextColor(LCD_COLOR_DARKGRAY);
00294     lcd.DrawRect(10, 270, 220, 40);
00295     lcd.SetBackColor(LCD_COLOR_LIGHTGRAY);
00296     lcd.SetTextColor(LCD_COLOR_DARKGRAY);
00297     lcd.DisplayStringAt(0, 280, (uint8_t *)"SAIR", CENTER_MODE);
00298     
00299     while(sair<1)
00300     {
00301         
00302         if(y>(_y1+(_dy*0)+14) && y<(_y1+(_dy*0)+34) && x>200) // + VOLTAS CABO
00303         {
00304             y=0; x=0;
00305             if (VOLTAS_CABO<60) 
00306             { 
00307                 VOLTAS_CABO+=5;
00308                 lcd.SetBackColor(LCD_COLOR_WHITE);
00309                 lcd.SetTextColor(LCD_COLOR_BLACK);
00310                 sprintf((char*)text, "  %d  ", VOLTAS_CABO);
00311                 lcd.DisplayStringAt(0, _y1+(_dy*0)+28, (uint8_t *)&text, CENTER_MODE);
00312             }
00313             wait(0.3);
00314         }
00315         
00316         if(y>(_y1+(_dy*0)+40) && y<(_y1+(_dy*0)+60) && x>200) // - VOLTAS CABO
00317         {
00318             y=0; x=0;
00319             if (VOLTAS_CABO>10)
00320             {
00321                 VOLTAS_CABO-=5;
00322                 lcd.SetBackColor(LCD_COLOR_WHITE);
00323                 lcd.SetTextColor(LCD_COLOR_BLACK);
00324                 sprintf((char*)text, "  %d  ", VOLTAS_CABO);
00325                 lcd.DisplayStringAt(0, _y1+(_dy*0)+28, (uint8_t *)&text, CENTER_MODE);
00326             }
00327             wait(0.3);
00328         }
00329         
00330         if(y>(_y1+(_dy*1)+14) && y<(_y1+(_dy*1)+34) && x>200) // + VOLTAS FITILHO
00331         {
00332             y=0; x=0;
00333             if (VOLTAS_FIT<8)
00334             {
00335                 VOLTAS_FIT+=1;
00336                 lcd.SetBackColor(LCD_COLOR_WHITE);
00337                 lcd.SetTextColor(LCD_COLOR_BLACK);
00338                 sprintf((char*)text, "  %d  ", VOLTAS_FIT);
00339                 lcd.DisplayStringAt(0, _y1+(_dy*1)+28, (uint8_t *)&text, CENTER_MODE);
00340             }
00341             wait(0.3);
00342         }
00343         
00344         if(y>(_y1+(_dy*1)+40) && y<(_y1+(_dy*1)+60) && x>200) // - VOLTAS FITILHO
00345         {
00346             y=0; x=0;
00347             if (VOLTAS_FIT>2)
00348             {
00349                 VOLTAS_FIT-=1;
00350                 lcd.SetBackColor(LCD_COLOR_WHITE);
00351                 lcd.SetTextColor(LCD_COLOR_BLACK);
00352                 sprintf((char*)text, "  %d  ", VOLTAS_FIT);
00353                 lcd.DisplayStringAt(0, _y1+(_dy*1)+28, (uint8_t *)&text, CENTER_MODE);
00354             }
00355             wait(0.3);
00356         }
00357         
00358         if(y>(_y1+(_dy*2)+14) && y<(_y1+(_dy*2)+34) && x>200) // + COMPRIMENTO FITILHO
00359         {
00360             y=0; x=0;
00361             if (COMP_FIT<250)
00362             {
00363                 COMP_FIT+=1;
00364                 lcd.SetBackColor(LCD_COLOR_WHITE);
00365                 lcd.SetTextColor(LCD_COLOR_BLACK);
00366                 sprintf((char*)text, "  %d  ", COMP_FIT);
00367                 lcd.DisplayStringAt(0, _y1+(_dy*2)+28, (uint8_t *)&text, CENTER_MODE);
00368             }
00369             wait(0.1);
00370         }
00371         
00372         if(y>(_y1+(_dy*2)+40) && y<(_y1+(_dy*2)+60) && x>200) // - COMPRIMENTO FITILHO
00373         {
00374             y=0; x=0;
00375             if (COMP_FIT>100)
00376             {
00377                 COMP_FIT-=1;
00378                 lcd.SetBackColor(LCD_COLOR_WHITE);
00379                 lcd.SetTextColor(LCD_COLOR_BLACK);
00380                 sprintf((char*)text, "  %d  ", COMP_FIT);
00381                 lcd.DisplayStringAt(0, _y1+(_dy*2)+28, (uint8_t *)&text, CENTER_MODE);
00382             }
00383             wait(0.1);
00384         }
00385         
00386         if(y>(_y1+(_dy*3)+14) && y<(_y1+(_dy*3)+34) && x>200) // + VELOCIDADE CABO
00387         {
00388             y=0; x=0;
00389             if (VELO_CABO<9900)
00390             {
00391                 VELO_CABO+=100;
00392                 lcd.SetBackColor(LCD_COLOR_WHITE);
00393                 lcd.SetTextColor(LCD_COLOR_BLACK);
00394                 sprintf((char*)text, "  %d  ", VELO_CABO);
00395                 lcd.DisplayStringAt(0, _y1+(_dy*3)+28, (uint8_t *)&text, CENTER_MODE);
00396             }
00397             wait(0.1);
00398         }
00399         
00400         if(y>(_y1+(_dy*3)+40) && y<(_y1+(_dy*3)+60) && x>200) // - VELOCIDADE CABO
00401         {
00402             y=0; x=0;
00403             if (VELO_CABO>4000)
00404             {
00405                 VELO_CABO-=100;
00406                 lcd.SetBackColor(LCD_COLOR_WHITE);
00407                 lcd.SetTextColor(LCD_COLOR_BLACK);
00408                 sprintf((char*)text, "  %d  ", VELO_CABO);
00409                 lcd.DisplayStringAt(0, _y1+(_dy*3)+28, (uint8_t *)&text, CENTER_MODE);
00410             }
00411             wait(0.1);
00412         }
00413         
00414         if(y>270) // sair
00415         {
00416             y=0; x=0;
00417             EE_WriteVariable(VirtAddVarTab[0], VOLTAS_CABO);
00418             EE_WriteVariable(VirtAddVarTab[1], VOLTAS_FIT);
00419             EE_WriteVariable(VirtAddVarTab[2], COMP_FIT);
00420             EE_WriteVariable(VirtAddVarTab[3], VELO_CABO);
00421             sair=1;
00422         }
00423     }
00424 }
00425 
00426 void status(void)
00427 {
00428     COND_ANT = CONDICAO;
00429   
00430     lcd.SetBackColor(LCD_COLOR_WHITE);
00431     lcd.SetTextColor(LCD_COLOR_BLUE);
00432   
00433     if (!sn_porta) { CONDICAO = 7; }
00434     if (!bt_emerg) { CONDICAO = 8; }
00435     
00436     //CONDICAO = 0;
00437     
00438     switch (CONDICAO)
00439     {
00440         case 0:
00441             lcd.DisplayStringAt(0, 225, (uint8_t *)" POSICIONAR ", CENTER_MODE);
00442             lp_vermelha = 0;
00443             break;
00444         case 1:
00445             lcd.DisplayStringAt(0, 225, (uint8_t *)"   PRONTO   ", CENTER_MODE);
00446             lp_vermelha = 0;
00447             break;
00448         case 6:
00449             lcd.DisplayStringAt(0, 225, (uint8_t *)"    FIM     ", CENTER_MODE);
00450             lp_vermelha = 0;
00451             break;
00452         case 7:
00453             lcd.DisplayStringAt(0, 225, (uint8_t *)"PORTA ABERTA", CENTER_MODE);
00454             break;
00455         case 8:
00456             lcd.DisplayStringAt(0, 225, (uint8_t *)" EMERGENCIA ", CENTER_MODE);
00457           break;          
00458         default:
00459             lcd.DisplayStringAt(0, 225, (uint8_t *)"EM TRABALHO ", CENTER_MODE);
00460             lp_vermelha = 1;
00461           break;
00462     }
00463 
00464     while (CONDICAO == 8)
00465     {
00466         lp_vermelha = 1;
00467         wait(0.4);
00468         lp_vermelha = 0;
00469         wait(0.4);
00470         if (!bt_emerg) { CONDICAO = 8; } else { CONDICAO = 0; }   
00471     }
00472 
00473     CONDICAO = COND_ANT;
00474 
00475     if(y>140 && y<180) // ZERAR PRODUÇÃO
00476     { 
00477         x=0; y=0;
00478         PRODUCAO = 0;
00479         EE_WriteVariable(VirtAddVarTab[4], 0);
00480     }
00481     sprintf((char*)text, "  %d  ", PRODUCAO);
00482     lcd.DisplayStringAt(0, 95, (uint8_t *)&text, CENTER_MODE);
00483     
00484     if (y>270) // CONFIGURAÇÕES
00485     {
00486         x=0; y=0;
00487         tela_config();
00488         tela_principal();
00489         wait(1);
00490     } 
00491 }
00492 
00493  
00494 int main()
00495 {
00496     int_ts.attach(&proc_ts, 0.05);
00497     ts.Init(lcd.GetXSize(), lcd.GetYSize());
00498     
00499     HAL_FLASH_Unlock();
00500     EE_Init();
00501     EE_ReadVariable(VirtAddVarTab[0], &VOLTAS_CABO);
00502     EE_ReadVariable(VirtAddVarTab[1], &VOLTAS_FIT);
00503     EE_ReadVariable(VirtAddVarTab[2], &COMP_FIT);
00504     EE_ReadVariable(VirtAddVarTab[3], &VELO_CABO);
00505     EE_ReadVariable(VirtAddVarTab[4], &PRODUCAO);
00506     
00507     tela_principal();
00508     
00509     dir_ama=1;
00510                   
00511     while(true) 
00512     {
00513         status();
00514         while (POSICIONADO < 1)
00515         {
00516             CONDICAO = 0; status();
00517     
00518             if ( bt_posic && sn_porta && bt_emerg )
00519             {
00520                 while (bt_posic) {}
00521 
00522                 ena_cabo=1;
00523                 RODA_SERVO(2000, 9000, PPV_BOB, 3); // REPOSICIONA BOBINA
00524 
00525                 RODA_SERVO(2000, 9000, PPV_AMA, 4); // REPOSICIONA AMARRA
00526 
00527                 if ( sn_cabo && sn_ama ) { POSICIONADO = 1; CONDICAO = 1; status(); }      
00528             }   
00529         }
00530         
00531         if (!sn_ama) { POSICIONADO = 0; }
00532   
00533         if ( bt_pausa && sn_porta && bt_emerg )
00534         {
00535             while (bt_pausa) {}
00536     
00537             CONDICAO = 2; status();
00538             ena_cabo=1;
00539             wait(0.1);
00540 
00541             DESLOC = ((float)PPV_BOB*((float)VOLTAS_CABO/10))+200;
00542             RODA_SERVO(2000, VELO_CABO, (int)DESLOC, 0);                // Processa cabo
00543             if ( PARADA_SERVO == 5 )                                    // Se parada correta no cabo, continua ciclo
00544             {
00545                 CONDICAO = 3; 
00546                 vl_pesca=1;                                             // Aciona PESCA
00547                 RODA_SERVO(4000, 9000, PPMM_AVA*COMP_FIT, 1);           // Processa avanço
00548                 vl_pesca=0;                                             // Recua PESCA
00549                 wait(0.2);
00550                 if ( PARADA_SERVO == 1 )                                // Se parada correta do avanço, continua ciclo
00551                 {
00552                     CONDICAO = 4; 
00553                     DESLOC = (float)PPV_AMA/2;
00554                     RODA_SERVO(5000, 9900, (int)DESLOC, 1);             // Processa pré amarra
00555                     if ( PARADA_SERVO == 1 )                            // Se parada correta da pre amarra, continua ciclo
00556                     {
00557                         CONDICAO = 5; 
00558                         vl_corta=1;                                                 // Aciona FACA
00559                         DESLOC = ((PPV_AMA*VOLTAS_FIT)-(float)PPV_AMA/2)+200;
00560                         RODA_SERVO(5000, 9900, (int)DESLOC, 2);                     // Processa restante da amarra
00561                         vl_corta=0;               
00562                         if ( PARADA_SERVO == 5 ) { CONDICAO = 6; PRODUCAO++; EE_WriteVariable(VirtAddVarTab[4], PRODUCAO); status(); }        // Se parada correta da amarra, indica FIM (Condição 6)
00563                         while (sn_porta){}                                          // Espera abrir a porta
00564                         CONDICAO = 1; status();
00565                     }
00566                 }  
00567             }
00568             vl_corta=0;                                                 // Recua FACA
00569             vl_pesca=0;                                                 // Recua PESCA
00570         }
00571         
00572     }
00573 }