国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

FreeRTOS小項(xiàng)目實(shí)戰(zhàn)------基于FreeRTOS和stm32的門禁系統(tǒng)

這篇具有很好參考價(jià)值的文章主要介紹了FreeRTOS小項(xiàng)目實(shí)戰(zhàn)------基于FreeRTOS和stm32的門禁系統(tǒng)。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

目錄

收獲

系統(tǒng)總體框架

程序框架

具體程序?qū)崿F(xiàn)

工程文件網(wǎng)盤鏈接

收獲

學(xué)習(xí)freertos的移植與裁剪,對任務(wù)間通信的認(rèn)識更加深刻,加深了實(shí)時(shí)操作系統(tǒng)的理解,學(xué)習(xí)了as608指紋模塊,rc522刷卡模塊等模塊的簡單使用。

系統(tǒng)總體框架

該系統(tǒng)采用STM32F407ZGT6為主控芯片,在FreeRTOS下與分別通過as608指紋模塊,RFID射頻識別卡模塊,LCD觸屏模塊以及esp8266WIFI模塊完成解鎖,配合顯示模塊,舵機(jī),用蜂鳴器進(jìn)行提示共同組成整個(gè)門禁系統(tǒng),系統(tǒng)的整體框架圖如下所示

freertos項(xiàng)目,FreeRTOS,單片機(jī),stm32,嵌入式硬件

首先指紋模塊提前采取好需要識別的指紋到模塊內(nèi)置的芯片里面,將手指放到指紋識別模塊上,系統(tǒng)會(huì)檢測到指紋按下并且會(huì)采取當(dāng)前的指紋圖像與芯片內(nèi)部的指紋圖像進(jìn)行識別,若識別成功,蜂鳴器響兩下,并且LCD屏幕會(huì)顯示指紋識別成功,舵機(jī)會(huì)轉(zhuǎn)動(dòng)180°模擬解鎖成功,當(dāng)指紋識別到的圖像與模塊存儲(chǔ)的指紋識別不一致,則蜂鳴器會(huì)響3下,LCD屏幕會(huì)顯示指紋識別失敗,舵機(jī)不會(huì)轉(zhuǎn)動(dòng)。RFID射頻識別功能是當(dāng)使用者使用識別卡靠近RC522 RFID射頻模塊,此模塊會(huì)識別到當(dāng)前卡的卡號,若卡號與我寫入的卡號一致則解鎖成功,并且LCD屏幕會(huì)顯示識別卡成功,舵機(jī)會(huì)轉(zhuǎn)動(dòng)180°模擬解鎖成功;LCD觸屏密碼鎖的功能是當(dāng)使用者在屏幕輸入密碼,密碼正確則解鎖成功,并且LCD屏幕會(huì)顯示指紋識別成功,舵機(jī)會(huì)轉(zhuǎn)動(dòng)180°模擬解鎖成功。WIFI遠(yuǎn)程解鎖則是ESP8266模塊設(shè)置成AP+TCP服務(wù)器端,手機(jī)連接其熱點(diǎn)并且在TCP客戶端輸入正確ip地址和端口號,輸入正確的命令后解鎖成功。當(dāng)每一次解鎖失敗則會(huì)記錄下這一次解鎖失敗,當(dāng)累計(jì)3次后則舵機(jī)鎖死。

由基于FreeRTOS操作系統(tǒng)下創(chuàng)建了一個(gè)開始任務(wù)和四個(gè)控制任務(wù)。任務(wù)與任務(wù)之間使用事件標(biāo)志組進(jìn)行通信,當(dāng)TFTLCD屏幕觸屏輸入密碼的時(shí),當(dāng)密碼輸入正確,則向舵機(jī)任務(wù)發(fā)送一個(gè)事件標(biāo)志位;當(dāng)指紋識別成功時(shí),則向舵機(jī)任務(wù)發(fā)送一個(gè)事件標(biāo)志位;當(dāng)射頻識別卡識別成功卡號時(shí)候;則向舵機(jī)任務(wù)發(fā)送一個(gè)事件標(biāo)志位;當(dāng)藍(lán)牙從手機(jī)串口發(fā)生密碼時(shí),當(dāng)密碼識別成功,則向舵機(jī)任務(wù)發(fā)送一個(gè)事件標(biāo)志位。舵機(jī)任務(wù)只要接收到其中一個(gè)事件標(biāo)志位時(shí)候,舵機(jī)就會(huì)轉(zhuǎn)動(dòng)180°來模擬解鎖成功。當(dāng)如果每解鎖失敗一次之后,err全局變量加一,當(dāng)err等于3的時(shí)候,則舵機(jī)任務(wù)被掛起。

