|
本帖最后由 tyker1 于 2011-10-16 14:33 编辑
厄~是这样的,刚刚拿到乐高9797(全国比赛时候省科技局送给学校的,然后分配了一套给我使用),然后就下了NXC来写程序,按照搭建手册里面的那个“探索者”搭了一个“探索者”起来,我想让它在前进的时候当跟障碍物距离小于或者等于10cm的时候停止,然后用A接口连接的马达转动超声探测器来查找出路(设置正转也就是右边只转不超过45度然后左边转动探索最多315度刚好能够把360度方向全部探测一遍)找到之后记录下对应的方位,倒退20cm之后(也就是说退到离障碍大于等于30cm的地方)控制轮子转向到对应的方位。可是现在出现这么个问题就是我的超声传感器在遇到障碍的时候要么不动(3个马达都不动,因为关掉了轮子的2个马达)要么就是一直在转直到被线卡住,后续程序都没有被执行,不知道是为什么,希望各位大牛帮我看看。
程序如下:
- #include "NXCDefs.h"
- #define NEAR 10
- #define backward 30
- #define h_WheelBase 5
- #define d_Wheel 2.45
- #define Turn_Angle(alpha) ((h_WheelBase*alpha/d_Wheel))
- task main()
- {
- long t_angle =0;
- DrawTextType dtFind;
- dtFind.Location.X = 0;
- dtFind.Location.Y = LCD_LINE2;
- dtFind.Options = 0x01;
- SetSensorLowspeed(IN_4);
- while (true)
- {
- OnFwd(OUT_BC,50);
- while(SensorUS(IN_4) > NEAR);
- Off(OUT_BC);
- ResetRotationCount(OUT_A);
- OnFwd(OUT_A,20);
- while((SensorUS(IN_4) <= NEAR) && (MotorRotationCount(OUT_A) <= 45))
- {
- t_angle = MotorRotationCount(OUT_A);
- dtFind.Text = "Ang=" + NumToStr(MotorRotationCount(OUT_A)) +" Dis=" +NumToStr(SensorUS(IN_4));
- SysDrawText(dtFind);
- }
- Off(OUT_A);
- ResetRotationCount(OUT_A);
- RotateMotorEx(OUT_A,20,(-t_angle),0,true,true);
- ResetRotationCount(OUT_A);
- if (t_angle > 45)
- {
- OnRev(OUT_A,20);
- while(SensorUS(IN_4) <= NEAR) t_angle = MotorRotationCount(OUT_A);
- Off(OUT_A);
- ResetRotationCount(OUT_A);
- if (t_angle > 0) t_angle = - t_angle;
- }
- else
- {
- }
- OnRev(OUT_BC,30);
- while(SensorUS(IN_4) <= backward);
- Off(OUT_BC);
- if (t_angle > 0)
- {
- RotateMotorEx(OUT_B,30,Turn_Angle(t_angle),0,true,true);
- RotateMotorEx(OUT_C,30,-Turn_Angle(t_angle),0,true,true);
- }
- else
- {
- RotateMotorEx(OUT_B,30,-Turn_Angle(t_angle),0,true,true);
- RotateMotorEx(OUT_C,30,Turn_Angle(t_angle),0,true,true);
- }
- }
- }
复制代码
|
|