// // ‘”Ќ ÷»я: WndProc(HWND, UINT, WPARAM, LPARAM) // // Ќј«Ќј„≈Ќ»≈: обрабатывает сообщени¤ в главном окне. // // WM_COMMAND Ч обработать меню приложени¤ // WM_PAINT Ч отрисовать главное окно // WM_DESTROY Ч отправить сообщение о выходе и вернутьс¤ // // LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { HWND edit; switch (message) { case WM_COMMAND: { int wmId = LOWORD(wParam); // –азобрать выбор в меню: switch (wmId) { case IDM_ABOUT: DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About); break; case IDM_EXIT: DestroyWindow(hWnd); break; case ID_BUTTON_MOVE: if (HIWORD(wParam) == BN_CLICKED) { edit = GetDlgItem(hWnd,ID_EDIT_MOVEX); TCHAR X[5]; TCHAR Y[5]; GetWindowText(edit, X, 5); edit = GetDlgItem(hWnd, ID_EDIT_MOVEY); GetWindowText(edit, Y, 5); if (wcslen(X) != 0 && wcslen(Y) != 0) { moveClock(_wtof(X),_wtof(Y)); InvalidateRect(hWnd, 0, true); } } break; case ID_BUTTON_SCALE: if (HIWORD(wParam) == BN_CLICKED) { TCHAR prop[5]; TCHAR X[5]; TCHAR Y[5]; edit = GetDlgItem(hWnd, ID_EDIT_SCALEPROPORTIONS); GetWindowText(edit, prop, 5); edit = GetDlgItem(hWnd, ID_EDIT_SCALEX); GetWindowText(edit, X, 5); edit = GetDlgItem(hWnd, ID_EDIT_SCALEY); GetWindowText(edit, Y, 5); if (wcslen(prop) != 0 && wcslen(X) != 0 && wcslen(Y) != 0) { scaleClock(_wtof(prop), _wtof(X), _wtof(Y)); InvalidateRect(hWnd, 0, true); } } break; case ID_BUTTON_ROTATE: if (HIWORD(wParam) == BN_CLICKED) { TCHAR X[5]; TCHAR Y[5]; TCHAR A[5]; edit = GetDlgItem(hWnd, ID_EDIT_ROTATEX); GetWindowText(edit, X, 5); edit = GetDlgItem(hWnd, ID_EDIT_ROTATEY); GetWindowText(edit, Y, 5); edit = GetDlgItem(hWnd, ID_EDIT_ROTATEANGLE); GetWindowText(edit, A, 5); if (wcslen(X) != 0 && wcslen(Y) != 0 && wcslen(A) != 0) { rotateClock(_wtof(X), _wtof(Y), (_wtof(A) / 180.0)*3.14); InvalidateRect(hWnd, 0, true); } } break; case ID_BUTTON_RESET: if (HIWORD(wParam) == BN_CLICKED) { reset(); InvalidateRect(hWnd, 0, true); } break; default: return DefWindowProc(hWnd, message, wParam, lParam); } } break; case WM_PAINT: { PAINTSTRUCT ps; HDC hdc = BeginPaint(hWnd, &ps); draw(hdc); EndPaint(hWnd, &ps); } break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; }
//MAIN function. int main(int argc, char *argv[]){ controlGPIOs[0] = 23; controlGPIOs[1] = 47; controlGPIOs[2] = 26; controlGPIOs[3] = 46; //setup Analog IO's system("./analogInSetup.sh"); int i, k, samples[20], min, toggle, minIndex, contine, counter, minFound; minFound = 0; min = 99999; counter = 0; contine = 1; if(argc < 3){ printf("Fewers than 2 arguments detected: using default values.\n"); ain[0] = '2'; ain[1] = '1'; controlGPIOs[4] = 65; }else{ ain[0] = argv[2][0]; ain[1] = argv[3][0]; controlGPIOs[4] = atoi(argv[1]); } //Initialize IO initIO(); while(contine){ gpio_get_value(controlGPIOs[4], &toggle); //if toggle pressed, rotate once then counter-rotate to light source if(toggle == 0){ //Clockwise rotate for a cycle and record the value in different directions for(i=0; i<5; i++){ for(k=0; k<4; k++){ rotateClock(k); samples[counter] = analogIn(ain[0])+analogIn(ain[1]); if(min>samples[counter]){ minIndex=counter;min=samples[counter];} counter++; } } printf("%d\n", minIndex); counter = 0; for(k=0; k<((20-minIndex)/4); k++){ for(i=0; i<4; i++){ rotateClock(3-i); counter++; } } printf("%d\n", counter); for(i=0; i<((20-minIndex)%4); i++){ rotateClock(3-i); counter++; } printf("here%d\n", counter); minFound = 1; } //Track light source if(minFound == 1){ //Moving Left and Right printf("Ain[0] =%d\tAin[1]=%d\n", analogIn(ain[0]), analogIn(ain[1]) ); if( (analogIn(ain[0]) ) > analogIn(ain[1]) ) { rotateClock(0); rotateClock(1); rotateClock(2); rotateClock(3); printf("Should move Clockwise\n"); } else { rotateClock(3); rotateClock(2); rotateClock(1); rotateClock(0); printf("Should move Counterclockwise\n"); } fflush(stdout); usleep(2000000); } } return 0; }