PERCOBAAN 8 KONDISI 1
2. Buat program untuk mikrokontroler STM32F103C8 di software STM32 CubeIDE.
3. Compile program dalam format hex, lalu upload ke dalam mikrokontroler.
4. Setelah program selesai di upload, jalankan simulasi rangkaian pada proteus.
Ketika konfigurasinya telah selesai, save project dan kemudian akan ditampilkan halaman pemrograman. Disini sudah langsung tersedia beberapa program karena konfigurasi yang telah dilakukan sebelumnya. Untuk pemrogramannya dimulai dari #include “main.h” yang merupakan fungsi utamanya. Yang perlu ditambahkan disini adalah codingan pada bagian loopnya, yang terletak di dalam kurung kurawal pada bagian while. Program ini menggunakan fungsi If Else, dimana jika sensor infrared tidak mendeteksi adanya objek dan sensor touch mendeteksi sentuhan, maka output yang dibaca mikrokontroler adalah menghidupkan lampu hijau dan biru pada RGB LED, sedangkan lampu berwarna merah dalam kondisi mati atau reset. Untuk kondisi selain itu, perintah yang dibaca mikrokontroler adalah menjadikan seluruh warna RGB LED dalam kondisi reset atau mati.
#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 pir_status = HAL_GPIO_ReadPin(GPIOB, PIR_Pin); uint8_t touch_status = HAL_GPIO_ReadPin(GPIOB, TOUCH_Pin); // Matikan semua LED dan buzzer terlebih dahulu HAL_GPIO_WritePin(GPIOA, RED_Pin | GREEN_Pin | BUZZER_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOB, BLUE_Pin, GPIO_PIN_RESET); if (pir_status == GPIO_PIN_SET && touch_status == GPIO_PIN_RESET) { HAL_GPIO_WritePin(GPIOA, RED_Pin, GPIO_PIN_SET); // LED merah menyala HAL_GPIO_WritePin(GPIOA, BUZZER_Pin, GPIO_PIN_RESET); // Buzzer mati } else if (touch_status == GPIO_PIN_SET && pir_status == GPIO_PIN_RESET) { HAL_GPIO_WritePin(GPIOB, BLUE_Pin, GPIO_PIN_SET); // LED biru menyala HAL_GPIO_WritePin(GPIOA, BUZZER_Pin, GPIO_PIN_SET); // Buzzer aktif } else if (pir_status == GPIO_PIN_SET && touch_status == GPIO_PIN_SET) { HAL_GPIO_WritePin(GPIOA, RED_Pin, GPIO_PIN_SET); // LED merah menyala HAL_GPIO_WritePin(GPIOB, BLUE_Pin, GPIO_PIN_SET); // LED biru menyala HAL_GPIO_WritePin(GPIOA, BUZZER_Pin, GPIO_PIN_SET); // Buzzer aktif } HAL_Delay(100); } } 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(); HAL_GPIO_WritePin(GPIOA, RED_Pin | GREEN_Pin | BUZZER_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOB, BLUE_Pin, GPIO_PIN_RESET); // Konfigurasi output untuk LED merah, hijau, dan buzzer di GPIOA GPIO_InitStruct.Pin = RED_Pin | GREEN_Pin | BUZZER_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 untuk LED biru di GPIOB 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(GPIOB, &GPIO_InitStruct); // Konfigurasi input untuk sensor PIR dan touch di GPIOB GPIO_InitStruct.Pin = PIR_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) { } } #ifdef USE_FULL_ASSERT void assert_failed(uint8_t *file, uint32_t line) { } #endif
Komentar
Posting Komentar