9 Ekim 2017 Pazartesi

STM32 İLE HTU21D HABERLEŞMESİ

STM32 İLE HTU21D HABERLEŞMESİ


HTU21D, sıcaklık ve nem ölçen bir çeşit dijital elektronik sensördür.  Bu sensör, -40 ile 125 sıcaklık derecesi arasında çalışmaktadır.  

Sıcaklık ve Nem değerleri I2C haberleşme protoklü kullanarak stm32f429 entegresi HTU21'den alır. Ve daha sonra sıcaklık ve nem sensörü stm32f429 discovery kiti üzerindeki dokunmatik GLCD'de yazdırılır.
  



STM32 İLE BAĞLANTI PİNLERİ

HTU21D----->STM32
SCL                PA8
SDA               PC9
VCC               VCC
GND               GND


KOD:

#include "htu21d.h"

#define __OKUMA_ZAMANI_MS 250//ms cinsinden

int main(void)
{

  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration----------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_UART5_Init();
  MX_DMA2D_Init();
  MX_FMC_Init();
  MX_I2C3_Init();
  MX_LTDC_Init();
  MX_SPI5_Init();

  /* USER CODE BEGIN 2 */
 BSP_LCD_Init();
 BSP_LCD_LayerDefaultInit(LCD_BACKGROUND_LAYER,LCD_FRAME_BUFFER);
 BSP_LCD_LayerDefaultInit(LCD_FOREGROUND_LAYER,LCD_FRAME_BUFFER);
 BSP_LCD_SelectLayer(LCD_FOREGROUND_LAYER);
 BSP_LCD_DisplayOn();
 BSP_LCD_Clear(LCD_COLOR_WHITE);

  /* Set LCD Demo description */
  BSP_LCD_SetTextColor(LCD_COLOR_RED);
  BSP_LCD_FillRect(0, 0, BSP_LCD_GetXSize(), 80);
  BSP_LCD_SetTextColor(LCD_COLOR_WHITE);
  BSP_LCD_SetBackColor(LCD_COLOR_RED);
  BSP_LCD_SetFont(&Font24);
  BSP_LCD_DisplayStringAt(0, 0, (uint8_t *)"HTU21D", CENTER_MODE);
  BSP_LCD_SetFont(&Font12);
  BSP_LCD_DisplayStringAt(0, 30, (uint8_t *)"Bu projede HTU21D sensorunden", CENTER_MODE);
  BSP_LCD_DisplayStringAt(0, 45, (uint8_t *)"sicaklik ve nem bilgisi", CENTER_MODE);
  BSP_LCD_DisplayStringAt(0, 60, (uint8_t *)"okunarak GLCD yazdirilmistir", CENTER_MODE);

  /* Set the LCD Text Color */
  BSP_LCD_SetTextColor(LCD_COLOR_BLUE);
  BSP_LCD_DrawRect(10, 90, BSP_LCD_GetXSize() - 20, BSP_LCD_GetYSize()- 100);
  BSP_LCD_DrawRect(11, 91, BSP_LCD_GetXSize() - 22, BSP_LCD_GetYSize()- 102);
if(!HTU_begin())
{
HAL_GPIO_WritePin(LD3_GPIO_Port,LD3_Pin,1);
}
BSP_LCD_SetFont(&Font24);
BSP_LCD_SetTextColor(LCD_COLOR_RED);
BSP_LCD_SetBackColor(LCD_COLOR_WHITE);
  BSP_LCD_DisplayStringAt(0, 120, (uint8_t *)"SICAKLIK", CENTER_MODE);
BSP_LCD_DisplayStringAt(0, 200, (uint8_t *)"NEM", CENTER_MODE);
TIME=HAL_GetTick();

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
  /* USER CODE END WHILE */
if(HAL_GetTick()-TIME>__OKUMA_ZAMANI_MS)
{
//her 1 sn içersinde buraya gir ve htu21'den sicaklik ve nem oku.
//okunan sicaklik ve nem degerini dokunmatik ekrana yazdir.
BSP_LCD_SetTextColor(LCD_COLOR_BLACK);
BSP_LCD_SetBackColor(LCD_COLOR_WHITE);
float humd = HTU_readHumidity();
float temp = HTU_readTemperature();
char kelime[15];
sprintf(kelime,"%.3f C",temp);
BSP_LCD_DisplayStringAt(0, 160, (uint8_t *)kelime, CENTER_MODE);
sprintf(kelime,"%% %.3f RH",humd);
BSP_LCD_DisplayStringAt(0, 240, (uint8_t *)kelime, CENTER_MODE);
TIME=HAL_GetTick();
}

  /* USER CODE BEGIN 3 */

  }
  /* USER CODE END 3 */

}

Kodun tamamı için irtibata geçiniz. Çalışan bir projedir. 



1 yorum:

  1. Merhaba müsaitseniz mail adresimden iletişime geçebilirmisiniz. yardımınıza ihtiyacım var. bhdrkrt35@gmail.com

    YanıtlaSil