日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

基于物联网技术的智慧病房管理系统(三)——定时开关灯与信息获取

發布時間:2023/12/20 windows 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于物联网技术的智慧病房管理系统(三)——定时开关灯与信息获取 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

基于物聯網技術的智慧病房管理系統(三)—— 定時開關燈與信息獲取

這里我們主要實現能夠定時開關燈,并且能夠獲取如下信息:

  • 病人按下緊急呼叫信號

  • 定時獲取病人脈搏血氧數據

  • 定時開關燈

    這里要求我們能夠實現在早上 7 點開燈,晚上 22 點滅燈,所以我們就要設計 RTC 系統時間與日歷讀取,確定我們當前的時間與日期,然后判斷時間數,最終通過 PWM 實現燈的漸亮與漸滅

    這里首先我們需要配置 RTC:

    這里先設置兩個變量用于獲取時間和日期:

    RTC_DateTypeDef Date; RTC_TimeTypeDef Time;

    然后我們可以通過時間進行判斷從而實現開關燈的效果:

    void ledauto_task_entry(void *parameter){HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_2);while(1){HAL_RTC_GetTime(&hrtc,&Time,RTC_FORMAT_BIN);if(Time.Hours == 7&&Time.Minutes == 0&&Time.Seconds == 0){printf("開燈!");for(uint16_t i=1;i<500;i++){htim2.Instance->CCR2 = i;rt_thread_delay(5);}}else if(Time.Hours == 22&&Time.Minutes == 0&&Time.Seconds == 0){printf("關燈!");for(uint16_t i=499;i>=1;i--){htim2.Instance->CCR2 = i;rt_thread_delay(5);}}} }

    前面在博客中已經介紹了如何通過 RTC 讀取日歷和時間:

    STM32 —— RTC 時間讀取

    這里我們只需要照做就可以,但是,由于開發板掉電,時間會重置,所以這里設計時間掉電保存,如果使用外接 RTC 并有電池,則會在掉電后繼續計時,這里我設計將代碼直接寫道 RTC 初始化的函數中即可,完整初始化代碼如下:

    void MX_RTC_Init(void) {/* USER CODE BEGIN RTC_Init 0 *//* USER CODE END RTC_Init 0 */RTC_TimeTypeDef sTime = {0};RTC_DateTypeDef DateToUpdate = {0};/* USER CODE BEGIN RTC_Init 1 */__HAL_RCC_BKP_CLK_ENABLE();// 開啟后背區域時鐘__HAL_RCC_PWR_CLK_ENABLE();// 開啟電源時鐘/* USER CODE END RTC_Init 1 *//** Initialize RTC Only*/hrtc.Instance = RTC;hrtc.Init.AsynchPrediv = RTC_AUTO_1_SECOND;hrtc.Init.OutPut = RTC_OUTPUTSOURCE_NONE;if (HAL_RTC_Init(&hrtc) != HAL_OK){Error_Handler();}/* USER CODE BEGIN Check_RTC_BKUP */if(HAL_RTCEx_BKUPRead(&hrtc,RTC_BKP_DR1)!= 0x5051){/* USER CODE END Check_RTC_BKUP *//** Initialize RTC and set the Time and Date*/sTime.Hours = 0x7;sTime.Minutes = 0x0;sTime.Seconds = 0x0;if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BCD) != HAL_OK){Error_Handler();}DateToUpdate.WeekDay = RTC_WEEKDAY_THURSDAY;DateToUpdate.Month = RTC_MONTH_JANUARY;DateToUpdate.Date = 0x12;DateToUpdate.Year = 0x23;if (HAL_RTC_SetDate(&hrtc, &DateToUpdate, RTC_FORMAT_BCD) != HAL_OK){Error_Handler();}/* USER CODE BEGIN RTC_Init 2 */__HAL_RTC_SECOND_ENABLE_IT(&hrtc,RTC_IT_SEC); //開啟RTC時鐘秒中斷datebuff = DateToUpdate; //把日期數據拷貝到自己定義的data中HAL_RTCEx_BKUPWrite(&hrtc, RTC_BKP_DR1, 0x5051);//向指定的后備區域寄存器寫入數據HAL_RTCEx_BKUPWrite(&hrtc, RTC_BKP_DR2, (uint16_t)datebuff.Year);HAL_RTCEx_BKUPWrite(&hrtc, RTC_BKP_DR3, (uint16_t)datebuff.Month);HAL_RTCEx_BKUPWrite(&hrtc, RTC_BKP_DR4, (uint16_t)datebuff.Date);HAL_RTCEx_BKUPWrite(&hrtc, RTC_BKP_DR5, (uint16_t)datebuff.WeekDay);}else{datebuff.Year = HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DR2);datebuff.Month = HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DR3);datebuff.Date = HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DR4);datebuff.WeekDay = HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DR5);DateToUpdate = datebuff;if (HAL_RTC_SetDate(&hrtc, &DateToUpdate, RTC_FORMAT_BIN) != HAL_OK){Error_Handler();}__HAL_RTC_SECOND_ENABLE_IT(&hrtc,RTC_IT_SEC); //開啟RTC時鐘秒中斷 }getRealTime();/* USER CODE END RTC_Init 2 */}

    然后我們需要在運行時,實時獲取一次時間:

    void getRealTime(void) {HAL_RTC_GetTime(&hrtc, &time, RTC_FORMAT_BIN);HAL_RTC_GetDate(&hrtc, &datebuff, RTC_FORMAT_BIN);HAL_RTCEx_BKUPWrite(&hrtc, RTC_BKP_DR2, (uint16_t)datebuff.Year);HAL_RTCEx_BKUPWrite(&hrtc, RTC_BKP_DR3, (uint16_t)datebuff.Month);HAL_RTCEx_BKUPWrite(&hrtc, RTC_BKP_DR4, (uint16_t)datebuff.Date);HAL_RTCEx_BKUPWrite(&hrtc, RTC_BKP_DR5, (uint16_t)datebuff.WeekDay); }void HAL_RTCEx_RTCEventCallback(RTC_HandleTypeDef *hrtc) {if(hrtc->Instance == RTC){getRealTime(); } }

    這部分代碼要寫在初始化代碼前面

    這樣我們就實現了定時開關燈

    信息獲取

    這里的信息獲取多是通過串口進行發送信息,所以這里不會單獨進行介紹,需要的可以參考前面的串口發送數據的代碼:

    STM32 —— 串口通信1 Hello Windows

    總結

    以上是生活随笔為你收集整理的基于物联网技术的智慧病房管理系统(三)——定时开关灯与信息获取的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。