基于STM32的智能储物柜设计

   本设计采用STM32F103主控板、GSM通信模块、电控锁模块、继电器模块。串口屏等。

一、GSM模块的简介以及使用代码

简介:
  GSM模块是一种集成电路芯片,用于将普通的电话或移动电话连接到GSM网络,从而使其能够进行通信。GSM是全球移动通信系统的缩写,是一种数字化的无线通信标准,广泛应用于手机、传真、数据传输和短信等领域。
注:GSM模块只能使用移动电话卡!!
使用以及代码:
   GSM模块需要发送相应的指令进行操作,下列是发送短信的代码,其中***********是要接收短信的手机号。采用串口一发送字符串。

void sim900a_send_English_message(char *message)
{
     //短信设置为text模式	
	usart1_send_string("AT+CMGF=1\r\n");                     
	delay_ms(1000);	    //延时1S以上
	//GSM7位缺省字符集
	usart1_send_string("AT+CSCS=\"GSM\"\r\n");                     
	delay_ms(1000);		  //延时1S以上
 
	usart1_send_string("AT+CMGS=\"***********\"\r\n");  //发送短信接收号码
	delay_ms(1000);	  //延时1S以上
	
	usart1_send_string(message);  //发送短信内容
	
	delay_ms(1000);	  //延时1S以上
	usart1_send_byte(0x1a); //最后发送Ctrl+Z
	delay_ms(1000);		
} 

二、串口屏设计

  这里采用的设计软件是USART HMI。本人设计的页面较为简单,可自行设计。
                       图1:主界面
基于STM32的智能储物柜设计_第1张图片

  
                       图2:选择存取柜子
基于STM32的智能储物柜设计_第2张图片

     
                    图3:选取柜子状态
基于STM32的智能储物柜设计_第3张图片
     

                 图4:打开柜子(输入密码取走东西)

基于STM32的智能储物柜设计_第4张图片

三、程序处理

重要的地方主要是程序的处理。完整工程代码私信找我要。

int phone_number[4][11];
char  accept_State[4][12];
u8 state_cabin1=0;//第一个柜子状态
u8 state_cabin2=0;//第二个柜子状态
u8 state_cabin3=0;//第三个柜子状态
u8 state_cabin4=0;//第四个柜子状态
int number=0;
int sum=0;
int rece_number[4]={0};
int password[4]={0},i=0; //password[1] 第一个柜子密码.....
char receive_password[5];
void recive_number(u8 number)
{
		static u8 Start_mode = 0;//模式选择
		static u8 rxd_Count_mode = 0;		
    if(rxd =='A')//模式选择
		 {
			 Get_password(0);
			 state_cabin1=1;
		   rxd_Count_mode = 0;
		   Start_mode  = 1;
		 } 
		  if(rxd =='B')//模式选择
		 {
			 Get_password(1);
			 state_cabin2=1;
		   rxd_Count_mode = 0;
		   Start_mode  = 2;
		 } 
		  if(rxd =='C')//模式选择
		 {
			 Get_password(2);
			 state_cabin3=1;
		   rxd_Count_mode = 0;
		   Start_mode  = 3;
		 } 
		  if(rxd =='D')//模式选择
		 {
			 Get_password(3);
			 state_cabin4=1;//存入
		   rxd_Count_mode = 0;
		   Start_mode  = 4;
		 } 
       if(rxd =='E')//模式选择  //输入密码
		 {
		   rxd_Count_mode = 0;
		   Start_mode  = 5;
		 }  		 
		 
		// display_state();
//----------------------
		if(Start_mode == 1)  //1号柜子
		{
		  accept_State[0][rxd_Count_mode++] = rxd;
			if(rxd_Count_mode == 12)
			{ 
				
				asc_number(accept_State,0);
				Start_mode  = 0;
				rxd_Count_mode=0;
			}
		}
//---------------------
		if(Start_mode == 2)  ///2号柜子
		{
		  accept_State[1][rxd_Count_mode++] = rxd;
			if(rxd_Count_mode == 12)
			{
				asc_number(accept_State,1);
				Start_mode  = 0;
				rxd_Count_mode=0;
			}
		}
//--------------------
			if(Start_mode == 3)  ///3号柜子
		{
		  accept_State[2][rxd_Count_mode++] = rxd;
			if(rxd_Count_mode == 12)
			{
				asc_number(accept_State,2);
				Start_mode  = 0;
				rxd_Count_mode=0;
			}
		}
//--------------------
			if(Start_mode == 4)  ///4号柜子
		{
		  accept_State[3][rxd_Count_mode++] = rxd;
			if(rxd_Count_mode == 12)
			{	
				asc_number(accept_State,3);
				Start_mode  = 0;
				rxd_Count_mode=0;
			}	
		}	
//----------------
			if(Start_mode == 5)  ///输入密码
		{
		  receive_password[rxd_Count_mode++]= rxd;
			if(rxd_Count_mode == 5)
			{	
				Start_mode  = 0;
				rxd_Count_mode=0;
				correct_or_false();
			}		
		}	
}
void asc_number(char accept_State[4][12],int Start_mode )  //asc转换为数字
{
   int i=0;
	for(i=0;i<11;i++)
	{
	  phone_number[Start_mode][i]=accept_State[Start_mode][i+1]-48;
	}
}

