LAPORAN AKHIR
- STM32F103C8T6
|
#include
"main.h" #include
<string.h>
UART_HandleTypeDef
huart1;
//
Fungsi prototipe void
SystemClock_Config(void); void
MX_GPIO_Init(void); void
MX_USART1_UART_Init(void);
//
Fungsi kirim UART void
send_uart(char *text) { HAL_UART_Transmit(&huart1, (uint8_t
*)text, strlen(text), HAL_MAX_DELAY); }
int
main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_USART1_UART_Init();
while (1) { if (HAL_GPIO_ReadPin(GPIOB,
GPIO_PIN_12) == GPIO_PIN_RESET) { send_uart("MERAH\r\n"); HAL_Delay(300); while (HAL_GPIO_ReadPin(GPIOB,
GPIO_PIN_12) == GPIO_PIN_RESET); } else if (HAL_GPIO_ReadPin(GPIOB,
GPIO_PIN_13) == GPIO_PIN_RESET) { send_uart("HIJAU\r\n"); HAL_Delay(300); while (HAL_GPIO_ReadPin(GPIOB,
GPIO_PIN_13) == GPIO_PIN_RESET); } else if (HAL_GPIO_ReadPin(GPIOB,
GPIO_PIN_14) == GPIO_PIN_RESET) { send_uart("BIRU\r\n"); HAL_Delay(300); while (HAL_GPIO_ReadPin(GPIOB,
GPIO_PIN_14) == GPIO_PIN_RESET); } } }
//
Konfigurasi clock standar STM32F1 void
SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct =
{0}; RCC_ClkInitTypeDef RCC_ClkInitStruct =
{0};
HAL_RCC_AFIO_CLK_ENABLE(); HAL_RCC_PWR_CLK_ENABLE(); HAL_AFIO_REMAP_SWJ_NOJTAG(); // Bebaskan
PB3-PB4
RCC_OscInitStruct.OscillatorType =
RCC_OSCILLATORTYPE_HSE; RCC_OscInitStruct.HSEState = RCC_HSE_ON; RCC_OscInitStruct.HSEPredivValue =
RCC_HSE_PREDIV_DIV1; RCC_OscInitStruct.HSIState = RCC_HSI_ON; RCC_OscInitStruct.PLL.PLLState =
RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource =
RCC_PLLSOURCE_HSE; RCC_OscInitStruct.PLL.PLLMUL =
RCC_PLL_MUL9;
HAL_RCC_OscConfig(&RCC_OscInitStruct);
RCC_ClkInitStruct.ClockType =
RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK |
RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource =
RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider =
RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider =
RCC_HCLK_DIV2; RCC_ClkInitStruct.APB2CLKDivider =
RCC_HCLK_DIV1;
HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2); }
// Inisialisasi UART1 (TX: PA9, RX: PA10) void
MX_USART1_UART_Init(void) { huart1.Instance = USART1; huart1.Init.BaudRate = 9600; huart1.Init.WordLength =
UART_WORDLENGTH_8B; huart1.Init.StopBits = UART_STOPBITS_1; huart1.Init.Parity = UART_PARITY_NONE; huart1.Init.Mode = UART_MODE_TX_RX; huart1.Init.HwFlowCtl =
UART_HWCONTROL_NONE; huart1.Init.OverSampling =
UART_OVERSAMPLING_16; HAL_UART_Init(&huart1); }
//
Inisialisasi GPIO PB12, PB13, PB14 sebagai input pull-up void
MX_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStruct = {0};
HAL_RCC_GPIOA_CLK_ENABLE(); HAL_RCC_GPIOB_CLK_ENABLE();
// Konfigurasi input tombol dengan
Pull-Up GPIO_InitStruct.Pin = GPIO_PIN_12 |
GPIO_PIN_13 | GPIO_PIN_14; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_PULLUP; HAL_GPIO_Init(GPIOB,
&GPIO_InitStruct); } |
- Raspberry Pi Pico
|
from machine import I2C, Pin, UART import utime from i2c_lcd import I2cLcd
# Inisialisasi UART uart = UART(0, baudrate=9600, tx=Pin(0), rx=Pin(1))
# Inisialisasi LCD I2C i2c = I2C(0, scl=Pin(5), sda=Pin(4), freq=400000) I2C_ADDR = 0x27
# Ganti dengan alamat I2C LCD Anda I2C_NUM_ROWS = 2 I2C_NUM_COLS = 16 lcd = I2cLcd(i2c, I2C_ADDR, I2C_NUM_ROWS, I2C_NUM_COLS)
# Tunggu LCD siap utime.sleep_ms(100) lcd.clear() lcd.putstr("Menunggu input...")
# Fungsi untuk memproses data dari UART def process_uart_data(data): try: decoded =
data.decode('utf-8').strip()
lcd.clear() if
decoded == "MERAH":
lcd.putstr("Warna: Merah") elif
decoded == "HIJAU":
lcd.putstr("Warna: Hijau") elif
decoded == "BIRU":
lcd.putstr("Warna: Biru") else:
lcd.putstr(f"Data: {decoded}") except
Exception as e:
lcd.clear()
lcd.putstr("Error:")
lcd.putstr(str(e)[:16]) #
Potong agar sesuai 16 karakter
# Loop utama while True: if
uart.any(): data =
uart.readline() if data:
process_uart_data(data)
utime.sleep_ms(100)
|
File HTML [disini]
Video [disini]
Datasheet STM32F103C8T6 [disini]
Datasheet LCD I2C 16X2 [disini]








Komentar
Posting Komentar