coding motor servo UART
coding motor servo UART
Page 1
main.c Tuesday, December 10, 2024, 9:11 AM
Page 2
main.c Tuesday, December 10, 2024, 9:11 AM
Page 3
main.c Tuesday, December 10, 2024, 9:11 AM
170 HAL_Delay(50);
171
172 sprintf((char *)uartBuffer, BUFFER_SIZE, "Servo 3 %d\n"
,currentServoAngle3);
173 HAL_UART_Transmit(&huart2, uartBuffer, strlen((char *)uartBuffer),
HAL_MAX_DELAY);
174 HAL_Delay(100);
175 }
176 HAL_Delay(1000);
177 for(int i =90; i<180;i+=2){ //menggerakkan servo 4 dari 90 ke 180
178 PCA9685_SetServoAngle(3, i);
179 currentServoAngle4 = i;
180 HAL_Delay(50);
181
182 sprintf((char *)uartBuffer, BUFFER_SIZE, "Servo 4 %d\n"
,currentServoAngle4);
183 HAL_UART_Transmit(&huart2, uartBuffer, strlen((char *)uartBuffer),
HAL_MAX_DELAY);
184 HAL_Delay(100);
185 }
186 HAL_Delay(1000);
187 for(int i =0; i<120;i+=2){ //menggerakkan servo 1 dari 0 ke 120
188 PCA9685_SetServoAngle(0, i);
189 currentServoAngle1 = i;
190 HAL_Delay(50);
191
192 sprintf((char *)uartBuffer, BUFFER_SIZE, "Servo 1 %d\n"
,currentServoAngle1);
193 HAL_UART_Transmit(&huart2, uartBuffer, strlen((char *)uartBuffer),
HAL_MAX_DELAY);
194 HAL_Delay(100);
195 }
196 HAL_Delay(3000);
197 PCA9685_SetServoAngle(4, 0);
198 HAL_Delay(3000);
199 for(int i =120; i>0;i-=2){
200 PCA9685_SetServoAngle(0, i);
201 HAL_Delay(50);
202 }
203 HAL_Delay(3000);
204 for(int i =140; i>45;i-=2){
205 PCA9685_SetServoAngle(2, i);
206 HAL_Delay(25);
207 }
208 HAL_Delay(1000);
209
210
211 }
212 }
213 /* USER CODE END WHILE */
214
215 /* USER CODE BEGIN 3 */
216
217 /* USER CODE END 3 */
218 }
219
220 /**
221 * @brief System Clock Configuration
222 * @retval None
Page 4
main.c Tuesday, December 10, 2024, 9:11 AM
223 */
224 void SystemClock_Config(void)
225 {
226 RCC_OscInitTypeDef RCC_OscInitStruct = {0};
227 RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
228
229 /** Configure the main internal regulator output voltage
230 */
231 __HAL_RCC_PWR_CLK_ENABLE();
232 __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
233
234 /** Initializes the RCC Oscillators according to the specified parameters
235 * in the RCC_OscInitTypeDef structure.
236 */
237 RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
238 RCC_OscInitStruct.HSIState = RCC_HSI_ON;
239 RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
240 RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
241 RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
242 RCC_OscInitStruct.PLL.PLLM = 8;
243 RCC_OscInitStruct.PLL.PLLN = 100;
244 RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
245 RCC_OscInitStruct.PLL.PLLQ = 4;
246 if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
247 {
248 Error_Handler();
249 }
250
251 /** Initializes the CPU, AHB and APB buses clocks
252 */
253 RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
254 |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
255 RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
256 RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
257 RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
258 RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
259
260 if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_3) != HAL_OK)
261 {
262 Error_Handler();
263 }
264 }
265
266 /**
267 * @brief I2C1 Initialization Function
268 * @param None
269 * @retval None
270 */
271 static void MX_I2C1_Init(void)
272 {
273
274 /* USER CODE BEGIN I2C1_Init 0 */
275
276 /* USER CODE END I2C1_Init 0 */
277
278 /* USER CODE BEGIN I2C1_Init 1 */
279
280 /* USER CODE END I2C1_Init 1 */
281 hi2c1.Instance = I2C1;
Page 5
main.c Tuesday, December 10, 2024, 9:11 AM
Page 6
main.c Tuesday, December 10, 2024, 9:11 AM
Page 7