TP2 M1 uP uC
4. RGB-LED
5. Infrared Sensor
6. Touch Sensor
Prinsip kerja sistem ini diawali dengan penerimaan sinyal digital dari sensor yang mendeteksi perubahan di lingkungan sekitar. Sensor infrared akan memberikan sinyal HIGH (1) ketika mendeteksi keberadaan objek di depannya, sedangkan sensor touch akan mengeluarkan sinyal HIGH saat disentuh. Sinyal digital dari kedua sensor ini diterima oleh pin GPIO pada STM32, yang telah dikonfigurasi dalam mode input. Program kemudian membaca status sensor menggunakan fungsi HAL_GPIO_ReadPin(), yang akan mengembalikan GPIO_PIN_SET jika sensor aktif dan GPIO_PIN_RESET jika tidak aktif.
Berdasarkan hasil pembacaan tersebut, STM32 mengontrol output pada pin LED RGB. Dengan memanfaatkan fungsi HAL_GPIO_WritePin(), mikrokontroler dapat menyalakan atau mematikan warna LED sesuai dengan kondisi sensor. Proses ini berjalan secara cepat dan terus-menerus dalam loop while(1), sehingga sistem mampu merespons perubahan sensor secara real-time serta menyesuaikan tampilan LED dengan kondisi terbaru.
Logika warna LED ditentukan sebagai berikut:
- Jika sensor infrared bernilai HIGH dan sensor touch bernilai LOW, LED akan menyala dengan warna biru.
- Jika sensor infrared bernilai LOW dan sensor touch bernilai HIGH, LED akan menyala dengan warna hijau.
- Jika kedua sensor bernilai LOW, LED akan berwarna merah.
- Jika kedua sensor bernilai HIGH, LED akan menyala dengan warna putih.
#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);uint8_t touch_status = HAL_GPIO_ReadPin(GPIOB, TOUCH_Pin);if (ir_status == GPIO_PIN_SET && touch_status == GPIO_PIN_SET) {HAL_GPIO_WritePin(GPIOA, RED_Pin, GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOA, GREEN_Pin, GPIO_PIN_SET);HAL_GPIO_WritePin(BLUE_GPIO_Port, BLUE_Pin, GPIO_PIN_SET);} else {HAL_GPIO_WritePin(BLUE_GPIO_Port, BLUE_Pin, ir_status);HAL_GPIO_WritePin(GPIOA, GREEN_Pin, touch_status);if (ir_status == GPIO_PIN_RESET && touch_status == GPIO_PIN_RESET) {HAL_GPIO_WritePin(GPIOA, RED_Pin, GPIO_PIN_SET);} else {HAL_GPIO_WritePin(GPIOA, RED_Pin, GPIO_PIN_RESET);}}HAL_Delay(10);}}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, GPIO_PIN_RESET);HAL_GPIO_WritePin(BLUE_GPIO_Port, BLUE_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);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);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) {}}#ifdef USE_FULL_ASSERTvoid assert_failed(uint8_t *file, uint32_t line) {}#endif
Buatlah Rangkaian seperti gambar percobaan 2 dengan kondisi ketika sensor Infrared mendeteksi gerakan dan sensor touch mendeteksi sentuhan maka LED RGB akan menampilkan warna Putih.
Komentar
Posting Komentar