uint8_t opcoes(void){ uint8_t ascii_code=0; // Variável para receber valor ascii ascii_code=GetKey(); // GetKey retorna valor ascii apenas 1 vez quando tem algum novo static uint16_t cor=4; uint16_t cor_Table [] = { LCD_COLOR_WHITE, LCD_COLOR_BLACK, LCD_COLOR_GREY, LCD_COLOR_BLUE, LCD_COLOR_BLUE2, LCD_COLOR_RED, LCD_COLOR_MAGENTA, LCD_COLOR_GREEN, LCD_COLOR_CYAN, LCD_COLOR_YELLOW }; if (ascii_code==6 || ascii_code==8){ cor+=1; aktColor=cor_Table[cor]; UB_Font_DrawString(10,10,"Cor do texto",&Arial_11x20,aktColor,RGB_COL_WHITE); } if (ascii_code==7 || ascii_code==5){ cor-=1; aktColor=cor_Table[cor]; UB_Font_DrawString(10,10,"Cor do texto",&Arial_11x20,aktColor,RGB_COL_WHITE); } if (ascii_code==4 || ascii_code==1) return(0); else return(2); }
int main(){ SystemInit(); UB_LCD_Init(); UB_LCD_LayerInit_Fullscreen(); UB_LCD_SetLayer_1(); UB_LCD_FillLayer(RGB_COL_WHITE); UB_LCD_SetLayer_2(); UB_LCD_FillLayer(RGB_COL_BLACK); UB_LCD_Rotate_0(); UB_Font_DrawString(5,10,"STM32F429-BH1750 TEST",&Arial_11x18,RGB_COL_BLUE,RGB_COL_BLACK); UB_I2C3_Init(); Delay(5000000); while(1){ int lux; char buf[20]; lux = BH1750_Read(ONE_TIME_H_1LX); if(lux < 0){ return 0; } else{ sprintf(buf,"Lux = %d ",lux); UB_Font_DrawString(10,40,buf,&Arial_11x18,RGB_COL_BLUE,RGB_COL_BLACK); } Delay(5000000); } }
//-------------------------------------------------------------- // init vom Oszi //-------------------------------------------------------------- void oszi_init(void) { uint32_t check; //--------------------------------------------- // Hardware init //--------------------------------------------- check=p_oszi_hw_init(); p_oszi_send_uart("OSZI 4 STM32F429 [UB]"); if(check==1) { // Touch init error UB_LCD_FillLayer(BACKGROUND_COL); UB_Font_DrawString(10,10,"Touch ERR",&Arial_7x10,FONT_COL,BACKGROUND_COL); while(1); } else if(check==2) { // Fehler in den Defines UB_LCD_FillLayer(BACKGROUND_COL); UB_Font_DrawString(10,10,"Wrong ADC Array-LEN",&Arial_7x10,FONT_COL,BACKGROUND_COL); while(1); } //--------------------------------------------- // FFT init //--------------------------------------------- fft_init(); //--------------------------------------------- // Software init //--------------------------------------------- p_oszi_sw_init(); ADC_change_Frq(Menu.timebase.value); }
//-------------------------------------------------------------- // zeichnet einen TOP-Menupunkt //-------------------------------------------------------------- void p_gui_draw_TOP(uint32_t mm_nr, const SM_Item_t um[], uint32_t um_nr) { sprintf(buf,"%s%s",MM_ITEM[mm_nr].txt,um[um_nr].stxt); if(GUI.akt_menu==mm_nr) { UB_Font_DrawString(LINE(1),MM_ITEM[mm_nr].yp,buf,&Arial_7x10,MENU_VG_COL,MENU_AK_COL); } else { UB_Font_DrawString(LINE(1),MM_ITEM[mm_nr].yp,buf,&Arial_7x10,MENU_VG_COL,MENU_BG_COL); } }
int8_t BH1750_Command(uint8_t cmd) { /* Check if NULL */ assert_param(cmd); cmdstatus = UB_I2C3_WriteByte(0x23<<1,0x00,cmd,1); /* Print Initialization Error ID */ #ifdef DEBUG if(cmdstatus < 0) { sprintf(bufbh,"Command 0x%04x", cmd); UB_Font_DrawString(10,40,bufbh,&Arial_11x18,RGB_COL_RED,RGB_COL_BLACK); sprintf(bufbh,"Returned %d", cmdstatus); UB_Font_DrawString(10,60,bufbh,&Arial_11x18,RGB_COL_RED,RGB_COL_BLACK); return cmdstatus; } #endif return cmdstatus; }
//-------------------------------------------------------------- // zeichnet Untermenu : "CURSOR" //-------------------------------------------------------------- void p_menu_draw_BOT_CUR(void) { uint16_t delta; p_menu_draw_BOT(MM_CUR_MODE,UM_09,Menu.cursor.mode,0); if((Menu.cursor.mode==1) || (Menu.cursor.mode==2)) { // Cursor = CH1/CH2 p_menu_draw_BOT(MM_CUR_P1,UM_07,0,3); p_menu_draw_BOT(MM_CUR_P2,UM_07,0,4); if(Menu.cursor.p1>=Menu.cursor.p2) { delta=Menu.cursor.p1-Menu.cursor.p2; } else { delta=Menu.cursor.p2-Menu.cursor.p1; } P_FloatToDezStr(FAKTOR_ADC*delta); sprintf(buf,"~=%sV",bval); UB_Font_DrawString(LINE(24),33*FONT_W,buf,&Arial_7x10,MENU_VG_COL,MENU_BG_COL); } else if(Menu.cursor.mode==3) { // Cursor = TIME p_menu_draw_BOT(MM_CUR_P1,UM_07,0,5); p_menu_draw_BOT(MM_CUR_P2,UM_07,0,6); if(Menu.cursor.t1>=Menu.cursor.t2) { delta=Menu.cursor.t1-Menu.cursor.t2; } else { delta=Menu.cursor.t2-Menu.cursor.t1; } P_FloatToDezStr(P_Time_to_Float(Menu.timebase.value, (delta+2048))); if(Menu.timebase.value<3) { sprintf(buf,"~=%ss",bval); } else if(Menu.timebase.value<12) { sprintf(buf,"~=%sms",bval); } else { sprintf(buf,"~=%sus",bval); } UB_Font_DrawString(LINE(24),33*FONT_W,buf,&Arial_7x10,MENU_VG_COL,MENU_BG_COL); } else if(Menu.cursor.mode==4) { // Cursor = FFT p_menu_draw_BOT(MM_CUR_P1,UM_07,0,8); } }
//-------------------------------------------------------------- // zeichnet das komplette Menu // (alle TOP und alle BOTTOM Menu-Punkte und die GUI) //-------------------------------------------------------------- void menu_draw_all(void) { //--------------------------------- // obere Menu-Leiste //--------------------------------- // Hintergrundbalken UB_Graphic2D_DrawFullRectDMA(LCD_MAXX-FONT_H-2,0,LCD_MAXY,FONT_H+2,MENU_BG_COL); // TOP-Menus p_gui_draw_TOP(MM_CH1, UM_01, Menu.ch1.faktor); p_gui_draw_TOP(MM_CH2, UM_01, Menu.ch2.faktor); p_gui_draw_TOP(MM_TIME, UM_02, Menu.timebase.value); if(Menu.send.data==0) { p_gui_draw_TOP(MM_SETTING, UM_03, Menu.akt_setting); } else { UB_Font_DrawString(LINE(1),MM_ITEM[MM_SETTING].yp,"please wait",&Arial_7x10,MENU_VG_COL,MENU_AK_COL); } //--------------------------------- // untere Menu-Leiste //--------------------------------- // Hintergrundbalken UB_Graphic2D_DrawFullRectDMA(0,0,LCD_MAXY,FONT_H+2,MENU_BG_COL); // Bottom-Menus if(Menu.akt_setting==SETTING_TRIGGER) p_menu_draw_BOT_TRG(); if(Menu.akt_setting==SETTING_CH1) p_menu_draw_BOT_CH1(); if(Menu.akt_setting==SETTING_CH2) p_menu_draw_BOT_CH2(); if(Menu.akt_setting==SETTING_CURSOR) p_menu_draw_BOT_CUR(); if(Menu.akt_setting==SETTING_FFT) p_menu_draw_BOT_FFT(); if(Menu.akt_setting==SETTING_SEND) p_menu_draw_BOT_SEND(); if(Menu.akt_setting==SETTING_VERSION) p_menu_draw_BOT_VERSION(); if(Menu.akt_setting==SETTING_HELP) p_menu_draw_BOT_HELP(); if(GUI.gui_xpos==GUI_XPOS_OFF) { Menu.akt_transparenz=100; } else { Menu.akt_transparenz=200; //-------------------------- // GUI //-------------------------- p_menu_draw_GUI(); } }
//-------------------------------------------------------------- // zeichnet die Skala und die Cursor vom Oszi //-------------------------------------------------------------- void p_oszi_draw_scale(void) { uint32_t n,m; uint16_t xs,ys; int16_t signed_int; xs=SCALE_START_X; ys=SCALE_START_Y; //--------------------------------------------- // Raster aus einzelnen Punkten //--------------------------------------------- for(m=0;m<=SCALE_H;m+=SCALE_SPACE) { for(n=0;n<=SCALE_W;n+=SCALE_SPACE) { UB_Graphic2D_DrawPixelNormal(m+xs,n+ys,SCALE_COL); } } //--------------------------------------------- // X-Achse (Horizontale Mittel-Linie) //--------------------------------------------- signed_int=SCALE_Y_MITTE+xs; p_oszi_draw_line_h(signed_int,SCALE_COL,0); //--------------------------------------------- // Y-Achse (Vertikale Mittel-Linie) //--------------------------------------------- signed_int=SCALE_X_MITTE+ys; p_oszi_draw_line_v(signed_int,SCALE_COL,0); //--------------------------------------------- // Umrandung //--------------------------------------------- // unterste linie UB_Graphic2D_DrawStraightDMA(xs-1,ys-1,SCALE_W+2,LCD_DIR_HORIZONTAL,SCALE_COL); // oberste linie UB_Graphic2D_DrawStraightDMA(xs+SCALE_H+1,ys-1,SCALE_W+2,LCD_DIR_HORIZONTAL,SCALE_COL); // linke linie UB_Graphic2D_DrawStraightDMA(xs-1,ys-1,SCALE_H+2,LCD_DIR_VERTICAL,SCALE_COL); // rechte linie UB_Graphic2D_DrawStraightDMA(xs-1,ys+SCALE_W+1,SCALE_H+2,LCD_DIR_VERTICAL,SCALE_COL); //--------------------------------------------- // Trigger-Linie (immer Sichtbar) //--------------------------------------------- if(Menu.trigger.source==0) { signed_int=oszi_adc2pixel(Menu.trigger.value_ch1, Menu.ch1.faktor); signed_int+=SCALE_Y_MITTE+SCALE_START_X+Menu.ch1.position; if(signed_int<SCALE_START_X) signed_int=SCALE_START_X; if(signed_int>SCALE_MX_PIXEL) signed_int=SCALE_MX_PIXEL; p_oszi_draw_line_h(signed_int,ADC_CH1_COL,1); UB_Font_DrawString(signed_int-3,0,"T",&Arial_7x10,ADC_CH1_COL,BACKGROUND_COL); } else if(Menu.trigger.source==1) { signed_int=oszi_adc2pixel(Menu.trigger.value_ch2, Menu.ch2.faktor); signed_int+=SCALE_Y_MITTE+SCALE_START_X+Menu.ch2.position; if(signed_int<SCALE_START_X) signed_int=SCALE_START_X; if(signed_int>SCALE_MX_PIXEL) signed_int=SCALE_MX_PIXEL; p_oszi_draw_line_h(signed_int,ADC_CH2_COL,1); UB_Font_DrawString(signed_int-3,0,"T",&Arial_7x10,ADC_CH2_COL,BACKGROUND_COL); } //--------------------------------------------- // Cursor-Linien (nur falls aktiviert) //--------------------------------------------- if(Menu.cursor.mode==1) { //------------------------------- // Cursor (CH1) //------------------------------- signed_int=oszi_adc2pixel(Menu.cursor.p1, Menu.ch1.faktor); signed_int+=SCALE_Y_MITTE+SCALE_START_X+Menu.ch1.position; if(signed_int<SCALE_START_X) signed_int=SCALE_START_X; if(signed_int>SCALE_MX_PIXEL) signed_int=SCALE_MX_PIXEL; p_oszi_draw_line_h(signed_int,CURSOR_COL,2); UB_Font_DrawString(signed_int-3,312,"A",&Arial_7x10,CURSOR_COL,BACKGROUND_COL); signed_int=oszi_adc2pixel(Menu.cursor.p2, Menu.ch1.faktor); signed_int+=SCALE_Y_MITTE+SCALE_START_X+Menu.ch1.position; if(signed_int<SCALE_START_X) signed_int=SCALE_START_X; if(signed_int>SCALE_MX_PIXEL) signed_int=SCALE_MX_PIXEL; p_oszi_draw_line_h(signed_int,CURSOR_COL,2); UB_Font_DrawString(signed_int-3,312,"B",&Arial_7x10,CURSOR_COL,BACKGROUND_COL); } else if(Menu.cursor.mode==2) { //------------------------------- // Cursor (CH2) //------------------------------- signed_int=oszi_adc2pixel(Menu.cursor.p1, Menu.ch2.faktor); signed_int+=SCALE_Y_MITTE+SCALE_START_X+Menu.ch2.position; if(signed_int<SCALE_START_X) signed_int=SCALE_START_X; if(signed_int>SCALE_MX_PIXEL) signed_int=SCALE_MX_PIXEL; p_oszi_draw_line_h(signed_int,CURSOR_COL,2); UB_Font_DrawString(signed_int-3,312,"A",&Arial_7x10,CURSOR_COL,BACKGROUND_COL); signed_int=oszi_adc2pixel(Menu.cursor.p2, Menu.ch2.faktor); signed_int+=SCALE_Y_MITTE+SCALE_START_X+Menu.ch2.position; if(signed_int<SCALE_START_X) signed_int=SCALE_START_X; if(signed_int>SCALE_MX_PIXEL) signed_int=SCALE_MX_PIXEL; p_oszi_draw_line_h(signed_int,CURSOR_COL,2); UB_Font_DrawString(signed_int-3,312,"B",&Arial_7x10,CURSOR_COL,BACKGROUND_COL); } else if(Menu.cursor.mode==3) { //------------------------------- // Cursor (TIME) //------------------------------- signed_int=Menu.cursor.t1*FAKTOR_T; signed_int+=SCALE_START_Y; if(signed_int<SCALE_START_Y) signed_int=SCALE_START_Y; if(signed_int>SCALE_MY_PIXEL) signed_int=SCALE_MY_PIXEL; p_oszi_draw_line_v(signed_int,CURSOR_COL,2); UB_Font_DrawString(215,signed_int-3,"A",&Arial_7x10,CURSOR_COL,BACKGROUND_COL); signed_int=Menu.cursor.t2*FAKTOR_T; signed_int+=SCALE_START_Y; if(signed_int<SCALE_START_Y) signed_int=SCALE_START_Y; if(signed_int>SCALE_MY_PIXEL) signed_int=SCALE_MY_PIXEL; p_oszi_draw_line_v(signed_int,CURSOR_COL,2); UB_Font_DrawString(215,signed_int-3,"B",&Arial_7x10,CURSOR_COL,BACKGROUND_COL); } else if(Menu.cursor.mode==4) { //------------------------------- // Cursor (FFT) //------------------------------- signed_int=Menu.cursor.f1*FAKTOR_F; signed_int+=FFT_START_Y+1; if(signed_int<FFT_START_Y) signed_int=FFT_START_Y; if(signed_int>(FFT_START_Y+FFT_VISIBLE_LENGTH)) signed_int=(FFT_START_Y+FFT_VISIBLE_LENGTH); p_oszi_draw_line_v(signed_int,CURSOR_COL,2); UB_Font_DrawString(215,signed_int-3,"A",&Arial_7x10,CURSOR_COL,BACKGROUND_COL); } }
//-------------------------------------------------------------- // zeichnet Untermenu : "HELP" //-------------------------------------------------------------- void p_menu_draw_BOT_HELP(void) { UB_Font_DrawString(LINE(24),10,"CH1=PA5 | CH2=PA7 | TX=PA9 | 500Hz=PB2",&Arial_7x10,MENU_VG_COL,MENU_BG_COL); // Noah 20141013 // UB_Font_DrawString(LINE(24),10,"CH1=PA3 | CH2=PA7 | TX=PA9 | 500Hz=PB2",&Arial_7x10,MENU_VG_COL,MENU_BG_COL); }
//-------------------------------------------------------------- // zeichnet Untermenu : "VERSION" //-------------------------------------------------------------- void p_menu_draw_BOT_VERSION(void) { // UB_Font_DrawString(LINE(24),10,"STM32F429-Oszi | UB | V:1.6 | 24.03.2014",&Arial_7x10,MENU_VG_COL,MENU_BG_COL); // Noah 20141013 UB_Font_DrawString(LINE(24),10,"STM32F429-Noah | Oszi/UB|V:0.1| 2014.10.13",&Arial_7x10,MENU_VG_COL,MENU_BG_COL); }
//-------------------------------------------------------------- // zeichnet einen BOTTOM-Menu-Punkt //-------------------------------------------------------------- void p_menu_draw_BOT(uint32_t mm_nr, const SM_Item_t um[], uint32_t um_nr, uint32_t mode) { if(mode==0) { // standard Menupunkt sprintf(buf,"%s%s",MM_ITEM[mm_nr].txt,um[um_nr].stxt); } else if(mode==1) { // Sondermenupunkt : "Trigger Value" if(Menu.trigger.source==0) { P_FloatToDezStr(FAKTOR_ADC*Menu.trigger.value_ch1); sprintf(buf,"%s%sV",MM_ITEM[mm_nr].txt,bval); } if(Menu.trigger.source==1) { P_FloatToDezStr(FAKTOR_ADC*Menu.trigger.value_ch2); sprintf(buf,"%s%sV",MM_ITEM[mm_nr].txt,bval); } } else if(mode==2) { // Sondermenupunkt : "Channel position" if(Menu.akt_setting==SETTING_CH1) { P_FloatToDezStr(P_Volt_to_Float(Menu.ch1.faktor,Menu.ch1.position)); sprintf(buf,"%s%sV",MM_ITEM[mm_nr].txt,bval); } if(Menu.akt_setting==SETTING_CH2) { P_FloatToDezStr(P_Volt_to_Float(Menu.ch2.faktor,Menu.ch2.position)); sprintf(buf,"%s%sV",MM_ITEM[mm_nr].txt,bval); } } else if(mode==3) { // Sondermenupunkt : "CH1/CH2 Cursor-A position" P_FloatToDezStr(FAKTOR_ADC*Menu.cursor.p1); sprintf(buf,"%s%sV",MM_ITEM[mm_nr].txt,bval); } else if(mode==4) { // Sondermenupunkt : "CH1/CH2 Cursor-B position" P_FloatToDezStr(FAKTOR_ADC*Menu.cursor.p2); sprintf(buf,"%s%sV",MM_ITEM[mm_nr].txt,bval); } else if(mode==5) { // Sondermenupunkt : "TIME Cursor-A position" P_FloatToDezStr(P_Time_to_Float(Menu.timebase.value, Menu.cursor.t1)); sprintf(buf,"%s%s",MM_ITEM[mm_nr].txt,bval); } else if(mode==6) { // Sondermenupunkt : "TIME Cursor-B position" P_FloatToDezStr(P_Time_to_Float(Menu.timebase.value, Menu.cursor.t2)); sprintf(buf,"%s%s",MM_ITEM[mm_nr].txt,bval); } else if(mode==7) { // Sondermenupunkt : "Trigger Reset" sprintf(buf,"%s%s",MM_ITEM[mm_nr].txt,um[um_nr].stxt); } else if(mode==8) { // Sondermenupunkt : "FFT Cursor-A position" P_FloatToDezStr(P_FFT_to_Float(Menu.timebase.value, Menu.cursor.f1)); if(Menu.timebase.value<=12) { sprintf(buf,"%s%sHz",MM_ITEM[mm_nr].txt,bval); } else { sprintf(buf,"%s%skHz",MM_ITEM[mm_nr].txt,bval); } } if(GUI.akt_menu==mm_nr) { UB_Font_DrawString(LINE(24),MM_ITEM[mm_nr].yp,buf,&Arial_7x10,MENU_VG_COL,MENU_AK_COL); } else { UB_Font_DrawString(LINE(24),MM_ITEM[mm_nr].yp,buf,&Arial_7x10,MENU_VG_COL,MENU_BG_COL); } }
/** * @brief Está rotina é chamada para imprimir o menu principal, ela apaga a tela completamente e * insere retângulos dos botões e textos * @param Nenhum * @retval Nenhum */ void imprimir_menu(void){ LCD_DrawFullRect(45, 70, 150, 60, RGB_COL_WHITE); UB_Font_DrawString(65,90,"Digitar",&Arial_11x20,RGB_COL_BLACK,RGB_COL_WHITE); LCD_DrawFullRect(45, 200, 150, 60, RGB_COL_WHITE); UB_Font_DrawString(65,220,"Opções",&Arial_11x20,RGB_COL_BLACK,RGB_COL_WHITE); }
int main(void) { SystemInit(); // Configurações e inicialização do clock UB_LCD_Init(); // Inicialização LCD UB_LCD_LayerInit_Fullscreen(); // Inicialização da camadas da tela UB_LCD_SetLayer_1(); // Inicialização da camadas do fundo UB_LCD_FillLayer(RGB_COL_WHITE); // Cor do fundo UB_LCD_SetLayer_2(); // Inicialização da camadas em primeiro plano UB_LCD_FillLayer(RGB_COL_WHITE); // Cor do primeiro plano CurrentFrameBuffer=LCD_FRAME_BUFFER + LCD_FRAME_OFFSET; // Variáveis de controle da tela aktColor=LCD_COLOR_BLUE; // Variável para armazenar cor de preferência menu=0; //Programa inicia no menu inicial if(UB_Touch_Init()!=SUCCESS) // Verifica se a inicialização da tela sensível ao toque ocorreu corretamente { UB_Font_DrawString(10,28,"Touch error",&Arial_11x20,RGB_COL_WHITE,RGB_COL_RED); //Imprime mensagem de erro UB_Font_DrawString(10,46,"Reconecte a energia",&Arial_11x20,RGB_COL_WHITE,RGB_COL_RED); while(1); //Impede o progresso das demais rotinas } USB_HID_HOST_STATUS_t host_status; // Variável para armazenar o estado da comunicação USB USB_Init(); // Inicializações para utilizar USB while(1){ LCD_DrawFullRect(0, 0, 240, 320, LCD_COLOR_BLACK); // Imprime retângulo branco do tamanha da tela(apaga tudo) imprimir_menu(); // Imprime grafismo do menu inicial //-------------------------------------------------------------- while(menu==0) // Enquanto menu==0 o programa fica no menu inicial { host_status=USB_Function(); // Esta função deve ser chamada periodicamente para o funcionamento do teclado if(host_status!=USB_HID_DEV_DETACHED) // Se o USB não tiver sido desconectado menu = arrow_function(); // Chama função que controla o selecionamento do menu UB_Touch_Read(); // Lê informações do touch if(Touch_Data.status==TOUCH_PRESSED) { if((Touch_Data.yp < 130) && (Touch_Data.yp >= 70)) { // Verifica limites da região de um botão touch na tela if((Touch_Data.xp < 215) && (Touch_Data.xp > 45)) { menu=1; // Se o toque ocorreu muda o estado do programa } } } if(Touch_Data.status==TOUCH_PRESSED) { if((Touch_Data.yp < 260) && (Touch_Data.yp >= 200)) { // Verifica limites da região de um botão touch na tela if((Touch_Data.xp < 215) && (Touch_Data.xp > 45)) { menu=2; // Se o toque ocorreu muda o estado do programa } } } if(menu==1){ // menu==1 equivale ao modo de Digitação pos.x = 10; // Posições onde o cursor de digitação começa pos.y = 10; LCD_DrawFullRect(0, 0, 240, 320, LCD_COLOR_WHITE); // Imprime retângulo branco do tamanha da tela(apaga tudo) } if(menu==2){ // menu==2 equivale ao modo de Opções LCD_DrawFullRect(0, 0, 240, 320, LCD_COLOR_WHITE); // Imprime retângulo branco do tamanha da tela(apaga tudo) UB_Font_DrawString(10,10,"Cor do texto",&Arial_11x20,aktColor,RGB_COL_WHITE); //Imprime mensagem } } while(menu==1) // menu==1 equivale ao modo de Digitação { host_status=USB_Function(); //Esta função deve ser chamada periodicamente para o funcionamento do teclado UB_Touch_Read(); //Leitura do Touch LCD_DrawLine(pos.x,pos.y, 20, LCD_DIR_VERTICAL, RGB_COL_WHITE); if(Touch_Data.status==TOUCH_PRESSED) { if((Touch_Data.yp < 317) && (Touch_Data.yp >= 3)) { // Verifica se touch foi na tela( para evitar erros} if((Touch_Data.xp < 237) && (Touch_Data.xp > 3)) { pos.x=Touch_Data.xp; // Posiciona o cursor sobre o local tocado pos.y=Touch_Data.yp; LCD_DrawLine(pos.x,pos.y, 20, LCD_DIR_VERTICAL, RGB_COL_WHITE); } } } if(host_status!=USB_HID_DEV_DETACHED) //Se o USB não tiver sido desconectado pos = key_function(pos); //Interpreta todas teclas e funções do teclado, retorna posição do cursor if(host_status==USB_HID_DEV_CONNECTED) //Se o USB for reconectado LCD_DrawFullRect(0, 302, 240, 320, LCD_COLOR_WHITE); //Apaga mensagem pedindo para conectar if(host_status==USB_HID_DEV_DETACHED) //Se o USB for desconectado UB_Font_DrawString(10,302,"Teclado desconectado",&Arial_11x20,RGB_COL_RED,RGB_COL_WHITE); //Imprime mensagem } while(menu==2) // menu==2 equivale ao modo de Opções { host_status=USB_Function(); //Esta função deve ser chamada periodicamente para o funcionamento do teclado if(host_status!=USB_HID_DEV_DETACHED) //Se o USB não tiver sido desconectado menu = opcoes(); } } }