OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2372|回复: 3

求老哥帮忙看看,STM32蓝牙控制和人体感应控制,程序怎么写才不冲突。

[复制链接]

0

主题

0

帖子

0

精华

新手入门

积分
1
金钱
1
注册时间
2020-3-17
在线时间
1 小时
发表于 2020-3-17 20:13:24 | 显示全部楼层 |阅读模式
4金钱
本帖最后由 Z2941815929 于 2020-3-17 20:15 编辑

求老哥帮帮忙,程序中,人体感应和蓝牙起冲突了,比如人离开人体感应范围远程蓝牙开灯开不了,断开蓝牙之后人体感应没作用了。我现在想当连接蓝牙的时候蓝牙控制,没连接蓝牙的时候人体感应控制。这应该怎么写?求大神帮帮忙。蓝牙控制直接在串口里面改的。
void USART1_IRQHandler(void)            
        {
        u8 Res;
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //½óêÕÖD¶Ï
                {
                        USART_ClearITPendingBit(USART1,USART_IT_RXNE);
                        Res=USART_ReceiveData(USART1);        
                        USART_SendData(USART1,Res);
                        while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
                        delay_ms(100);                        
                        switch(Res)
                        {
                                case '1' ://开灯
                                        b=1;
                                        a=50;
                                        TIM_SetCompare2(TIM4,10000);
                                        TIM_Cmd(TIM4, ENABLE);  
                                        break;
                                case '2' ://关灯
                                        b=2;
                                        TIM_SetCompare2(TIM4,20000);
                                        break;
                                case '3'://自动
                                        printf("%d\n",a);
                                        b=0;
                                  break ;                        
                                case '4':
                                        a+=10;
                                       if(a>=90){a=90;}
                                        printf("%d\n",a);
                                   break ;
                                case '5':
                                        a-=10;        
                                        if(a<=10){a=10;}                                
                                        printf("%d\n",a);                                
                                  break ;
                        }
                }
                USART_RX_STA=0;
        }
这是人体感应的程序

void response_Init(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
        
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
        GPIO_Init(GPIOB, &GPIO_InitStructure);
}
u8 response_Statue(void)
{
        if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_2)==1)
        {
                return 1;  
        }
        return 2;
}

主程序不知道怎么写才能让它们不冲突,求老哥帮帮忙,谢谢

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

82

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
267
金钱
267
注册时间
2018-7-6
在线时间
133 小时
发表于 2020-3-18 10:52:57 | 显示全部楼层
关键你现在MAIN函数是咋写的??
回复

使用道具 举报

0

主题

82

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
267
金钱
267
注册时间
2018-7-6
在线时间
133 小时
发表于 2020-3-18 10:56:12 | 显示全部楼层
首先你得用个变量标记蓝牙有没有连接上,然后判断一下就完了
if(蓝牙没连接)
{
    STA =  response_Statue();
}
回复

使用道具 举报

1

主题

882

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3071
金钱
3071
注册时间
2018-2-7
在线时间
285 小时
发表于 2020-3-18 11:20:54 | 显示全部楼层
串口中断中不要使用延时,程序越短越好。通过标志位来判断是否有蓝牙连接。主程序中通过标志位来判断进入哪部分代码。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-22 21:49

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表