//-----------------------------------------------水平电机移动处理---------------------------------------- void DianJ_ShuiPMove_Manage( ) reentrant //游戏处理(必须在游戏进行中) { uchar8 ForeDirect1 = 0; uchar8 ForeDirect2 = 0; if (StopToMoveCountFlag) //是否允许电机从停止到下次运动的研时计数 { StopToMoveCount ++; if (StopToMoveCount >90) { RandFlag = 1; StopToMoveCount = 0; StopToMoveCountFlag = 0; } } if (RandFlag) //允许产生种子(也就是说明青蛙可以运动了) { RandFlag = 0; //清零 StopOrMoveFlag = 1; //电机是否移动(0 不移动 1 移动) RandSeek ++; //种子变化 if(RandSeek > 100) //种子清零 { RandSeek = 0; } srand(RandSeek); Now_Frog_Position = (rand()%5) + 1 ; //值的范围为 [1,2,3,4,5] RecordNowPosition(); //此函数得到最后电机经过哪里得到 Last_Frog_Position 的值 ForeDirect = Last_Frog_Position; if (Last_Frog_Position == Now_Frog_Position) //如果产生的随机数和上一位置的值相同则重新产生随机数 { RandSeek ++; //种子变化 Now_Frog_Position = (rand() %5) + 1 ; //值的范围为 [1,2,3,4,5] } Dianj_ShuP_Move_Direct = 1; } if (Dianj_ShuP_Move_Direct)//电机水平向哪个放启动,是否设置 ( 0 没有 1 有) { Dianj_ShuP_Move_Direct = 0; if (Last_Frog_Position > Now_Frog_Position) //说明新产生的随机数在左边 { U23373839_False(); //使 U2 U3 U37 U38 U39 禁能 BujDianj_Control = (BujDianj_Control_Temp | 0x02); //水平步进电机的方向向左 BujDianj_Control_Temp = BujDianj_Control; //把 BujDianj_Control 赋给中间变量 ForeDirect1 = 1; ForeDirect2 = 0; } else { U23373839_False(); //使 U2 U3 U37 U38 U39 禁能 BujDianj_Control = (BujDianj_Control_Temp & 0xfd); //水平步进电机的方向向右 BujDianj_Control_Temp = BujDianj_Control; //把 BujDianj_Control 赋给中间变量 ForeDirect2 = 1; ForeDirect1 = 0; } }//if (Dianj_ShuP_Move_Direct == 0)//电机水平向哪个放启动,是否设置 ( 0 没有 1 有) if(StopOrMoveFlag) { //--------------------------------电机转动-------------------------------------------- BujDianjMoveFlag = 1; //把步进电机速度打开 U23373839_False(); //使 U2 U3 U37 U38 U39 禁能 BujDianj_Control = (BujDianj_Control_Temp & 0xfb); //水平步进电机转动 BujDianj_Control_Temp = BujDianj_Control; //把 BujDianj_Control 赋给中间变量 U2_Enable(); //U2 使能 if(DainJ_ShuiP_Left_ONe == 0) { if ((Now_Frog_Position ^ 1) == 0) //如果到了随机抛出数地方,就停止 { StopOrMoveFlag = 0 ; //电机移动标志清零 StopToMoveCountFlag = 1; //允许研时计数 BujDianjMoveFlag = 0; //把步进电机速度停止 } } //--------------------------------电机转动-------------------------------------------- }//if(StopOrMoveFlag) }
上面的程序,如果随机抛出的是 1,而电机运动到了 DainJ_ShuiP_Left_ONe ,则 电机就停止
假设 1 在最左边 5 在 最右边 现在我需要的是, 不管抛出的是 1,2,3,4,5 中的任何一个 只要电机是从右往左运动的,只要到了 1 这个位置都要停
我是这样写的: U2_Enable(); //U2 使能 if(DainJ_ShuiP_Left_ONe == 0) { if (ForeDirect1) //如果到了随机抛出数地方,就停止 { StopOrMoveFlag = 0 ; //电机移动标志清零 StopToMoveCountFlag = 1; //允许研时计数 BujDianjMoveFlag = 0; //把步进电机速度停止 } } 可是硬是不行啊, 各位大哥,我是错在哪里啊? 应该要怎么写? 谢谢!
上面的程序是放在 定时器里执行的 每 10ms 就执行一偏
|