#include "stm32l0xx_hal.h"
#include <stdio.h>
#include <string.h>
/* Nesne Yapilari */
ADC_HandleTypeDef hadc1;
UART_HandleTypeDef huart2;
/* Degiskenler */
uint32_t sensor_value = 0;
char status_msg[20];
/* Fonksiyonlar */
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_ADC_Init(void);
static void MX_USART2_UART_Init(void);
/* printf'in terminale cikmasi icin mecburi */
int _write(int file, char *ptr, int len) {
HAL_UART_Transmit(&huart2, (uint8_t*)ptr, len, HAL_MAX_DELAY);
return len;
}
int main(void) {
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_ADC_Init();
MX_USART2_UART_Init();
// Baslangic testi: LED'i 1 saniye yak söndür
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
HAL_Delay(1000);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
while (1) {
/* 1. Sensor Oku */
HAL_ADC_Start(&hadc1);
if (HAL_ADC_PollForConversion(&hadc1, 10) == HAL_OK) {
sensor_value = HAL_ADC_GetValue(&hadc1);
}
HAL_ADC_Stop(&hadc1);
/* 2. Mantik Kontrolu */
if (sensor_value < 1000) {
strcpy(status_msg, "NORMAL");
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET); // LED SONUK
}
else {
strcpy(status_msg, "TEHLIKE");
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET); // LED YANIK
}
/* 3. Terminale Yaz */
printf("ADC: %lu | Durum: %s \r\n", sensor_value, status_msg);
HAL_Delay(200);
}
}
/* --- AYARLAR (Wokwi Nucleo L031K6 Icin) --- */
static void MX_ADC_Init(void) {
ADC_ChannelConfTypeDef sConfig = {0};
hadc1.Instance = ADC1;
hadc1.Init.Resolution = ADC_RESOLUTION_12B;
HAL_ADC_Init(&hadc1);
sConfig.Channel = ADC_CHANNEL_0; // A0 Pin
sConfig.Rank = ADC_RANK_CHANNEL_NUMBER;
HAL_ADC_ConfigChannel(&hadc1, &sConfig);
}
static void MX_USART2_UART_Init(void) {
huart2.Instance = USART2;
huart2.Init.BaudRate = 115200;
huart2.Init.WordLength = UART_WORDLENGTH_8B;
huart2.Init.StopBits = UART_STOPBITS_1;
huart2.Init.Parity = UART_PARITY_NONE;
huart2.Init.Mode = UART_MODE_TX_RX;
HAL_UART_Init(&huart2);
}
static void MX_GPIO_Init(void) {
GPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIOA_CLK_ENABLE();
// D13 Pini STM32'de PA5'e denk gelir
GPIO_InitStruct.Pin = GPIO_PIN_5;
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);
}
void SystemClock_Config(void) {}