打印
[复制链接]
278|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
liuzaiy|  楼主 | 2020-3-14 14:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
pi, gp, IO, GPIO, se
变量CurrntStatus是从UART口收到的数据,假设第10s的时候收到的数据是0,则执行函数的最下面部分的falt_light函数,但是如果在第11秒执行falt_light函数的时候,从UART串口收到的数据是1,我想从falt_light跳出来,立即去执行CurrntStatus==1下面的指令,请问该怎么处理好呢?


void light_carmaker(){
         int i =0 ;
                 if(Flag==1)
                return;

        if(CurrntStatus == 2){         
                ControlYellowLigh();  //控制和发送黄灯的状态
        }
        else if(CurrntStatus == 3){

            GPIO_ResetBits(GPIOB,GPIO_Pin_7|GPIO_Pin_8);
               GPIO_SetBits(GPIOB,GPIO_Pin_6);//南北绿灯亮SN秒,东西红灯亮SN秒
            GPIO_SetBits(GPIOB,GPIO_Pin_5);//PB5是状态指示灯和南北绿灯的状态是一致的
                delay_ms(1000);
        }
        else if(CurrntStatus == 1){

             GPIO_ResetBits(GPIOB,GPIO_Pin_6);//关闭南北绿灯,东西红灯亮
            GPIO_ResetBits(GPIOB,GPIO_Pin_5);//状态指示灯LED2和南北的绿灯亮灭保持一致                        
            GPIO_ResetBits(GPIOB,GPIO_Pin_6|GPIO_Pin_7);//给高电平,关其他方向的灯
        GPIO_SetBits(GPIOB,GPIO_Pin_8);         //东西绿灯亮EW秒,南北红灯亮EW秒        
                delay_ms(1000);

        }
         else if(CurrntStatus == 0){

                falt_light();


        }
}


void falt_light(){
             //PB6连接的是南北绿东西红灯  PB7接的是黄灯 PB8接的是南北红东西绿灯
         GPIO_ResetBits(GPIOB,GPIO_Pin_7|GPIO_Pin_8);//给高电平,关其他方向的灯
         GPIO_ResetBits(GPIOB,GPIO_Pin_5); //先让状态指示灯灭

     snblu1=5;
         ewblu1=5;

         path = 0;
         w = 0;
         for(i=1;i<=snblu1;i++)
         {  
         if(Flag==1)
                return;
        
         GPIO_SetBits(GPIOB,GPIO_Pin_6);//南北绿灯亮SN秒,东西红灯亮SN秒
         GPIO_SetBits(GPIOB,GPIO_Pin_5);//PB5是状态指示灯和南北绿灯的状态是一致的
         if(Flag==1)
                return;
         delay_ms(1000);  //延时1s
         }
         
         if(Flag==1)
                return;
        GPIO_ResetBits(GPIOB,GPIO_Pin_6);//关闭南北绿灯,东西红灯亮
        GPIO_ResetBits(GPIOB,GPIO_Pin_5);//状态指示灯LED2和南北的绿灯亮灭保持一致

                                                                           
        GPIO_ResetBits(GPIOB,GPIO_Pin_7|GPIO_Pin_6);//给高电平,关其他方向的灯  
        for(i=1;i<=ewblu1;i++)
                {         
                                if(Flag==1)
                return;

                  GPIO_SetBits(GPIOB,GPIO_Pin_8);         //东西绿灯亮EW秒,南北红灯亮EW秒        
                                        if(Flag==1)
                return;
                  delay_ms(1000);
                }
        GPIO_ResetBits(GPIOB,GPIO_Pin_8);//灭东西绿灯
}

使用特权

评论回复
沙发
zhanglli| | 2020-3-14 14:19 | 只看该作者
弄一个逻辑式把决定动作的条件都加进去

使用特权

评论回复
板凳
happy_10| | 2020-3-14 14:24 | 只看该作者
根据条件进执行函数,你这么加点再加点不是办法.

使用特权

评论回复
地板
liuzaiy|  楼主 | 2020-3-14 14:26 | 只看该作者

搞定了,呵呵,犯了低级错误……

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

735

主题

7546

帖子

2

粉丝