首页 > 其他分享 >老人进出门提醒

老人进出门提醒

时间:2023-03-03 14:14:50浏览次数:38  
标签:提醒 status 出门 else delay flag ms printf 老人

点击查看代码
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "RC522.h"
#include "string.h"
#include "usart2.h"
#include "key.h"

unsigned char g_ucTempbuf[20];
unsigned char DefaultKey[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; 
u8 ddata1[16] = {0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x00};//1234567 
u8 ddata2[16] = {0x32, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x00};//2234567 
u8 ddata3[16] = {0x33, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x00};

extern u8 RC522_mode;
extern u8 Alarm_flag;          //报警键标志位
extern u8 Change_flag;         //模式切换标志位

void FindCard()
{
	 u8 status;
	 status = PcdRequest(PICC_REQALL, g_ucTempbuf);//寻卡
	 if (status != MI_OK)	
	 {
		 PcdReset();
		 PcdAntennaOff(); 
		 PcdAntennaOn(); 
		return;
	 }
	 status = PcdAnticoll(g_ucTempbuf);//防冲撞,序列号从这出 取出id
	 if (status != MI_OK)
	 {
		 printf("error 1\r\n");
		 return;    
	 }
	 else
	 {
		 printf("ok1\r\n");
		 printf("%s\r\n",g_ucTempbuf);
	 }

	 status = PcdSelect(g_ucTempbuf);//选定卡片
	 if (status != MI_OK)
	 {    printf("error2\r\n");return;    }
	 else
	 {
		 printf("ok2\r\n");
	 }
	 
	 status = PcdAuthState(PICC_AUTHENT1A, 1, DefaultKey, g_ucTempbuf);//验证卡片密码
	 if (status != MI_OK)
	 {    printf("error3\r\n");return;    }
	 else
	 {
		 printf("ok3\r\n");
	 }
}

int main(void)
{ 
	u8 i;
	u8 NFC=0,NFC1=0,NFC2=0;   //三个RC522是否接触贴纸标志位  0:没有接触,1:有接触
	u8 NFC_flag=0,NFC1_flag=0,NFC2_flag=0;
	u8 Door_flag=0;           //门状态    0:关门,1:开门
	u8 Mode=1;                //当前模式    0:进门模式,1:出门模式
	u8 status;                //临时储存NFC寻卡反馈
	u8 OUT=0;                 //出门锁
	u8 IN=0;                  //进门锁
	
	delay_init();	    //延时函数初始化	  
	LED_Init();		  	//初始化与LED连接的硬件接口
	KEY_Init();
	uart_init(115200);
	usart2_init(9600);
	
	RC522_Init();
	PcdReset();
 	PcdAntennaOff(); 
	delay_ms(10);
 	PcdAntennaOn();
	delay_ms(10);
	 
	PcdReset1();
 	PcdAntennaOff(); 
	delay_ms(10);
 	PcdAntennaOn();
	delay_ms(10); 

	PcdReset2();
 	PcdAntennaOff(); 
	delay_ms(10);
 	PcdAntennaOn();
	delay_ms(10); 
    
	LED2=1;		//出门灯亮
	
while(1)
{	
/*按键操作*/	
	KEY_Scan(0);
	
/*射频串口接收*/	
	if(USART2_RX_STA&0x8000)//+MQTTSUBRECV:0,"2221078",23,1234#数学,《作业》P5、P6
	{	
		if(USART2_RX_BUF[0]=='o')           //射频模块接收到"open",开门
		{
			Door_flag=1;
			//printf("open\r\n");
		}
		else if(USART2_RX_BUF[0]=='c')    	//射频模块接收到"close",关门
		{
			Door_flag=0;
			//printf("close\r\n");
		}
		memset(USART2_RX_BUF,0,200*sizeof(char));
		USART2_RX_STA=0;
	}

/*判断NFC接触情况*/
	RC522_mode=0;
	status = PcdRequest(PICC_REQALL, g_ucTempbuf);//寻卡
	if (status != MI_OK)	
	{
//		PcdReset();
//		PcdAntennaOff(); 
//		delay_ms(10);
//		PcdAntennaOn(); 
//		delay_ms(10);
		//NFC=0;
		//printf("NO NFC0\r\n");
		if(NFC_flag!=1)
		{
			NFC=0;
		}
		else
		{
			NFC_flag=0;
		}
	}
	else
	{
		NFC=1;
		NFC_flag=1;
		//printf("NFC0\r\n");
	}
	 
	RC522_mode=1;
	status = PcdRequest(PICC_REQALL, g_ucTempbuf);//寻卡
	if (status != MI_OK)	
	{
//		PcdReset1();
//		PcdAntennaOff(); 
//		delay_ms(10);
//		PcdAntennaOn(); 
//		delay_ms(10);
		//NFC1=0;
		//printf("NO NFC1\r\n");
		if(NFC1_flag!=1)
		{
			NFC1=0;
		}
		else
		{
			NFC1_flag=0;
		}
	}
	else
	{
		NFC1=1;
		NFC1_flag=1;
		//printf("NFC1\r\n");
	}
	
	RC522_mode=2;
	status = PcdRequest(PICC_REQALL, g_ucTempbuf);//寻卡
	if (status != MI_OK)	
	{
//		PcdReset2();
//		PcdAntennaOff(); 
//		delay_ms(10);
//		PcdAntennaOn(); 
//		delay_ms(10);
		//NFC2=0;
		//printf("NO NFC2\r\n");
		if(NFC2_flag!=1)
		{
			NFC2=0;
		}
		else
		{
			NFC2_flag=0;
		}
	}
	else
	{
		NFC2=1;
		NFC2_flag=1;
		//printf("NFC2\r\n");
	}

/*门操作*/	
	if((Door_flag==1)&&(Mode==1)&&(Alarm_flag==0))	//门开 & 出门模式 & 未按接触报警键
	{
		if((NFC==1)||(NFC1==1)||(NFC2==1))          //任意一个物品还在
		{
			PLAY1=1;
			PLAY3=1;
			PLAY2=0;        //播放"请拿走物品"
			
			LED1=!LED1;		//警示灯闪烁
		}
		else
		{
			PLAY2=1;
			PLAY3=1;
			PLAY1=0;    //播放"请关门"
			
			LED1=0;		//警示灯灭
			OUT=1;      //该步操作完成
		}
	}
	else if((Door_flag==0)&&(Mode==1)&&(OUT==1))	//门闭 & 出门模式 & 物品拿完
	{
		PLAY1=1;
		PLAY2=1;
		PLAY3=1;
		STOP=0;		//语音停止
		delay_ms(100);
		STOP=1;
		
		LED2=0;		//出门灯灭
		LED3=1;		//进门灯亮
		OUT=0;
		Mode=0;
	}
	else if((Door_flag==1)&&(Mode==0)&&(Alarm_flag==0))		//门开 & 进门模式 & 未按接触报警键
	{
		if((NFC==0)||(NFC1==0)||(NFC2==0))          //任意一个物品没放入
		{
			PLAY1=1;
			PLAY2=1;        
			PLAY3=0;        //播放"请放入物品"
			
			LED1=!LED1;		//警示灯闪烁
			printf("进门 放入物品\r\n");
		}
		else
		{
			PLAY2=1;
			PLAY3=1;
			PLAY1=0;    //播放"请关门"
			
			LED1=0;		//警示灯灭
			IN=1;      //该步操作完成
		}
	}
	else if((Door_flag==0)&&(Mode==0)&&(IN==1))		//门开 & 进门模式 & 物品放完
	{
		PLAY1=1;
		PLAY2=1;
		PLAY3=1;
		STOP=0;		//语音停止
		delay_ms(100);
		STOP=1;
		
		LED2=1;		//出门灯灭
		LED3=0;		//进门灯亮
		IN=0;
		Mode=1;
	}
	else if((Door_flag==1)&&(Alarm_flag==1))		//其他人在进门模式或出门模式,门开
	{
		PLAY2=1;
		PLAY3=1;
		PLAY1=0;    //播放"请关门"
		
		LED1=0;		//警示灯灭
	}
	else if((Door_flag==0)&&(Alarm_flag==1))		//其他人在进门模式或出门模式,进门后,门关
	{
		PLAY1=1;
		PLAY2=1;
		PLAY3=1;
		STOP=0;		//语音停止
		delay_ms(100);
		STOP=1;
		
		Alarm_flag=0;
	}
	else if((Door_flag==0)&&(Change_flag==1))		//门关 & 模式切换键按下,出门改进门
	{
		if((NFC==1)||(NFC1==1)||(NFC2==1))          //任意一个物品还在
		{
			PLAY1=1;
			PLAY3=1;
			PLAY2=0;        //播放"请拿走物品"
			
			LED1=!LED1;		//警示灯闪烁
			
			NFC=0;
			NFC1=0;
			NFC2=0;
		}
		else
		{
			PLAY1=1;
			PLAY2=1;
			PLAY3=1;
			STOP=0;		//语音停止
			delay_ms(100);
			STOP=1;

			LED1=0;		//警示灯灭
			LED2=0;		//出门灯灭
			LED3=1;     //进门灯亮
		}
	}
	else if((Door_flag==0)&&(Change_flag==2))		//门关 & 模式切换键按下,进门改出门
	{
		if((NFC==0)||(NFC1==0)||(NFC2==0))          //任意一个物品没放入
		{
			PLAY1=1;
			PLAY2=1;        
			PLAY3=0;        //播放"请放入物品"
			
			LED1=!LED1;		//警示灯闪烁
		}
		else
		{
			PLAY1=1;
			PLAY2=1;
			PLAY3=1;
			STOP=0;		//语音停止
			delay_ms(100);
			STOP=1;

			LED1=0;		//警示灯灭
			LED2=1;		//出门灯亮
			LED3=0;     //进门灯灭
			
			Change_flag=0;
		}
		
	}

/*延时循环*/	
	delay_ms(500);
	i++;
	if(i==2)
	{
	    LED0=!LED0;
		i=0;
	}
}
}


标签:提醒,status,出门,else,delay,flag,ms,printf,老人
From: https://www.cnblogs.com/hcnnnnnn/p/17175399.html

相关文章