LinkedIn YouTube Facebook
Szukaj

Newsletter

Proszę czekać.

Dziękujemy za zgłoszenie!

Wstecz
Artykuły

[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.

Autor: Jakub Kuryło