LA 2 MODUL 1 PRAKTIKUM UP & UC new
- Membuat rangkaian sesuai dengan percobaan 2
- Rangkai komponen sesuai dengan gambar pada modul, yang bertindak sebagai input adalah touch sensor dan infrared sensor, sedangkan output adalah LED RGB
- Hubungkan rangkaian tersebut dengan software STM32CubeID dengan menggunakan kabel USB
- Cek kondisi dari STM32 apakah sudah terbaca pada aplikasi atau belum
- Membuat program sesuai dengan kondisi pada modul didalam software STM32CubeID
- Code yang diperoleh dari software STM32CubeID dapat diupload kedalam STM32 untuk diterapkan pada percobaan
- Lakukan uji coba terhadap kedua sensor untuk mengetahui apakah kode berjalan dengan baik atau tidak
- Selesai.
Sistem ini dikendalikan melalui loop utama yang terus-menerus membaca nilai sensor dan mengubah status LED sesuai dengan kondisi yang terdeteksi. Delay 10ms diterapkan untuk memastikan stabilitas pembacaan sensor. Dengan pendekatan ini, rangkaian dapat digunakan untuk berbagai aplikasi seperti sistem deteksi objek, interaksi berbasis sentuhan, dan indikator visual berbasis sensor. Namun, sistem ini masih bisa ditingkatkan dengan menggunakan interrupt untuk pembacaan sensor, serta menambahkan debounce untuk sensor sentuh agar lebih stabil.
#include "main.h" void SystemClock_Config(void); static void MX_GPIO_Init(void); int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); while (1) { uint8_t ir_status = HAL_GPIO_ReadPin(GPIOB, IR_Pin); // Membaca IR sensor (PB10) uint8_t touch_status = HAL_GPIO_ReadPin(GPIOB, TOUCH_Pin); // Membaca Touch Sensor (PB6) // LED Biru menyala jika IR aktif HAL_GPIO_WritePin(BLUE_GPIO_Port, BLUE_Pin, ir_status); // LED Hijau menyala jika Touch aktif HAL_GPIO_WritePin(GPIOA, GREEN_Pin, touch_status); // LED Merah menyala jika tidak ada sensor yang aktif if (ir_status == GPIO_PIN_RESET && touch_status == GPIO_PIN_RESET) { HAL_GPIO_WritePin(GPIOA, RED_Pin, GPIO_PIN_SET); // Nyalakan LED RED } else { HAL_GPIO_WritePin(GPIOA, RED_Pin, GPIO_PIN_RESET); // Matikan LED RED } HAL_Delay(10); // Delay kecil untuk stabilisasi pembacaan sensor } } void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; RCC_OscInitStruct.HSIState = RCC_HSI_ON; RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { Error_Handler(); } RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK) { Error_Handler(); } } static void MX_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStruct = {0}; __HAL_RCC_GPIOD_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); // Konfigurasi output LED merah dan hijau HAL_GPIO_WritePin(GPIOA, RED_Pin | GREEN_Pin, GPIO_PIN_RESET); GPIO_InitStruct.Pin = RED_Pin | GREEN_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); // Konfigurasi output LED biru HAL_GPIO_WritePin(BLUE_GPIO_Port, BLUE_Pin, GPIO_PIN_RESET); GPIO_InitStruct.Pin = BLUE_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(BLUE_GPIO_Port, &GPIO_InitStruct); // Konfigurasi input untuk sensor IR dan sensor sentuh GPIO_InitStruct.Pin = IR_Pin | TOUCH_Pin; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); } void Error_Handler(void) { __disable_irq(); while (1) { // Looping error handler } } #ifdef USE_FULL_ASSERT void assert_failed(uint8_t *file, uint32_t line) { // Laporan kesalahan jika diperlukan } #endif /* USE_FULL_ASSERT */
Komentar
Posting Komentar