具體程序?qū)崿F(xiàn)

創(chuàng)建事件組

EventGroupHandle_t EventGroupHandler;	//事件標(biāo)志組句柄
#define EVENTBIT_0	(1<<0)				//事件位
#define EVENTBIT_1	(1<<1)
#define EVENTBIT_2	(1<<2)
#define EVENTBIT_ALL	(EVENTBIT_0|EVENTBIT_1|EVENTBIT_2)

開始任務(wù)函數(shù)

//開始任務(wù)任務(wù)函數(shù)
void start_task(void *pvParameters)
{
	BaseType_t xReturn;
    taskENTER_CRITICAL();           //進(jìn)入臨界區(qū)
	
	
	EventGroupHandler=xEventGroupCreate();
	if(NULL!=EventGroupHandler)
		printf("EventGroupHandler事件創(chuàng)建成功\r\n");
		
	xReturn=xTaskCreate((TaskFunction_t )SG90_task,             
                (const char*    )"SG90_task",           
                (uint16_t       )SG90_STK_SIZE,        
                (void*          )NULL,                  
                (UBaseType_t    )SG90_TASK_PRIO,        
                (TaskHandle_t*  )&SG90Task_Handler);  
	if(xReturn==pdPASS)
		printf("SG90_TASK_PRIO任務(wù)創(chuàng)建成功\r\n");
	
	
    
    xReturn=xTaskCreate((TaskFunction_t )LCD_task,             
                (const char*    )"LCD_task",           
                (uint16_t       )LCD_STK_SIZE,        
                (void*          )NULL,                  
                (UBaseType_t    )LCD_TASK_PRIO,        
                (TaskHandle_t*  )&LCDTask_Handler); 
   if(xReturn==pdPASS)
		 printf("LCD_TASK_PRIO任務(wù)創(chuàng)建成功\r\n");	

   xReturn=xTaskCreate((TaskFunction_t )RFID_task,             
                (const char*    )"RFID_task",           
                (uint16_t       )RFID_STK_SIZE,        
                (void*          )NULL,                  
                (UBaseType_t    )RFID_TASK_PRIO,        
                (TaskHandle_t*  )&RFIDTask_Handler); 
   if(xReturn==pdPASS)
		 printf("RFID_TASK_PRIO任務(wù)創(chuàng)建成功\r\n");

   xReturn=xTaskCreate((TaskFunction_t )AS608_task,             
                (const char*    )"AS608_task",           
                (uint16_t       )AS608_STK_SIZE,        
                (void*          )NULL,                  
                (UBaseType_t    )AS608_TASK_PRIO,        
                (TaskHandle_t*  )&AS608Task_Handler); 
   if(xReturn==pdPASS)
		 printf("AS608_TASK_PRIO任務(wù)創(chuàng)建成功\r\n");
	 
	  xReturn=xTaskCreate((TaskFunction_t )ESP8266_task,             
                (const char*    )"ESP8266_task",           
                (uint16_t       )ESP8266_STK_SIZE,        
                (void*          )NULL,                  
                (UBaseType_t    )ESP8266_TASK_PRIO,        
                (TaskHandle_t*  )&ESP8266Task_Handler); 
   if(xReturn==pdPASS)
		 printf("ESP8266_TASK_PRIO任務(wù)創(chuàng)建成功\r\n");
	 
	 
	 
    vTaskDelete(StartTask_Handler); //刪除開始任務(wù)
    taskEXIT_CRITICAL();            //退出臨界區(qū)
}

舵機(jī)任務(wù)(利用舵機(jī)模擬門鎖轉(zhuǎn)動(dòng))

void SG90_task(void * pvParameters)
{
	 volatile EventBits_t EventValue;	
	while(1)
	{
		
		
		   EventValue=xEventGroupWaitBits(EventGroupHandler,EVENTBIT_ALL,pdTRUE,pdFALSE,portMAX_DELAY);
		   
				  printf("接收事件成功\r\n");
		      set_Angle(180);
			    delay_xms(1000);
			    delay_xms(1000);
			    set_Angle(0);
			    LCD_ShowString(80,150,260,16,16,"              ");

			vTaskDelay(100); //延時(shí)10ms,也就是10個(gè)時(shí)鐘節(jié)拍
				
	}	
}

LCD觸摸屏輸入密碼任務(wù)

