• 基于MSP430送药小车 ----- 拓展篇【2021年全国电赛(F题)】



    该篇文章并非完全按照赛题要求完成,仅当做个人休闲娱乐产品!!!!

    衔接上篇 基于MSP430送药小车 ----- 基础篇

    该篇的主要内容为赛题的拓展部分,所以这里我就在完成基础部分的前提下继续介绍拓展部分。

    本篇代码在上篇代码中做了许些修改(本人有点强迫症,看见bug就像修,修着修着就把许多代码改动了),但本质逻辑处理上都是一致的,所以想要追求完美,本人更推荐参考该篇的代码部分。

    一、赛题分析

    • 两个小车协同运送药品到同一指定的中部病房。小车1识别病房号装载药品后开始运送,到达病房后等待卸载药品;然后,小车2识别病房号装载药品后启动运送,到达自选暂停点后暂停,点亮黄色指示灯,等待小车1卸载;小车1卸载药品,开始返回,同时控制小车2熄灭黄色指示灯并继续运送。要求从小车2启动运送开始,到小车1返回到药房且小车2到达病房的总时间(不包括小车2黄灯亮时的暂停时间)越短越好,超过60s 计0分。

    • 两个小车协同到不同的远端病房送、取药品,小车1送药,小车2取药。小车1识别病房号装载药品后开始运送,小车2于药房处识别病房号等待小车1的取药开始指令;小车1到达病房后卸载药品,开始返回,同时向小车2发送启动取药指令;小车2收到取药指令后开始启动,到达病房后停止,亮红色指示灯。要求从小车1返回开始,到小车1返回到药房且小车2到达取药病房的总时间越短越好,超过60s计0分。

    • 其他。

    从上面赛题中可知,拓展任务需要俩辆车同时进行工作,车1和车2需将药品送到相同药房,中途相撞、暂停点距离过短、时间超过60s扣分,越快越好等等。

    所以在该题中,俩辆车是需要有交互的,也就是通信,所以需要外加通信模块(蓝牙、Zigbee、LORA、WiFi等等),以上模块都可通过串口实现,且都可在预先在上位机配置连接后直接透传,以下我选择的是蓝牙进行通信,具体配置可参考“ HC-05 蓝牙模块之间的通信配置 ”。其次在第二辆车硬件方面,与其第一辆车相比,可以不用视觉模块(OpenMV、K210等等),具体送至哪个药房通过车1发送的指令获得信息,其他硬件、排线与车1保持一致即可。在软件上,代码也与车1大致相同,改动的地方为:外加串口初始化函数,用作蓝牙通信使用,其中相比上篇蓝牙收发消息体现在(以中端病房为例),当车1在去往中端药房的途中路径第一个十字路口(一共途径2个十字路口)时,发送消息给车2,这时车2接收到消息,开始装药 启动出发,在车1成功停靠在病房门口时,车2紧随其后,相继停靠在对面的中端药房,等待车1的下一步指令,当车1卸完药品后,途径回程中的第一个十字路口时,发送第二个指令给车2,车2接到指令立即原地调头(一开始停靠时车2的车头是面向病房的),然后开往目的药房,卸药回城。

    Tips: 以下推荐几篇上述几种通信模块简介,仅供参考!

    1. HC-05 蓝牙
    2. ESP8266WiFi
    3. LORA 无线通信
    4. Zigbee 无线通信

    二、逻辑处理分析

    1. 近端病房

    如上赛题分析所说,拓展部分相比较于基础部分,不大相同的地方为:由原来的一辆车送药变为俩辆车一起送药,小车之间通过无线串口通信模块进行数据传输,其余地方基本无太大变化。

    车2设计如下:
    在车1启动之后,车2在药房门前保持就绪状态,当车1途径第一个十字路口(也就是第一个转向口)时,发送启动指令给车2,人工装药后启动,车1会在病房前停止等待人工卸药,而车2会去往另一个近端病房,避免俩车会车(相撞),当车1卸药完成后,回程途径第一个十字路口时,发送第二个指令给车2,车2接收到指令立即回转直奔目的病房,随后按照以往操作,卸药完成后返回药房。

    在近端送药时与一辆车相比,其实就单单多了俩条接收语句,简单来说,当车2接收到出发指令,将其原来在第一个十字路口左拐的指令改成右拐,且又继续等待车1的指令,当车1再一次发送指令过来时,车2调头途径十字路口时无需做任何操作,按照默认的循迹即可,那么当途径十字路口段时该怎么处理呢?即在接收到第二条指令的同时设立标志位,用作无视第一个十字路口段,当成功将药品送到指令病房后,又将标志位设成原来的值,即按照最开始的单量小车送药模式执行。

    2. 中端病房

    中端病房相比较于近端病房,从赛题中就可以注意到只是多了一个岔路口,也就是近端病房在第一个岔路口转向,而中端病房在第二个岔路口转向,具体设计如下。

    车2设计如下:
    当车1识别目的病房后启动,在途径第一个岔路口的时候就可以给车2发送出发指令,因为车1、车2的循迹速度都是保持一致的,且路况和其他因素也相差无几,所以车1在这时发送指令驱动车2送药,距离和时间上都是安全的,车1和车2都通过设立标志位忽略第一条岔路口,保持巡线状态,直到俩车都到达对应的停靠点,车1卸药完成后立即原路返回,车2则继续去往指定病房,随即同样安装车1的轨迹回程。

    3. 远端病房

    远端病房则相比较于近端、中端稍难一点,不过没关系,只要功夫深,铁杵都能磨成针,所以不要急,请听我一一道来。

    下面我以5号病号为例(假如它位于赛题左上方处)
    首先设定俩个标志位flag1和flag2,用作去程和回程的路向判断,每去往病房经过一个十字路口时flag1变换状态,当flag1第一次变换时车1发送第一条指令给车2,车2接收到消息马上装药启程,按照同车1一样的速度向目的药房行驶,当flag1变换到第三种状态时车1向左继续行驶,且标志位继续变化,再当标志位发生变化时向右行驶,随即到达指定药房处,而当flag1发生第四次变化时车2理当向右行驶,但考虑到车1卸完操作并未完成,所以选择在5号对面的药房作为临时停靠点,即在flag1发生第四次变化时车2向左行驶,等待车1第二个指令的到来。当车1卸完药品后回程途径第一个岔路口发送第二条指令给车2,车2接收到指令立即调头直行抵达目的病房,后面再安照以往操作正常回程。相比病房5,其他远端病房6,7,8都与5号在逻辑设计上一毛一样,只是路段的转向不同。

    Tips: 在实现多功能情况下做项目开发时,切记不要开启低功耗模式(除非在功耗方面上有过多要求),不然会导致程序阻塞,反应迟钝等问题;在实现单功能情况下,如果对功耗也没过多要求,像我一样的新手可以关闭低功耗,直接使用,简单粗暴。

    三、程序设计

    1. 近端送药

    ① 车1

    void judge1(void)
    {
        xunji();
    
        if(((P6IN&BIT1)==BIT1)  && ((P6IN&BIT2)==BIT2) && ((P6IN&BIT3)==BIT3))
        {
            while(((P6IN&BIT1)==BIT1)  && ((P6IN&BIT2)==BIT2) && ((P6IN&BIT3)==BIT3));
            if(flag1==-100)
            {
                UCA1TXBUF='a';
                right();
                SetPwm_Init(24,1000,700);//左边
                SetPwm_Init(25,1000,700);//右边
                delay_us(300000);
            }
            flag1++;
            if(flag1==1)
            {
                left();
                SetPwm_Init(24,1000,700);//左边
                SetPwm_Init(25,1000,700);//右边
                delay_us(300000);
            }
            while(((P6IN&BIT1)==BIT1)  && ((P6IN&BIT2)==BIT2) && ((P6IN&BIT3)==BIT3));
        }
    
        if(((P6IN&BIT1)!=BIT1) && ((P6IN&BIT2)!=BIT2) && ((P6IN&BIT3)!=BIT3) || (((P6IN&BIT5)!=BIT5)  && ((P6IN&BIT0)==BIT0) &&((P6IN&BIT1)==BIT1)&&((P6IN&BIT2)!=BIT2) &&((P6IN&BIT3)==BIT3) &&((P6IN&BIT4)==BIT4)&&((P7IN&BIT0)!=BIT0)) || (((P6IN&BIT5)!=BIT5)  && ((P6IN&BIT0)==BIT0) &&((P6IN&BIT1)!=BIT1)&&((P6IN&BIT2)!=BIT2) &&((P6IN&BIT3)==BIT3) &&((P6IN&BIT4)!=BIT4)&&((P7IN&BIT0)==BIT0))||(((P6IN&BIT5)!=BIT5)  && ((P6IN&BIT0)!=BIT0) &&((P6IN&BIT1)==BIT1)&&((P6IN&BIT2)!=BIT2) &&((P6IN&BIT3)==BIT3) &&((P6IN&BIT4)==BIT4)&&((P7IN&BIT0)!=BIT0))||(((P6IN&BIT5)!=BIT5)  && ((P6IN&BIT0)==BIT0) &&((P6IN&BIT1)==BIT1)&&((P6IN&BIT2)==BIT2) &&((P6IN&BIT3)==BIT3) &&((P6IN&BIT4)==BIT4)&&((P7IN&BIT0)!=BIT0))||(((P6IN&BIT5)!=BIT5)  && ((P6IN&BIT0)==BIT0) &&((P6IN&BIT1)==BIT1)&&((P6IN&BIT2)!=BIT2) &&((P6IN&BIT3)==BIT3) &&((P6IN&BIT4)!=BIT4)&&((P7IN&BIT0)==BIT0))||(((P6IN&BIT5)==BIT5)  && ((P6IN&BIT0)!=BIT0) &&((P6IN&BIT1)==BIT1)&&((P6IN&BIT2)==BIT2) &&((P6IN&BIT3)!=BIT3) &&((P6IN&BIT4)==BIT4)&&((P7IN&BIT0)!=BIT0)))
        {
            if( pill==0 && ((P7IN&BIT4)==BIT4) )     //拿走药品
            {
                pill=1;
                back();
                SetPwm_Init(24,1000,400);//左边
                SetPwm_Init(25,1000,400);//右边
                delay_us(700000);
                left();
                SetPwm_Init(24,1000,550);//左边
                SetPwm_Init(25,1000,650);//右边
                delay_us(700000);
                flag1=-100;
                while(((P6IN&BIT1)!=BIT1) && ((P6IN&BIT2)!=BIT2) && ((P6IN&BIT3)!=BIT3) && (((P7IN&BIT0)!=BIT0)||((P6IN&BIT5)!=BIT5)) && (((P6IN&BIT0)!=BIT0)||((P6IN&BIT4)!=BIT4)));
    
            }
            else
            {
                stop();
                SetPwm_Init(24,1000,0);//左边
                SetPwm_Init(25,1000,0);//右边
            }
        }
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53

    ② 车2

    void judge1(void)
    {
        xunji();
    
        if(((P6IN&BIT1)==BIT1)  && ((P6IN&BIT2)==BIT2) && ((P6IN&BIT3)==BIT3))
        {
            while(((P6IN&BIT1)==BIT1)  && ((P6IN&BIT2)==BIT2) && ((P6IN&BIT3)==BIT3));
            if(flag1==-100)
            {
                right();
                SetPwm_Init(24,1000,700);//左边
                SetPwm_Init(25,1000,700);//右边
                delay_us(300000);
            }
            flag1++;
            if(flag1==1)
            {
                right();
                SetPwm_Init(24,1000,700);//左边
                SetPwm_Init(25,1000,700);//右边
                delay_us(300000);
            }
            while(((P6IN&BIT1)==BIT1)  && ((P6IN&BIT2)==BIT2) && ((P6IN&BIT3)==BIT3));
        }
    
        if(((P6IN&BIT1)!=BIT1) && ((P6IN&BIT2)!=BIT2) && ((P6IN&BIT3)!=BIT3) || (((P6IN&BIT5)!=BIT5)  && ((P6IN&BIT0)==BIT0) &&((P6IN&BIT1)==BIT1)&&((P6IN&BIT2)!=BIT2) &&((P6IN&BIT3)==BIT3) &&((P6IN&BIT4)==BIT4)&&((P7IN&BIT0)!=BIT0)) || (((P6IN&BIT5)!=BIT5)  && ((P6IN&BIT0)==BIT0) &&((P6IN&BIT1)!=BIT1)&&((P6IN&BIT2)!=BIT2) &&((P6IN&BIT3)==BIT3) &&((P6IN&BIT4)!=BIT4)&&((P7IN&BIT0)==BIT0))||(((P6IN&BIT5)!=BIT5)  && ((P6IN&BIT0)!=BIT0) &&((P6IN&BIT1)==BIT1)&&((P6IN&BIT2)!=BIT2) &&((P6IN&BIT3)==BIT3) &&((P6IN&BIT4)==BIT4)&&((P7IN&BIT0)!=BIT0))||(((P6IN&BIT5)!=BIT5)  && ((P6IN&BIT0)==BIT0) &&((P6IN&BIT1)==BIT1)&&((P6IN&BIT2)==BIT2) &&((P6IN&BIT3)==BIT3) &&((P6IN&BIT4)==BIT4)&&((P7IN&BIT0)!=BIT0))||(((P6IN&BIT5)!=BIT5)  && ((P6IN&BIT0)==BIT0) &&((P6IN&BIT1)==BIT1)&&((P6IN&BIT2)!=BIT2) &&((P6IN&BIT3)==BIT3) &&((P6IN&BIT4)!=BIT4)&&((P7IN&BIT0)==BIT0))||(((P6IN&BIT5)==BIT5)  && ((P6IN&BIT0)!=BIT0) &&((P6IN&BIT1)==BIT1)&&((P6IN&BIT2)==BIT2) &&((P6IN&BIT3)!=BIT3) &&((P6IN&BIT4)==BIT4)&&((P7IN&BIT0)!=BIT0)))
        {
    
            if( pill==0 && ((P7IN&BIT4)==BIT4) )     //拿走药品
            {
                pill=1;
                back();
                SetPwm_Init(24,1000,400);//左边
                SetPwm_Init(25,1000,400);//右边
                delay_us(700000);
                left();
                SetPwm_Init(24,1000,550);//左边
                SetPwm_Init(25,1000,650);//右边
                delay_us(700000);
                flag1=-100;
                while(((P6IN&BIT1)!=BIT1) && ((P6IN&BIT2)!=BIT2) && ((P6IN&BIT3)!=BIT3) && (((P7IN&BIT0)!=BIT0)||((P6IN&BIT5)!=BIT5)) && (((P6IN&BIT0)!=BIT0)||((P6IN&BIT4)!=BIT4)));
            }
            else
            {
                stop();
                SetPwm_Init(24,1000,0);//左边
                SetPwm_Init(25,1000,0);//右边
                if(((P6IN&BIT1)!=BIT1) && ((P6IN&BIT2)!=BIT2) && ((P6IN&BIT3)!=BIT3) || (((P6IN&BIT5)!=BIT5)  && ((P6IN&BIT0)==BIT0) &&((P6IN&BIT1)==BIT1)&&((P6IN&BIT2)!=BIT2) &&((P6IN&BIT3)==BIT3) &&((P6IN&BIT4)==BIT4)&&((P7IN&BIT0)!=BIT0)) || (((P6IN&BIT5)!=BIT5)  && ((P6IN&BIT0)==BIT0) &&((P6IN&BIT1)!=BIT1)&&((P6IN&BIT2)!=BIT2) &&((P6IN&BIT3)==BIT3) &&((P6IN&BIT4)!=BIT4)&&((P7IN&BIT0)==BIT0))||(((P6IN&BIT5)!=BIT5)  && ((P6IN&BIT0)!=BIT0) &&((P6IN&BIT1)==BIT1)&&((P6IN&BIT2)!=BIT2) &&((P6IN&BIT3)==BIT3) &&((P6IN&BIT4)==BIT4)&&((P7IN&BIT0)!=BIT0))||(((P6IN&BIT5)!=BIT5)  && ((P6IN&BIT0)==BIT0) &&((P6IN&BIT1)==BIT1)&&((P6IN&BIT2)==BIT2) &&((P6IN&BIT3)==BIT3) &&((P6IN&BIT4)==BIT4)&&((P7IN&BIT0)!=BIT0))||(((P6IN&BIT5)!=BIT5)  && ((P6IN&BIT0)==BIT0) &&((P6IN&BIT1)==BIT1)&&((P6IN&BIT2)!=BIT2) &&((P6IN&BIT3)==BIT3) &&((P6IN&BIT4)!=BIT4)&&((P7IN&BIT0)==BIT0))||(((P6IN&BIT5)==BIT5)  && ((P6IN&BIT0)!=BIT0) &&((P6IN&BIT1)==BIT1)&&((P6IN&BIT2)==BIT2) &&((P6IN&BIT3)!=BIT3) &&((P6IN&BIT4)==BIT4)&&((P7IN&BIT0)!=BIT0)))
                {
                    UCA1IE |= UCRXIE;
                }
                else
                {
                    UCA1IE &= ~UCRXIE;
                }
            }
        }
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60

    2. 中端送药

    ① 车1

    void judge3(void)
    {
        xunji();
    
        if(((P6IN&BIT1)==BIT1)  && ((P6IN&BIT2)==BIT2) && ((P6IN&BIT3)==BIT3))
        {
            while(((P6IN&BIT1)==BIT1)  && ((P6IN&BIT2)==BIT2) && ((P6IN&BIT3)==BIT3));
            if(flag3==-100)
            {
                right();
                SetPwm_Init(24,1000,700);//左边
                SetPwm_Init(25,1000,700);//右边
                delay_us(300000);
                UCA1TXBUF='a';
            }
            flag3++;
            if(flag3==1)    
    		{
    			delay_us(150000);
    		}
            if(flag3>=2&& flag3<=6)
            {
                flag3=10;
                left();
                SetPwm_Init(24,1000,700);//左边
                SetPwm_Init(25,1000,700);//右边
                delay_us(300000);
            }
            while(((P6IN&BIT1)==BIT1)  && ((P6IN&BIT2)==BIT2) && ((P6IN&BIT3)==BIT3));
        }
    
        if(((P6IN&BIT1)!=BIT1) && ((P6IN&BIT2)!=BIT2) && ((P6IN&BIT3)!=BIT3) || (((P6IN&BIT5)!=BIT5)  && ((P6IN&BIT0)==BIT0) &&((P6IN&BIT1)==BIT1)&&((P6IN&BIT2)!=BIT2) &&((P6IN&BIT3)==BIT3) &&((P6IN&BIT4)==BIT4)&&((P7IN&BIT0)!=BIT0)) || (((P6IN&BIT5)!=BIT5)  && ((P6IN&BIT0)==BIT0) &&((P6IN&BIT1)!=BIT1)&&((P6IN&BIT2)!=BIT2) &&((P6IN&BIT3)==BIT3) &&((P6IN&BIT4)!=BIT4)&&((P7IN&BIT0)==BIT0))||(((P6IN&BIT5)!=BIT5)  && ((P6IN&BIT0)!=BIT0) &&((P6IN&BIT1)==BIT1)&&((P6IN&BIT2)!=BIT2) &&((P6IN&BIT3)==BIT3) &&((P6IN&BIT4)==BIT4)&&((P7IN&BIT0)!=BIT0))||(((P6IN&BIT5)!=BIT5)  && ((P6IN&BIT0)==BIT0) &&((P6IN&BIT1)==BIT1)&&((P6IN&BIT2)==BIT2) &&((P6IN&BIT3)==BIT3) &&((P6IN&BIT4)==BIT4)&&((P7IN&BIT0)!=BIT0))||(((P6IN&BIT5)!=BIT5)  && ((P6IN&BIT0)==BIT0) &&((P6IN&BIT1)==BIT1)&&((P6IN&BIT2)!=BIT2) &&((P6IN&BIT3)==BIT3) &&((P6IN&BIT4)!=BIT4)&&((P7IN&BIT0)==BIT0))||(((P6IN&BIT5)==BIT5)  && ((P6IN&BIT0)!=BIT0) &&((P6IN&BIT1)==BIT1)&&((P6IN&BIT2)==BIT2) &&((P6IN&BIT3)!=BIT3) &&((P6IN&BIT4)==BIT4)&&((P7IN&BIT0)!=BIT0)))
        {
            if( pill==0 && ((P7IN&BIT4)==BIT4) )     //拿走药品
            {
                pill=1;
                back();
                SetPwm_Init(24,1000,400);//左边
                SetPwm_Init(25,1000,400);//右边
                delay_us(700000);
                left();
                SetPwm_Init(24,1000,550);//左边
                SetPwm_Init(25,1000,650);//右边
                delay_us(700000);
                flag3=-100;
                while(((P6IN&BIT1)!=BIT1) && ((P6IN&BIT2)!=BIT2) && ((P6IN&BIT3)!=BIT3) && (((P7IN&BIT0)!=BIT0)||((P6IN&BIT5)!=BIT5)) && (((P6IN&BIT0)!=BIT0)||((P6IN&BIT4)!=BIT4)));
            }
            else
            {
                stop();
                SetPwm_Init(24,1000,0);//左边
                SetPwm_Init(25,1000,0);//右边
            }
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56

    ② 车2

    void judge3(void)
    {
        xunji();
    
        if(((P6IN&BIT1)==BIT1)  && ((P6IN&BIT2)==BIT2) && ((P6IN&BIT3)==BIT3))
        {
            while(((P6IN&BIT1)==BIT1)  && ((P6IN&BIT2)==BIT2) && ((P6IN&BIT3)==BIT3));
            if(flag3==-100)
            {
                right();
                SetPwm_Init(24,1000,700);//左边
                SetPwm_Init(25,1000,700);//右边
                delay_us(300000);
            }
            flag3++;
            if(flag3==1)    delay_us(150000);
            if(flag3>=2&& flag3<=6)
            {
                flag3=10;
                right();
                SetPwm_Init(24,1000,700);//左边
                SetPwm_Init(25,1000,700);//右边
                delay_us(300000);
            }
            while(((P6IN&BIT1)==BIT1)  && ((P6IN&BIT2)==BIT2) && ((P6IN&BIT3)==BIT3));
        }
    
        if(((P6IN&BIT1)!=BIT1) && ((P6IN&BIT2)!=BIT2) && ((P6IN&BIT3)!=BIT3) || (((P6IN&BIT5)!=BIT5)  && ((P6IN&BIT0)==BIT0) &&((P6IN&BIT1)==BIT1)&&((P6IN&BIT2)!=BIT2) &&((P6IN&BIT3)==BIT3) &&((P6IN&BIT4)==BIT4)&&((P7IN&BIT0)!=BIT0)) || (((P6IN&BIT5)!=BIT5)  && ((P6IN&BIT0)==BIT0) &&((P6IN&BIT1)!=BIT1)&&((P6IN&BIT2)!=BIT2) &&((P6IN&BIT3)==BIT3) &&((P6IN&BIT4)!=BIT4)&&((P7IN&BIT0)==BIT0))||(((P6IN&BIT5)!=BIT5)  && ((P6IN&BIT0)!=BIT0) &&((P6IN&BIT1)==BIT1)&&((P6IN&BIT2)!=BIT2) &&((P6IN&BIT3)==BIT3) &&((P6IN&BIT4)==BIT4)&&((P7IN&BIT0)!=BIT0))||(((P6IN&BIT5)!=BIT5)  && ((P6IN&BIT0)==BIT0) &&((P6IN&BIT1)==BIT1)&&((P6IN&BIT2)==BIT2) &&((P6IN&BIT3)==BIT3) &&((P6IN&BIT4)==BIT4)&&((P7IN&BIT0)!=BIT0))||(((P6IN&BIT5)!=BIT5)  && ((P6IN&BIT0)==BIT0) &&((P6IN&BIT1)==BIT1)&&((P6IN&BIT2)!=BIT2) &&((P6IN&BIT3)==BIT3) &&((P6IN&BIT4)!=BIT4)&&((P7IN&BIT0)==BIT0))||(((P6IN&BIT5)==BIT5)  && ((P6IN&BIT0)!=BIT0) &&((P6IN&BIT1)==BIT1)&&((P6IN&BIT2)==BIT2) &&((P6IN&BIT3)!=BIT3) &&((P6IN&BIT4)==BIT4)&&((P7IN&BIT0)!=BIT0)))
        {
            if( pill==0 && ((P7IN&BIT4)==BIT4) )     //拿走药品
            {
                pill=1;
                back();
                SetPwm_Init(24,1000,400);//左边
                SetPwm_Init(25,1000,400);//右边
                delay_us(700000);
                left();
                SetPwm_Init(24,1000,550);//左边
                SetPwm_Init(25,1000,650);//右边
                delay_us(700000);
                flag3=-100;
                while(((P6IN&BIT1)!=BIT1) && ((P6IN&BIT2)!=BIT2) && ((P6IN&BIT3)!=BIT3) && (((P7IN&BIT0)!=BIT0)||((P6IN&BIT5)!=BIT5)) && (((P6IN&BIT0)!=BIT0)||((P6IN&BIT4)!=BIT4)));
            }
            else
            {
                stop();
                SetPwm_Init(24,1000,0);//左边
                SetPwm_Init(25,1000,0);//右边
                if(((P6IN&BIT1)!=BIT1) && ((P6IN&BIT2)!=BIT2) && ((P6IN&BIT3)!=BIT3) || (((P6IN&BIT5)!=BIT5)  && ((P6IN&BIT0)==BIT0) &&((P6IN&BIT1)==BIT1)&&((P6IN&BIT2)!=BIT2) &&((P6IN&BIT3)==BIT3) &&((P6IN&BIT4)==BIT4)&&((P7IN&BIT0)!=BIT0)) || (((P6IN&BIT5)!=BIT5)  && ((P6IN&BIT0)==BIT0) &&((P6IN&BIT1)!=BIT1)&&((P6IN&BIT2)!=BIT2) &&((P6IN&BIT3)==BIT3) &&((P6IN&BIT4)!=BIT4)&&((P7IN&BIT0)==BIT0))||(((P6IN&BIT5)!=BIT5)  && ((P6IN&BIT0)!=BIT0) &&((P6IN&BIT1)==BIT1)&&((P6IN&BIT2)!=BIT2) &&((P6IN&BIT3)==BIT3) &&((P6IN&BIT4)==BIT4)&&((P7IN&BIT0)!=BIT0))||(((P6IN&BIT5)!=BIT5)  && ((P6IN&BIT0)==BIT0) &&((P6IN&BIT1)==BIT1)&&((P6IN&BIT2)==BIT2) &&((P6IN&BIT3)==BIT3) &&((P6IN&BIT4)==BIT4)&&((P7IN&BIT0)!=BIT0))||(((P6IN&BIT5)!=BIT5)  && ((P6IN&BIT0)==BIT0) &&((P6IN&BIT1)==BIT1)&&((P6IN&BIT2)!=BIT2) &&((P6IN&BIT3)==BIT3) &&((P6IN&BIT4)!=BIT4)&&((P7IN&BIT0)==BIT0))||(((P6IN&BIT5)==BIT5)  && ((P6IN&BIT0)!=BIT0) &&((P6IN&BIT1)==BIT1)&&((P6IN&BIT2)==BIT2) &&((P6IN&BIT3)!=BIT3) &&((P6IN&BIT4)==BIT4)&&((P7IN&BIT0)!=BIT0)))
                {
                    UCA1IE |= UCRXIE;
                }
                else
                {
                    UCA1IE &= ~UCRXIE;
                }
            }
        }
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61

    3. 远端送药

    ① 车1

    void judge6(void)
    {
        xunji();
    
        if(flag66!=0)
        {
            if(((P6IN&BIT5)==BIT5)  && ((P6IN&BIT0)==BIT0) &&((P6IN&BIT4)!=BIT4)&&((P7IN&BIT0)!=BIT0) && (((P6IN&BIT2)==BIT2)||((P6IN&BIT1)==BIT1))&&flag66==1)
            {
                while(((P6IN&BIT5)==BIT5)  && ((P6IN&BIT0)==BIT0) &&((P6IN&BIT4)!=BIT4)&&((P7IN&BIT0)!=BIT0) && (((P6IN&BIT2)==BIT2)||((P6IN&BIT1)==BIT1)));
                left();
                SetPwm_Init(24,1000,700);//左边
                SetPwm_Init(25,1000,700);//右边
                delay_us(300000);
                UCA1TXBUF='a';
                flag66++;
            }
            if(((P6IN&BIT5)==BIT5)  && ((P6IN&BIT0)==BIT0) &&((P6IN&BIT4)!=BIT4)&&((P7IN&BIT0)!=BIT0) && (((P6IN&BIT2)==BIT2)||((P6IN&BIT1)==BIT1))&&flag66==2)
            {
                while(((P6IN&BIT5)==BIT5)  && ((P6IN&BIT0)==BIT0) &&((P6IN&BIT4)!=BIT4)&&((P7IN&BIT0)!=BIT0) && (((P6IN&BIT2)==BIT2)||((P6IN&BIT1)==BIT1)));
                left();
                SetPwm_Init(24,1000,700);//左边
                SetPwm_Init(25,1000,700);//右边
                delay_us(300000);
                flag66=0;
            }
        }
    
        if(((P6IN&BIT1)==BIT1)  && ((P6IN&BIT2)==BIT2) && ((P6IN&BIT3)==BIT3))
        {
            while(((P6IN&BIT1)==BIT1)  && ((P6IN&BIT2)==BIT2) && ((P6IN&BIT3)==BIT3));
            flag6++;
            if(flag6==1 || flag6==2)    delay_us(150000);
            if(flag6>=3&& flag6<=6)
            {
                flag6=10;
                right();
                SetPwm_Init(24,1000,700);//左边
                SetPwm_Init(25,1000,700);//右边
                delay_us(300000);
            }
            if(flag6>10)
            {
                flag6=-100;
                right();
                SetPwm_Init(24,1000,700);//左边
                SetPwm_Init(25,1000,700);//右边
                delay_us(300000);
            }
            while(((P6IN&BIT1)==BIT1)  && ((P6IN&BIT2)==BIT2) && ((P6IN&BIT3)==BIT3));
    
        }
    
        if(((P6IN&BIT1)!=BIT1) && ((P6IN&BIT2)!=BIT2) && ((P6IN&BIT3)!=BIT3) || (((P6IN&BIT5)!=BIT5)  && ((P6IN&BIT0)==BIT0) &&((P6IN&BIT1)==BIT1)&&((P6IN&BIT2)!=BIT2) &&((P6IN&BIT3)==BIT3) &&((P6IN&BIT4)==BIT4)&&((P7IN&BIT0)!=BIT0)) || (((P6IN&BIT5)!=BIT5)  && ((P6IN&BIT0)==BIT0) &&((P6IN&BIT1)!=BIT1)&&((P6IN&BIT2)!=BIT2) &&((P6IN&BIT3)==BIT3) &&((P6IN&BIT4)!=BIT4)&&((P7IN&BIT0)==BIT0))||(((P6IN&BIT5)!=BIT5)  && ((P6IN&BIT0)!=BIT0) &&((P6IN&BIT1)==BIT1)&&((P6IN&BIT2)!=BIT2) &&((P6IN&BIT3)==BIT3) &&((P6IN&BIT4)==BIT4)&&((P7IN&BIT0)!=BIT0))||(((P6IN&BIT5)!=BIT5)  && ((P6IN&BIT0)==BIT0) &&((P6IN&BIT1)==BIT1)&&((P6IN&BIT2)==BIT2) &&((P6IN&BIT3)==BIT3) &&((P6IN&BIT4)==BIT4)&&((P7IN&BIT0)!=BIT0))||(((P6IN&BIT5)!=BIT5)  && ((P6IN&BIT0)==BIT0) &&((P6IN&BIT1)==BIT1)&&((P6IN&BIT2)!=BIT2) &&((P6IN&BIT3)==BIT3) &&((P6IN&BIT4)!=BIT4)&&((P7IN&BIT0)==BIT0))||(((P6IN&BIT5)==BIT5)  && ((P6IN&BIT0)!=BIT0) &&((P6IN&BIT1)==BIT1)&&((P6IN&BIT2)==BIT2) &&((P6IN&BIT3)!=BIT3) &&((P6IN&BIT4)==BIT4)&&((P7IN&BIT0)!=BIT0)))
        {
            if( pill==0 && ((P7IN&BIT4)==BIT4) )     //拿走药品
            {
                pill=1;
                back();
                SetPwm_Init(24,1000,400);//左边
                SetPwm_Init(25,1000,400);//右边
                delay_us(700000);
                left();
                SetPwm_Init(24,1000,550);//左边
                SetPwm_Init(25,1000,650);//右边
                delay_us(700000);
                while(((P6IN&BIT1)!=BIT1) && ((P6IN&BIT2)!=BIT2) && ((P6IN&BIT3)!=BIT3) && (((P7IN&BIT0)!=BIT0)||((P6IN&BIT5)!=BIT5)) && (((P6IN&BIT0)!=BIT0)||((P6IN&BIT4)!=BIT4)));
                flag66=1;
            }
            else
            {
                stop();
                SetPwm_Init(24,1000,0);//左边
                SetPwm_Init(25,1000,0);//右边
            }
        }
    }
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78

    ② 车2

    void judge6(void)
    {
        xunji();
    
        if(flag66!=0)
        {
            if(((P6IN&BIT5)==BIT5)  && ((P6IN&BIT0)==BIT0) &&((P6IN&BIT4)!=BIT4)&&((P7IN&BIT0)!=BIT0) && (((P6IN&BIT2)==BIT2)||((P6IN&BIT1)==BIT1))&&flag66==1)
            {
                while(((P6IN&BIT5)==BIT5)  && ((P6IN&BIT0)==BIT0) &&((P6IN&BIT4)!=BIT4)&&((P7IN&BIT0)!=BIT0) && (((P6IN&BIT2)==BIT2)||((P6IN&BIT1)==BIT1)));
                left();
                SetPwm_Init(24,1000,700);//左边
                SetPwm_Init(25,1000,700);//右边
                delay_us(300000);
                flag66++;
            }
            if(((P6IN&BIT5)==BIT5)  && ((P6IN&BIT0)==BIT0) &&((P6IN&BIT4)!=BIT4)&&((P7IN&BIT0)!=BIT0) && (((P6IN&BIT2)==BIT2)||((P6IN&BIT1)==BIT1))&&flag66==2)
            {
                while(((P6IN&BIT5)==BIT5)  && ((P6IN&BIT0)==BIT0) &&((P6IN&BIT4)!=BIT4)&&((P7IN&BIT0)!=BIT0) && (((P6IN&BIT2)==BIT2)||((P6IN&BIT1)==BIT1)));
                left();
                SetPwm_Init(24,1000,700);//左边
                SetPwm_Init(25,1000,700);//右边
                delay_us(300000);
                flag66=0;
            }
        }
    
        if(((P6IN&BIT1)==BIT1)  && ((P6IN&BIT2)==BIT2) && ((P6IN&BIT3)==BIT3))
        {
            while(((P6IN&BIT1)==BIT1)  && ((P6IN&BIT2)==BIT2) && ((P6IN&BIT3)==BIT3));
            flag6++;
            if(flag6==1 || flag6==2)    delay_us(150000);
            if(flag6>=3&& flag6<=6)
            {
                flag6=10;
                right();
                SetPwm_Init(24,1000,700);//左边
                SetPwm_Init(25,1000,700);//右边
                delay_us(300000);
            }
            if(flag6>10)
            {
                flag6=-100;
                left();
                SetPwm_Init(24,1000,700);//左边
                SetPwm_Init(25,1000,700);//右边
                delay_us(300000);
            }
            while(((P6IN&BIT1)==BIT1)  && ((P6IN&BIT2)==BIT2) && ((P6IN&BIT3)==BIT3));
    
        }
    
        if(((P6IN&BIT1)!=BIT1) && ((P6IN&BIT2)!=BIT2) && ((P6IN&BIT3)!=BIT3) || (((P6IN&BIT5)!=BIT5)  && ((P6IN&BIT0)==BIT0) &&((P6IN&BIT1)==BIT1)&&((P6IN&BIT2)!=BIT2) &&((P6IN&BIT3)==BIT3) &&((P6IN&BIT4)==BIT4)&&((P7IN&BIT0)!=BIT0)) || (((P6IN&BIT5)!=BIT5)  && ((P6IN&BIT0)==BIT0) &&((P6IN&BIT1)!=BIT1)&&((P6IN&BIT2)!=BIT2) &&((P6IN&BIT3)==BIT3) &&((P6IN&BIT4)!=BIT4)&&((P7IN&BIT0)==BIT0))||(((P6IN&BIT5)!=BIT5)  && ((P6IN&BIT0)!=BIT0) &&((P6IN&BIT1)==BIT1)&&((P6IN&BIT2)!=BIT2) &&((P6IN&BIT3)==BIT3) &&((P6IN&BIT4)==BIT4)&&((P7IN&BIT0)!=BIT0))||(((P6IN&BIT5)!=BIT5)  && ((P6IN&BIT0)==BIT0) &&((P6IN&BIT1)==BIT1)&&((P6IN&BIT2)==BIT2) &&((P6IN&BIT3)==BIT3) &&((P6IN&BIT4)==BIT4)&&((P7IN&BIT0)!=BIT0))||(((P6IN&BIT5)!=BIT5)  && ((P6IN&BIT0)==BIT0) &&((P6IN&BIT1)==BIT1)&&((P6IN&BIT2)!=BIT2) &&((P6IN&BIT3)==BIT3) &&((P6IN&BIT4)!=BIT4)&&((P7IN&BIT0)==BIT0))||(((P6IN&BIT5)==BIT5)  && ((P6IN&BIT0)!=BIT0) &&((P6IN&BIT1)==BIT1)&&((P6IN&BIT2)==BIT2) &&((P6IN&BIT3)!=BIT3) &&((P6IN&BIT4)==BIT4)&&((P7IN&BIT0)!=BIT0)))
        {
            if( pill==0 && ((P7IN&BIT4)==BIT4) )     //拿走药品
            {
                pill=1;
                back();
                SetPwm_Init(24,1000,400);//左边
                SetPwm_Init(25,1000,400);//右边
                delay_us(700000);
                left();
                SetPwm_Init(24,1000,550);//左边
                SetPwm_Init(25,1000,650);//右边
                delay_us(700000);
                while(((P6IN&BIT1)!=BIT1) && ((P6IN&BIT2)!=BIT2) && ((P6IN&BIT3)!=BIT3) && (((P7IN&BIT0)!=BIT0)||((P6IN&BIT5)!=BIT5)) && (((P6IN&BIT0)!=BIT0)||((P6IN&BIT4)!=BIT4)));
                flag66=1;
            }
            else
            {
                stop();
                SetPwm_Init(24,1000,0);//左边
                SetPwm_Init(25,1000,0);//右边
                if(((P6IN&BIT1)!=BIT1) && ((P6IN&BIT2)!=BIT2) && ((P6IN&BIT3)!=BIT3) || (((P6IN&BIT5)!=BIT5)  && ((P6IN&BIT0)==BIT0) &&((P6IN&BIT1)==BIT1)&&((P6IN&BIT2)!=BIT2) &&((P6IN&BIT3)==BIT3) &&((P6IN&BIT4)==BIT4)&&((P7IN&BIT0)!=BIT0)) || (((P6IN&BIT5)!=BIT5)  && ((P6IN&BIT0)==BIT0) &&((P6IN&BIT1)!=BIT1)&&((P6IN&BIT2)!=BIT2) &&((P6IN&BIT3)==BIT3) &&((P6IN&BIT4)!=BIT4)&&((P7IN&BIT0)==BIT0))||(((P6IN&BIT5)!=BIT5)  && ((P6IN&BIT0)!=BIT0) &&((P6IN&BIT1)==BIT1)&&((P6IN&BIT2)!=BIT2) &&((P6IN&BIT3)==BIT3) &&((P6IN&BIT4)==BIT4)&&((P7IN&BIT0)!=BIT0))||(((P6IN&BIT5)!=BIT5)  && ((P6IN&BIT0)==BIT0) &&((P6IN&BIT1)==BIT1)&&((P6IN&BIT2)==BIT2) &&((P6IN&BIT3)==BIT3) &&((P6IN&BIT4)==BIT4)&&((P7IN&BIT0)!=BIT0))||(((P6IN&BIT5)!=BIT5)  && ((P6IN&BIT0)==BIT0) &&((P6IN&BIT1)==BIT1)&&((P6IN&BIT2)!=BIT2) &&((P6IN&BIT3)==BIT3) &&((P6IN&BIT4)!=BIT4)&&((P7IN&BIT0)==BIT0))||(((P6IN&BIT5)==BIT5)  && ((P6IN&BIT0)!=BIT0) &&((P6IN&BIT1)==BIT1)&&((P6IN&BIT2)==BIT2) &&((P6IN&BIT3)!=BIT3) &&((P6IN&BIT4)==BIT4)&&((P7IN&BIT0)!=BIT0)))
                {
                    UCA1IE |= UCRXIE;
                }
                else
                {
                    UCA1IE &= ~UCRXIE;
                }
            }
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84

    4. 通信处理

    ①蓝牙

    • 车1
    void blue_init(void){
        P4SEL |=BIT4+BIT5 ;                             // P4.5 P4.4 = USCI_A1 TXD/RXD
        UCA1CTL1 |= UCSWRST;                      // **Put state machine in reset**
        UCA1CTL1 |= UCSSEL_2;                     // SMCLK
        UCA1BR0 = 9;                              // 1MHz 115200 (see User's Guide)
        UCA1BR1 = 0;                              // 1MHz 115200
        UCA1MCTL |= UCBRS_1 + UCBRF_0;            // Modulation UCBRSx=1, UCBRFx=0
        UCA1CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**
        UCA1IE &= ~UCRXIE;                         // 关闭UART1的接收中断
        __enable_interrupt(); // 开启全局中断
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 车2
    #pragma vector=USCI_A1_VECTOR
    __interrupt void USCI_A1_ISR(void)
    {
      switch(__even_in_range(UCA1IV,4))
      {
    
      case 0:     
          break;                             // Vector 0 - no interrupt
      case 2:                                   // Vector 2 - RXIFG  接受中断
    
       while (!(UCA1IFG&UCTXIFG));    // USCI_A1 TX buffer ready?   UCTXIFG(USCI Transmit Interrupt Flag)
                                       //等待数据发送完成 完成UCTXIFG置1 跳出循环
       rx_flag++;
       if(rx_flag==11)
       {
           UCA1IE &= ~UCRXIE;   //关闭蓝牙接收
           back();
           SetPwm_Init(24,1000,400);//左边
           SetPwm_Init(25,1000,400);//右边
           delay_us(700000);
           left();
           SetPwm_Init(24,1000,550);//左边
           SetPwm_Init(25,1000,650);//右边
           delay_us(700000);
       }
       if(rx_flag==2)
       {
           rx_flag=10;
           if(UCA1RXBUF=='2'){
               find_num=2;
           }
           if(UCA1RXBUF=='4'){
               find_num=4;
           }
           if(UCA1RXBUF=='6'){
               find_num=6;
           }
           if(UCA1RXBUF=='8'){
               find_num=8;
           }
           if(UCA1RXBUF=='5'){
               find_num=5;
           }
           if(UCA1RXBUF=='1'){
               find_num=1;
           }
           if(UCA1RXBUF=='3'){
               find_num=3;
           }
           if(UCA1RXBUF=='7'){
               find_num=7;
    
           }
           UCA1IE &= ~UCRXIE;   //关闭蓝牙接收
       }
    
       break;
      case 4:
          break;                             // Vector 4 - TXIFG  发送中断
    
      default: break;
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63

    ②OpenMV

    void openmv_init(void){
        P3SEL |=BIT3+BIT4 ;                             // P4.5 P4.4 = USCI_A1 TXD/RXD
        UCA0CTL1 |= UCSWRST;                      // **Put state machine in reset**
        UCA0CTL1 |= UCSSEL_2;                     // SMCLK
        UCA0BR0 = 9;                              // 1MHz 115200 (see User's Guide)
        UCA0BR1 = 0;                              // 1MHz 115200
        UCA0MCTL |= UCBRS_1 + UCBRF_0;            // Modulation UCBRSx=1, UCBRFx=0
        UCA0CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**
        UCA0IE |= UCRXIE;                         // Enable USCI_A1 RX interrupt
        __enable_interrupt(); // 开启全局中断
    }
    
    #pragma vector=USCI_A0_VECTOR
    __interrupt void USCI_A0_ISR(void)
    {
    
      switch(__even_in_range(UCA0IV,4))
      {
    
      case 0:     
          break;                             // Vector 0 - no interrupt
      case 2:                                   // Vector 2 - RXIFG  接受中断
    
       while (!(UCA0IFG&UCTXIFG));    // USCI_A1 TX buffer ready?   UCTXIFG(USCI Transmit Interrupt Flag)
                                       //等待数据发送完成 完成UCTXIFG置1 跳出循环
    
       if(UCA0RXBUF=='2'){
           find_num=2;
           UCA1TXBUF='2';
       }
       if(UCA0RXBUF=='4'){
           find_num=4;
           UCA1TXBUF='4';
       }
       if(UCA0RXBUF=='6'){
           find_num=6;
           UCA1TXBUF='6';
       }
       if(UCA0RXBUF=='8'){
           find_num=8;
           UCA1TXBUF='8';
       }
       if(UCA0RXBUF=='5'){
           find_num=5;
           UCA1TXBUF='5';
       }
       if(UCA0RXBUF=='1'){
           find_num=1;
           UCA1TXBUF='1';
       }
       if(UCA0RXBUF=='3'){
           find_num=3;
           UCA1TXBUF='3';
       }
       if(UCA0RXBUF=='7'){
           find_num=7;
           UCA1TXBUF='7';
       }
    
       UCA0IE &= ~(UCRXIE); 
       break;
      case 4:
          break;                       
      default: break;
      }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67

    四、视频展示

    送药小车(拓展篇)

    以上若有不妥之处,烦请批评指正!
    疑难解答或技术交流联系下方wx即可👇👇👇

  • 相关阅读:
    Web安全测试详解
    linux权限维持(二)
    lvi-sam 总结
    基于Infineon开发板实现RT-Thread物联网 DEMO
    mysql8离线安装
    JaVers:自动化数据审计
    【软考】5.1 七层模型/局域网/TCP-IP协议
    工厂设计模式
    RIP动态路由协议详解
    实验十二 运算符重载
  • 原文地址:https://blog.csdn.net/Dustinthewine/article/details/131152571