کالیبراسیون تاچ در emwin.
با سلام خدمت دوستان.
یک تابعی رو در یک پروژه دیدم که کالیبراسیون تاچ رو انجام میداد.
خیلی خوشم اومد و این تابع رو در این پست قرار میدم تا شما هم بتونید از اون استفاده کنید.
البته این کالیبراسیون برای ال سی دی های ۸۰۰*۴۸۰ تنظیم شده.
که با تغییرات جزیی میتونید اون رو برای ال سی دی های دیگه هم به راحتی استفاده کنید.
شرح تابع برای کالیبراسیون تاچ در emwin:
عملکرد تابع به اینصورت است که : ابتدا در نقطه ی ۱۵ و ۱۵ ال سی دی دایره ای رسم میکند، که باید آنرا تاچ کنید. با تاچ کردن آن نقطه مختصات اول تاچ برای کالیبره کردن بدست می آید.
سپس در نفطه ی ۴۶۴ و ۷۸۴ این اتفاق رخ می دهد که با تاچ کردن آن مختصات دوم نقطه ی تاچ نیز بدست می آید.
حال با استفاده از تابع کالیبراسیون تاچ ، نقاط بدست آمده را درون تابع قرار می دهیم ، و با اجرای آن تابع تاچ را کالیبره می کند.
void Touch_Calibrate() { int IRQ_touch; int x_adj[2],y_adj[2]; GUI_SetBkColor(GUI_RED); GUI_Clear(); GUI_SetColor(GUI_WHITE); GUI_FillCircle(15, 15, 10); GUI_SetColor(GUI_RED); GUI_FillCircle(15, 15, 5); GUI_SetColor(GUI_WHITE); GUI_DispStringAt("Press here", 35, 15); do { GUI_PID_STATE State; GUI_TOUCH_GetState(&State); IRQ_touch=((FIO_ReadValue(2))&(1<<11)); if (IRQ_touch==0) { x_adj[0]= Read_X(); y_adj[0]= Read_Y(); break; } GUI_Delay (100); } while (1); GUI_Clear(); GUI_DispStringAt("OK", 35, 15); do { GUI_PID_STATE State; GUI_TOUCH_GetState(&State); IRQ_touch=((FIO_ReadValue(2))&(1<<11)); if (IRQ_touch!=0) { break; } GUI_Delay (100); } while (1); GUI_SetBkColor(GUI_RED); GUI_Clear(); GUI_SetColor(GUI_WHITE); GUI_FillCircle(784, 464, 10); GUI_SetColor(GUI_RED); GUI_FillCircle(784, 464, 5); GUI_SetColor(GUI_WHITE); GUI_DispStringAt("Press here", 704, 464); do { GUI_PID_STATE State; GUI_TOUCH_GetState(&State); IRQ_touch=((FIO_ReadValue(2))&(1<<11)); if (IRQ_touch==0) { x_adj[1]= Read_X(); y_adj[1]= Read_Y(); break; } GUI_Delay (100); } while (1); GUI_Clear(); GUI_DispStringAt("OK", 764, 464); do { GUI_PID_STATE State; GUI_TOUCH_GetState(&State); IRQ_touch=((FIO_ReadValue(2))&(1<<11)); if (IRQ_touch!=0) { break; } GUI_Delay (100); } while (1); GUI_TOUCH_Calibrate(GUI_COORD_X, 15, 784, x_adj[0], x_adj[1]); GUI_TOUCH_Calibrate(GUI_COORD_Y, 15, 464, y_adj[0], y_adj[1]); GUI_Delay(10000); } }