void LCD_task(void * pvParameters)
{
  
//	sg90flag=GET_NUM();
	
	while(1)
	{
		 
			  if(sg90flag==1||GET_NUM())
				{
					 BEEP=1;
					 delay_xms(100);
					 BEEP=0;
				   printf("密碼輸入正確\r\n");
					 LCD_ShowString(80,150,260,16,16,"password match");
		       xEventGroupSetBits(EventGroupHandler,EVENTBIT_0);
	 
				}
        else
				{
					 BEEP=1;
					 delay_xms(50);
					 BEEP=0;
					 delay_xms(50);
					 BEEP=1;
					 delay_xms(50);
					 BEEP=0;
					delay_xms(50);
					 BEEP=1;
					 delay_xms(50);
					 BEEP=0;
					printf("密碼輸入錯(cuò)誤\r\n");
					LCD_ShowString(80,150,260,16,16,"password error");
					err++;
					if(err==3)
					{
					  vTaskSuspend(SG90Task_Handler);
						printf("舵機(jī)任務(wù)掛起\r\n");
						LCD_ShowString(0,100,260,16,16,"Task has been suspended");
					}			
				}					
			vTaskDelay(100); //延時(shí)10ms,也就是10個(gè)時(shí)鐘節(jié)拍
	}	
}

rc522識別卡任務(wù)

void RFID_task(void * pvParameters)
{
	
//	 rfidflag=shibieka();
   while(1)
	 {
	    if(rfidflag==1||shibieka())
			{
				   BEEP=1;
					 delay_xms(100);
					 BEEP=0;
				 Chinese_Show_two(30,50,16,16,0);
	       Chinese_Show_two(50,50,18,16,0);
	       Chinese_Show_two(70,50,20,16,0);
	       Chinese_Show_two(90,50,8,16,0);
	       Chinese_Show_two(110,50,10,16,0);
	       
				xEventGroupSetBits(EventGroupHandler,EVENTBIT_1);
				printf("識別卡號成功\r\n");
				
			
			}
			else if(shibieka()==0)
			{
				BEEP=1;
					 delay_xms(50);
					 BEEP=0;
					 delay_xms(50);
					 BEEP=1;
					 delay_xms(50);
					 BEEP=0;
					delay_xms(50);
					 BEEP=1;
					 delay_xms(50);
					 BEEP=0;
				Chinese_Show_two(90,50,12,16,0);
	      Chinese_Show_two(110,50,14,16,0);
			  printf("識別卡號失敗\r\n");
				err++;
					if(err==3)
					{
					  vTaskSuspend(SG90Task_Handler);
						printf("舵機(jī)任務(wù)掛起\r\n");
						LCD_ShowString(0,100,260,16,16,"Task has been suspended");
					}
				
			
			}
			
	   vTaskDelay(100); //延時(shí)10ms,也就是10個(gè)時(shí)鐘節(jié)拍
	 }

}

as608指紋識別任務(wù)

void AS608_task(void *pvParameters)
{
  while(1)
	{
		if(PS_Sta)	 //檢測PS_Sta狀態(tài),如果有手指按下
		{
		   if(press_FR()==1)
			{
				 BEEP=1;
				 delay_xms(100);
				 BEEP=0;
				 Chinese_Show_two(30,25,0,16,0);
	       Chinese_Show_two(50,25,2,16,0);
	       Chinese_Show_two(70,25,4,16,0);
	       Chinese_Show_two(90,25,6,16,0);
	       Chinese_Show_two(110,25,8,16,0);
	       Chinese_Show_two(130,25,10,16,0);
				 xEventGroupSetBits(EventGroupHandler,EVENTBIT_2);
			   printf("指紋識別成功");
				 
				 
			
			}
			else if(press_FR()==0)
			{
				BEEP=1;
					 delay_xms(50);
					 BEEP=0;
					 delay_xms(50);
					 BEEP=1;
					 delay_xms(50);
					 BEEP=0;
					delay_xms(50);
					 BEEP=1;
					 delay_xms(50);
					 BEEP=0;
				Chinese_Show_two(110,25,12,16,0);
	      Chinese_Show_two(130,25,14,16,0);
			  printf("指紋識別失敗");
				err++;
					if(err==3)
					{
					  vTaskSuspend(SG90Task_Handler);
						printf("舵機(jī)任務(wù)掛起\r\n");
						LCD_ShowString(0,100,260,16,16,"Task has been suspended");
					}
			
			}
			     
		}
		vTaskDelay(100);
	}
}

esp8266任務(wù)

