按摩椅程序设计思路

2020-02-06 10:21发布

本帖最后由 xurenhui 于 2014-6-20 00:12 编辑

大家好,我刚开始做按摩椅程序设计,请问一下能说一下程序设计的思路吗,
        switch(Motor_Channel)
        {
                case 0x1:
                        if(First_Mode[0]>=Timer0_Count        )/*Action_1--WalkMotor往下行走*/
                        {
                                PumpMotor_Shoulders_Pin=1;
                                WalkMotor_Pin=0;       
                        }
                        else
                        {
                                PumpMotor_Shoulders_Pin=0;
                                ++Shoulder_Channel;
                                Timer0_Count=0;/*计时清零*/
                        }
                        break;
                case 0x02:
                        if(First_Mode[1]>=Timer0_Count)/*Action_2--WalkMotor往上行走*/
                        {
                                WalkMotor_Pin=1;
                        }
                        else
                        {
                                ++Shoulder_Channel;
                                Timer0_Count=0;                        /*计时清零*/
                        }
                        break;
                case 0x03:
                        if(First_Mode[2]>=Timer0_Count)        /*Action_2--KneadMotor扭捏动作*/
                        {
                                VIBOne_Pin=1;       
                                VIBTwo_Pin=1;
                                PumpMotor_Arm_Pin=1;
                                CCPR9L=90;
                                CCP9CON=0x0f;
                                T4CONbits.TMR4ON=1;                               
                        }
                        else
                        {
                                ++Shoulder_Channel;
                                Timer0_Count=0;                        /*计时清零*/
                        }
                        break;               
        }
这个程序我可以不采用Switch   case  吗,还有别的办法实现吗,上面每一个case里面就是一个手法,而且是一定要等待执行完
该程序,才能执行下面的case 程序,还有其他的方法吗?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
78条回答
snoopyzz
1楼-- · 2020-02-11 11:02
xurenhui 发表于 2014-6-21 17:50
兄弟啊,能分享一点你的思路吗,我现在也是闭门造车啊,

思路在32L不是已经说了吗?
xurenhui
2楼-- · 2020-02-11 11:44
按摩椅在自动模式下运行,当我手动调节按摩椅靠背的角度时,会跟自动模式下有冲突,
特别是在自动模式下靠背往后倾斜时,手动控制它往前靠时,没有按照正确方向走,该怎么处理这些问题啊
xurenhui
3楼-- · 2020-02-11 14:04
 精彩回答 2  元偷偷看……
xurenhui
4楼-- · 2020-02-11 14:21
snoopyzz 发表于 2014-6-21 15:10
其实我也好奇大家是怎么做按摩椅动作的...我这套东西完全是我自己闭门造车的...

设计之初, 觉得把动作写 ...


请问一下按摩椅行走电机大家是如何计圈的,是采用中断吗,还是有别的方法?
snoopyzz
5楼-- · 2020-02-11 20:12
xurenhui 发表于 2014-8-12 15:18
请问一下按摩椅行走电机大家是如何计圈的,是采用中断吗,还是有别的方法? ...

看信号速度...我的主循环周期是2ms...转的太快的话就用中断, 否则用主循环查询

通常主循环查询就OK...但如果程序架构不合理, 经常阻塞式delay的话, 是没法用查询法的


我的架构保证了每个主循环周期都不超过2ms
xurenhui
6楼-- · 2020-02-12 00:25
snoopyzz 发表于 2014-8-12 15:25
看信号速度...我的主循环周期是2ms...转的太快的话就用中断, 否则用主循环查询

通常主循环查询就OK...但 ...

谢谢,
//***********************************************       
                        case 1: //圈数决定,当前圈数已经在nCurMoveCycle
                       
                                if( !AUTO_WORK_bits.AutoProcess_ing )
                                {
                                        if( CheckWise_step == 0 )
                                        {
                                                CheckWise_step = 1;
                                                AUTO_WORK_bits.K_M_Z_start = 0;
                                        }
                                        else if( CheckWise_step == 1)
                                        {
                                                if( AUTO_WORK_bits.wide_middle_narrow )
                                                {
                                                        nActualMoveDir = Mov_Mode_appoint_Postion;    // 运行方式
                                                        up_down_count_scal = ( up_down_count_val >>3 );
                                                        current_up_down_count_val = (nCurMoveCycle * up_down_count_scal);
                                                       
                                                        Mov_Mode_step = 0;     //允许背靠行走程序运行
                                                        AUTO_WORK_bits.AutoProcess_ing = 1;
                                                }               
                                        }
这个是一个好心的网友给了一些参考程序给我,上面的程序处在计圈状态,不知道为什么这里圈数右移3位的作用是干吗的,

一周热门 更多>