void display_state()   //显示是否存入
{
   if(state_cabin1==1) 
	 {
		 delay_ms(5);
		 printf("cun1.t1.txt=\"已存入\r\n\"\xff\xff\xff"); 
	 }		 
	  else 
		{ delay_ms(5);
			printf("cun1.t1.txt=\"未存入\r\n\"\xff\xff\xff");
		}
	 if(state_cabin2==1)  
	 { delay_ms(5);
		printf("cun2.t1.txt=\"已存入\r\n\"\xff\xff\xff");
	 }
	  else 
		{delay_ms(5);
			printf("cun2.t1.txt=\"未存入\r\n\"\xff\xff\xff"); 	
		}			
	if(state_cabin3==1) 
	{delay_ms(5);
		printf("cun3.t1.txt=\"已存入\r\n\"\xff\xff\xff");
	}
	  else 
		{delay_ms(5);
			printf("cun3.t1.txt=\"未存入\r\n\"\xff\xff\xff");	
		}
	  if(state_cabin4==1) 
	 {  delay_ms(5);
		 printf("cun4.t1.txt=\"已存入\r\n\"\xff\xff\xff");
	 }
	  else  
			{delay_ms(5);
			  printf("cun4.t1.txt=\"未存入\r\n\"\xff\xff\xff");		
			}
}

void Get_password(int i) //随机获取密码
{
	 password[i]=rand()%10000;
}

void correct_or_false()  //判断密码正确性 若正确打开柜子 并显示
{  
	  int i=0;
	for(i=0;i<4;i++)
	{
	  rece_number[i]=receive_password[i+1]-48;
	}
	 sum=rece_number[0]*1000+rece_number[1]*100+rece_number[2]*10+rece_number[3];
	 if(sum==password[0])
	 {
	   number=1;
		 delay_ms(5);
		 printf("qu.t1.txt=\"密码正确\r\n\"\xff\xff\xff");
	 }
	  else if(sum==password[1])
	 {
	   number=2;
		 delay_ms(5);
		 printf("qu.t1.txt=\"密码正确\r\n\"\xff\xff\xff");
	 }
	  else if(sum==password[2])
	 {
	   number=3;
		 delay_ms(5);
		 printf("qu.t1.txt=\"密码正确\r\n\"\xff\xff\xff");
	 }
	  else if(sum==password[3])
	 {
	   number=4;
		 delay_ms(5);
		 printf("qu.t1.txt=\"密码正确\r\n\"\xff\xff\xff");
	 }
	 else printf("qu.t1.txt=\"密码错误\r\n\"\xff\xff\xff");
	 
	 if(number==1) printf("cun1.t1.txt=\"未存入\r\n\"\xff\xff\xff");
	 if(number==2) printf("cun2.t1.txt=\"未存入\r\n\"\xff\xff\xff");
	 if(number==3) printf("cun3.t1.txt=\"未存入\r\n\"\xff\xff\xff");
	 if(number==4) printf("cun4.t1.txt=\"未存入\r\n\"\xff\xff\xff");
}


``

你可能感兴趣的:(stm32,单片机)