void ESP8266_task(void *pvParameters)
{

  while(1)
	{
	   if(USART3_RX_STA)
		{
			if(strstr((const char*)USART3_RX_BUF,"on"))
			{
				 BEEP=1;
				 delay_xms(100);
				 BEEP=0;
			   printf("開門成功\r\n");
				 xEventGroupSetBits(EventGroupHandler,EVENTBIT_0);
				 memset(USART3_RX_BUF,0,sizeof(USART3_RX_BUF));
			}				
				
			if(!strstr((const char*)USART3_RX_BUF,"on"))
			{
			  printf("密碼錯(cuò)誤\r\n");
				memset(USART3_RX_BUF,0,sizeof(USART3_RX_BUF));
			}				
	
			USART3_RX_STA=0;
//			continue;
		}
		vTaskDelay(100);	
	}
}

工程文件網(wǎng)盤鏈接

freertos項(xiàng)目,FreeRTOS,單片機(jī),stm32,嵌入式硬件

鏈接:https://pan.baidu.com/s/1d_hQY91rDy5VRq5E4HCYZg?
提取碼:dpfr文章來源地址http://www.zghlxwxcb.cn/news/detail-780769.html

到了這里,關(guān)于FreeRTOS小項(xiàng)目實(shí)戰(zhàn)------基于FreeRTOS和stm32的門禁系統(tǒng)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 基于STM32的多功能門禁系統(tǒng)(AS608指紋識別、密碼解鎖、刷卡解鎖)

    基于STM32的多功能門禁系統(tǒng)(AS608指紋識別、密碼解鎖、刷卡解鎖)

    目錄 一、項(xiàng)目功能 二、視頻 三、原理圖 4、材料選擇 5、部分程序 1、AS608指紋解鎖;可以錄入、刪除、驗(yàn)證指紋; 2、密碼解鎖;可以密碼驗(yàn)證、修改密碼和保存密碼; 3、刷卡解鎖; 4、OLED液晶顯示; 基于STM32的多功能門禁系統(tǒng)(AS608指紋識別、密碼解鎖、刷卡解鎖) AS608指紋

    2024年02月12日
    瀏覽(24)
  • stm32畢業(yè)設(shè)計(jì) 智能門禁系統(tǒng)

    stm32畢業(yè)設(shè)計(jì) 智能門禁系統(tǒng)

    Hi,大家好,今天向大家介紹一個(gè)學(xué)長做的單片機(jī)項(xiàng)目 基于單片機(jī)的門禁系統(tǒng) 大家可用于 課程設(shè)計(jì) 或 畢業(yè)設(shè)計(jì) 門禁系統(tǒng)的基本組成主要包括身份識別、傳感與報(bào)警、處理與控制、電鎖與執(zhí)行、管理與設(shè)置。 本系統(tǒng)從應(yīng)用角度出發(fā),針對家庭或小型辦公場所的使用需求,主

    2024年02月01日
    瀏覽(27)
  • RFID課程設(shè)計(jì)--基于STM32F103RCT6的智能門禁系統(tǒng),STM32RCT6+RC522+OLED+DHT11+4*4矩陣鍵盤

    RFID課程設(shè)計(jì)--基于STM32F103RCT6的智能門禁系統(tǒng),STM32RCT6+RC522+OLED+DHT11+4*4矩陣鍵盤

    ??本次課程設(shè)計(jì)要求如下,我們團(tuán)隊(duì)兩人完成了90%的功能。 ??其中我們設(shè)置的是刷卡錯(cuò)誤3次不報(bào)警,密碼輸入錯(cuò)3次報(bào)警(原理相同,大家根據(jù)需要自行修改) ??然后暫時(shí)只能顯示卡號和卡是第幾個(gè)錄入到系統(tǒng)中的,想到身份證號和電話(身份信息)輸進(jìn)去有點(diǎn)長就沒

    2024年01月16日
    瀏覽(114)
  • stm32畢設(shè) stm32 RFID員工打卡門禁系統(tǒng)(源碼+硬件+論文)

    stm32畢設(shè) stm32 RFID員工打卡門禁系統(tǒng)(源碼+硬件+論文)

    ?? 這兩年開始畢業(yè)設(shè)計(jì)和畢業(yè)答辯的要求和難度不斷提升,傳統(tǒng)的畢設(shè)題目缺少創(chuàng)新和亮點(diǎn),往往達(dá)不到畢業(yè)答辯的要求,這兩年不斷有學(xué)弟學(xué)妹告訴學(xué)長自己做的項(xiàng)目系統(tǒng)達(dá)不到老師的要求。 為了大家能夠順利以及最少的精力通過畢設(shè),學(xué)長分享優(yōu)質(zhì)畢業(yè)設(shè)計(jì)項(xiàng)目,今天

    2024年02月20日
    瀏覽(23)
  • 畢業(yè)設(shè)計(jì) stm32人臉識別門禁系統(tǒng)(源碼+硬件+論文)

    畢業(yè)設(shè)計(jì) stm32人臉識別門禁系統(tǒng)(源碼+硬件+論文)

    ?? 這兩年開始畢業(yè)設(shè)計(jì)和畢業(yè)答辯的要求和難度不斷提升,傳統(tǒng)的畢設(shè)題目缺少創(chuàng)新和亮點(diǎn),往往達(dá)不到畢業(yè)答辯的要求,這兩年不斷有學(xué)弟學(xué)妹告訴學(xué)長自己做的項(xiàng)目系統(tǒng)達(dá)不到老師的要求。 為了大家能夠順利以及最少的精力通過畢設(shè),學(xué)長分享優(yōu)質(zhì)畢業(yè)設(shè)計(jì)項(xiàng)目,今天

    2024年02月09日
    瀏覽(161)
  • STM32外設(shè)集 -- 人臉識別門禁系統(tǒng)(K210--HEX協(xié)議版本)

    STM32外設(shè)集 -- 人臉識別門禁系統(tǒng)(K210--HEX協(xié)議版本)

    人臉,指紋識別已經(jīng)走進(jìn)人們的生活,無疑這方便了人們的生活,也提高了安全和可靠性,所以作為未來的學(xué)習(xí)方向,我也來接觸接觸人臉識別(有不足之處請見諒??) 因?yàn)檫@款芯片有充足的開源資料足夠支撐我們學(xué)習(xí),并將文檔也很友好 相關(guān)資料連接 使用說明 (Github):

    2023年04月08日
    瀏覽(23)
  • 詳細(xì)!基于ESP32的智能門禁系統(tǒng)(華為云iot+微信小程序)

    詳細(xì)!基于ESP32的智能門禁系統(tǒng)(華為云iot+微信小程序)

    git地址:智能門禁(云IOT+微信小程序) 開關(guān)門效果 創(chuàng)建產(chǎn)品 創(chuàng)建產(chǎn)品 , 協(xié)議類型選擇MQTT,數(shù)據(jù)格式選擇JSON ,其他參數(shù)自定 設(shè)備注冊 找到所屬產(chǎn)品,認(rèn)證類型選擇密鑰,單擊確定后注冊成功 注冊成功后出現(xiàn)如下頁面,點(diǎn)擊保存并關(guān)閉,會(huì)自動(dòng)下載好\\\"device_id\\\"和\\\"secret\\\",保

    2023年04月26日
    瀏覽(21)
  • 【基于Arduino RFID門禁系統(tǒng)】

    【基于Arduino RFID門禁系統(tǒng)】

    介紹 射頻識別或RFID(Radio-Frequency Identification)是一種通過無線電信號進(jìn)行自動(dòng)識別,通過RFID標(biāo)簽檢索和存儲(chǔ)數(shù)據(jù)的方法。 這些 RFID 標(biāo)簽可以貼在動(dòng)物、物體上。因此,這些標(biāo)簽具有許多應(yīng)用,例如貼在車輛上的不停車標(biāo)簽、動(dòng)物識別。有 3 種類型的 RFID 標(biāo)簽:無源標(biāo)簽是對

    2024年02月12日
    瀏覽(26)
  • 基于樹莓派的人臉識別門禁系統(tǒng)

    基于樹莓派的人臉識別門禁系統(tǒng)

    1、概述:本次在樹莓派上安裝Opencv及其擴(kuò)展模塊,考慮到樹莓派的SD卡容量和內(nèi)存的限制,不采用直接pip安裝方法,而采用編譯Opencv源碼的方式進(jìn)行安裝。 2、遇到的問題及解決方法 遇到的問題 解決方法 缺少”cuda.hpp” 將/home/pi/opencv_contrib3.4.1/modules/xfeatures2d/include/opencv2下的

    2023年04月19日
    瀏覽(27)
  • 物聯(lián)網(wǎng)畢業(yè)設(shè)計(jì) 基于RFID的門禁系統(tǒng)

    物聯(lián)網(wǎng)畢業(yè)設(shè)計(jì) 基于RFID的門禁系統(tǒng)

    Hi,大家好,學(xué)長今天向大家介紹一個(gè) 如何使用RFID技術(shù)構(gòu)建一個(gè)單片機(jī)門禁系統(tǒng) 基于RFID的門禁系統(tǒng) 大家可用于 課程設(shè)計(jì) 或 畢業(yè)設(shè)計(jì) 選題指導(dǎo),項(xiàng)目分享: https://gitee.com/yaa-dc/warehouse-1/blob/master/iot/README.md 本篇博客,學(xué)長先向大家介紹射頻識別技術(shù)的概念、 分類及工作原。

    2024年02月08日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包