[PROJEKT] KA-NUCLEO-F411CE i Waveshare Accessory Shield – obsługa joysticka wraz z diodą RGB
Programowanie funkcji obsługi joysticka
Uzupełnienie plików projektu
Po wygenerowaniu plików projektu i zaimportowaniu ich do programu AC6 należy uzupełnić pliki main.c, oraz stm32f4xx_it.c z projektu. Zawierają one definicję funkcji odpowiedzialnych za sterowanie diodą RGB, którą będziemy sterowali joystickiem. Pliki te można podmienić w eksploratorze plików lub w środowisku AC6. Po podmianie plików dobrze jest skompilować projekt w celu sprawdzenia czy wszystko wykonaliśmy poprawnie.
Programowanie funkcji obsługi przerwań od przycisków
Programowanie funkcji przerwań zewnętrznych odbywa się w pliku main.c – funkcja callback. Są to funkcje odpowiedzialne za realizację obsługi danego przerwania. W naszym przypadku definicję funkcji callback umieścimy w sekcji „Private function prototypes”. Jej postać wygląda następująco:
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { if(HAL_GPIO_ReadPin(Joy_A_GPIO_Port, Joy_A_Pin) == 0) { setColor = 1; } if(HAL_GPIO_ReadPin(Joy_B_GPIO_Port, Joy_B_Pin) == 0) { setColor = 2; } if(HAL_GPIO_ReadPin(Joy_C_GPIO_Port, Joy_C_Pin) == 0) { setColor = 3; } if(HAL_GPIO_ReadPin(Joy_D_GPIO_Port, Joy_D_Pin) == 0) { setColor = 4; } }
W funkcji obsługi przerwania sprawdzane jest źródło przerwania, czyli przycisk, od którego wystąpiło przerwanie. Wykonywane jest to za pomocą instrukcji warunkowych. Każdy z przycisków ma za zadanie przypisać do zmiennej „setColor” numer koloru do ustawienia. Działanie funkcji callback wymaga wcześniejszego zdefiniowania zmiennej „setColor” w sekcji „Private variables”.
/* Private variables ---------------------------------------------------------*/ extern uint8_t delayUsCounter; uint8_t setColor = 0; /* USER CODE END PV */
W funkcji głównej main w pętli nieskończonej while tworzymy strukturę składającą się z pięciu instrukcji warunkowych, ustawiających kolor diody RGB w zależności od wybranej opcji za pomocą joysticka.
/* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ if(setColor == 0) { P9813_SetColor(0, 0, 0); } if(setColor == 1) { P9813_SetColor(255, 0, 0); } if(setColor == 2) { P9813_SetColor(0, 255, 0); } if(setColor == 3) { P9813_SetColor(0, 0, 255); } if(setColor == 4) { P9813_SetColor(255, 255, 255); } } /* USER CODE END 3 */
Ostatnim krokiem jest skompilowanie zmodyfikowanego projektu i wgranie go na płytkę KAnucleo z ekspanderem.