Laporan Akhir 2


Percobaan 1 Kondisi 1
Led & Switch

1. Prosedur [Kembali]

  • Rangkai semua komponen 
  • Buat program di STM32
  • Jalankan program 

Hardware :

  • STM32



  • Push button





  • LED RGB



  • Resistor



Diagram Blok



  • Rangkaian
  • Prinsip Kerja

Rangkaian STM32 ini bekerja dengan membaca input dari tombol dan sensor inframerah untuk mengontrol LED RGB dan buzzer. Saat pertama kali dijalankan, sistem melakukan inisialisasi dengan mengaktifkan HAL (HAL_Init()), mengatur sumber clock menggunakan HSI melalui SystemClock_Config(), dan menginisialisasi pin GPIO melalui MX_GPIO_Init(). Dalam konfigurasi ini, tombol yang terhubung ke pin PB10 dan sensor inframerah yang terhubung ke pin PB7 dikonfigurasi sebagai input tanpa pull-up atau pull-down. Sementara itu, LED RGB dikonfigurasi sebagai output, di mana LED merah terhubung ke PA6, LED hijau ke PA7, dan LED biru ke PB0.

Setelah proses inisialisasi selesai, sistem masuk ke dalam loop utama yang berjalan terus-menerus. Dalam loop ini, status tombol dan sensor inframerah dibaca menggunakan HAL_GPIO_ReadPin(). Secara default, semua LED dan buzzer dimatikan di awal setiap iterasi loop. Jika sensor inframerah (PB7) mendeteksi objek, maka LED hijau (PA7) akan menyala, dan buzzer juga akan aktif sebagai tanda adanya deteksi. Jika tombol (PB10) ditekan, maka LED merah (PA6) akan menyala, bersamaan dengan buzzer sebagai indikator bahwa tombol telah ditekan. Jika tombol ditekan bersamaan dengan sensor inframerah mendeteksi objek, maka LED merah (PA6), LED hijau (PA7), dan buzzer akan menyala secara bersamaan, sedangkan LED biru (PB0) tetap mati karena tidak digunakan dalam kondisi ini. Untuk mencegah perubahan status yang terlalu cepat akibat bouncing tombol atau gangguan sensor, program memberikan delay sebesar 100 milidetik di setiap iterasi loop.

  • Flowchart
  • Listing Program
#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 button_status = HAL_GPIO_ReadPin(GPIOB, BUTTON_Pin);
uint8_t ir_status = HAL_GPIO_ReadPin(GPIOB, IR_Pin);
HAL_GPIO_WritePin(GPIOA, GREEN_Pin | RED_Pin | BUZZER_Pin,
GPIO_PIN_RESET);
if (button_status == GPIO_PIN_SET)
{
HAL_GPIO_WritePin(GPIOA, RED_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA, BUZZER_Pin, GPIO_PIN_SET);
}
if (ir_status == GPIO_PIN_SET)
{
HAL_GPIO_WritePin(GPIOA, GREEN_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA, BUZZER_Pin, GPIO_PIN_SET);
}
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(BLUE_GPIO_Port, BLUE_Pin, GPIO_PIN_RESET);
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);
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 = BUTTON_Pin|IR_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

5. Video Demo [Kembali]


6. Analisa [Kembali]



HTML [Download]
Rangkaian [Download
Video Simulasi [Download 
Listring Program [Download 


Tidak ada komentar:

Posting Komentar

   BAHAN PRESENTASI UNTUK MATA KULIAH  ELEKTRONIKA 2023 Nama : Hadi Andhika Jafta NIM : 2210951009 Dosen Pengampu : Dr. Darwison, MT...