//Listing 1. Modyfikacja sekcji USER CODE 0 /* USER CODE BEGIN 0 */ void uart_write(UART_HandleTypeDef * handler, char * text) { HAL_UART_Transmit(handler, text, strlen(text), 1000); } void uart_write_line(UART_HandleTypeDef * handler, char * text) { HAL_UART_Transmit(handler, text, strlen(text), 1000); HAL_UART_Transmit(handler, „\r\n”, 2, 1000); } uart_read_line(UART_HandleTypeDef * handler, char * buffer, uint16_t buffer_size) { HAL_StatusTypeDef status; char current_char; uint16_t char_counter = 0; while (char_counter < buffer_size - 1) { status = HAL_UART_Receive(handler, ¤t_char, 1, 1); if (status == HAL_OK) { if (current_char == ‚\r’ || current_char == ‚\n’) if (char_counter == 0) continue; else break; *(buffer + char_counter++) = current_char; } } *(buffer + char_counter) = ‚\0’; } /* USER CODE END 0 */ //Listing 2. Obsługa korekcji gamma /* USER CODE BEGIN 0 */ void set_led_brightness(TIM_HandleTypeDef * timer, uint32_t channel, double brightness) { int32_t value = powf(brightness, 2.2) * 49999; __HAL_TIM_SET_COMPARE(timer, channel, value); } /* USER CODE END 0 */ //Listing 3. Uruchomienie generatora PWM /* USER CODE BEGIN 2 */ HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_1); HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_2); HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_3); /* USER CODE END 2 */ //Listing 4. Odbiór danych i zmiana koloru świecenia LED uint8_t key[1]; HAL_StatusTypeDef status = HAL_UART_Receive(&huart2, key, 1, 1); if (status == HAL_OK) switch (key[0]) { case ‚q’: red += 0.01; break; case ‚w’: green += 0.01; break; case ‚e’: blue += 0.01; break; case ‚a’: red -= 0.01; break; case ‚s’: green -= 0.01; break; case ‚d’: blue -= 0.01; break; } if (red > 1) red = 1; if (red < 0) red = 0; if (green > 1) green = 1; if (green < 0) green = 0; if (blue > 1) blue = 1; if (blue < 0) blue = 0; set_led_brightness(&htim1, TIM_CHANNEL_1, blue); set_led_brightness(&htim1, TIM_CHANNEL_2, red); set_led_brightness(&htim1, TIM_CHANNEL_3, green); //Listing 5. Funkcja wywoływana przez przerwanie USART void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { switch (key[0]) { case ‚q’: red += 0.01; break; case ‚w’: green += 0.01; break; case ‚e’: blue += 0.01; break; case ‚a’: red -= 0.01; break; case ‚s’: green -= 0.01; break; case ‚d’: blue -= 0.01; break; } if (red > 1) red = 1; if (red < 0) red = 0; if (green > 1) green = 1; if (green < 0) green = 0; if (blue > 1) blue = 1; if (blue < 0) blue = 0; set_led_brightness(&htim1, TIM_CHANNEL_1, blue); set_led_brightness(&htim1, TIM_CHANNEL_2, red); set_led_brightness(&htim1, TIM_CHANNEL_3, green); HAL_UART_Receive_IT(&huart2, key, 1); } //Listing 6. Zmiany w sekcji USER CODE 2 /* USER CODE BEGIN 2 */ HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_1); HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_2); HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_3); HAL_UART_Receive_IT(&huart2, key, 1); /* USER CODE END 2 */ //Listing 7. Modyfikacja sekcji USER CODE PV /* USER CODE BEGIN PV */ /* Private variables ---...---*/ double red = 0, green = 0, blue = 0; uint8_t key[1]; /* USER CODE END PV */