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

来源:互联网 发布:渗透结晶防水涂料与js 编辑:程序博客网 时间:2024/06/05 19:24
         //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;

原创粉丝点击