达尔文OP2解读(四)物理按键模式选择

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ben_xiao_hai_123/article/details/78604228
         //static int BUTTON;
	 //static int x;x=0则是先声明了,而后才进行赋值,在赋值操作前,x所指向的内存地址的内容是不能确定的
	 //m_old_btn 初始值为0
    if(m_old_btn == MotionStatus::BUTTON)
    {
        if(m_cur_mode == READY && m_is_started == 0 && m_chicago_mode_cnt > MAX_CHICAGO_CNT)//max_chicago=90
        {
            fprintf(stderr, "CHICAGO MODE ! \n\n");
			m_cur_mode = SOCCER;
			m_old_btn == BTN_START;
        }
        else if(m_cur_mode == READY && m_is_started == 0 && m_chicago_mode_cnt <= MAX_CHICAGO_CNT)
        {
            m_chicago_mode_cnt++;
			return;
        }
		else
        {
            m_chicago_mode_cnt = 0;
            return;
        }
    }
    else
    {
        m_chicago_mode_cnt = 0;
        m_old_btn = MotionStatus::BUTTON;
    }

    if(m_old_btn & BTN_MODE)//BTN_MODE = 1 BTN_START = 2
		//(m_old_btn & BTN_MODE) = 1 时代表按键按下
		//BTN_MODE = 1 是模式选择按键
    {
        fprintf(stderr, "Mode button pressed.. \n");

        if(m_is_started != 0)
        {
            m_is_started    = 0;
            m_cur_mode      = READY;//初始值为1
            LinuxActionScript::m_stop = 1;

            Walking::GetInstance()->Stop();//走路停下
            // Joint Enable...
            Action::GetInstance()->m_Joint.SetEnableBody(true, true);
			//演示准备模式
            while(Action::GetInstance()->Start(15) == false) usleep(8000);
            while(Action::GetInstance()->IsRunning() == true) usleep(8000);
        }
        else
        {
            m_cur_mode++;
            if(m_cur_mode >= MAX_MODE) m_cur_mode = READY;//m_cur_mode加到(>=5)5时,重新变成1 否则进行++操作
        }

        MotionManager::GetInstance()->SetEnable(false);
        usleep(10000);
		//模式判断:单按一个物理按键,引起相应的物理led灯亮灭,播报相应的语音文件
        if(m_cur_mode == READY)//1
        {
            cm730.WriteByte(CM730::P_LED_PANNEL, 0x01|0x02|0x04, NULL);
            LinuxActionScript::PlayMP3("../../../Data/mp3/Demonstration ready mode.mp3");
        }
        else if(m_cur_mode == SOCCER)//2
        {
            cm730.WriteByte(CM730::P_LED_PANNEL, 0x01, NULL);
            LinuxActionScript::PlayMP3("../../../Data/mp3/Autonomous soccer mode.mp3");
        }
        else if(m_cur_mode == MOTION)//3
        {
            cm730.WriteByte(CM730::P_LED_PANNEL, 0x02, NULL);
            LinuxActionScript::PlayMP3("../../../Data/mp3/Interactive motion mode.mp3");
        }
        else if(m_cur_mode == VISION)//4
        {
            cm730.WriteByte(CM730::P_LED_PANNEL, 0x04, NULL);
            LinuxActionScript::PlayMP3("../../../Data/mp3/Vision processing mode.mp3");
        }
    }

1.按下达尔文op2模式选择按键,依次会变为演示准备模式,自主足球模式,互动模式,视觉处理模式。

2.循环播报:当模式为视觉处理模式时,再次按下按键,会重新回到演示准备模式。(加到5重新变为0)

3.led模式跟随,选择不同的模式,会有不同的led灯亮起(在达尔文op2的背部,颜色不同来区分)。

4.音频播放,相应的模式会有不同的音频文件播出。

5.走路停下在此函数中出现:Walking:;Getinstance()->Stop();

6.物理按键:BTN_MODE=1,BTN_START=2;

猜你喜欢

转载自blog.csdn.net/ben_xiao_hai_123/article/details/78604228
OP