找回密码
 马上注册

QQ登录

只需一步,快速开始

查看: 4308|回复: 2

哪位大牛帮我看看这个NXC程序

[复制链接]
发表于 2011-10-16 14:10:19 | 显示全部楼层 |阅读模式
本帖最后由 tyker1 于 2011-10-16 14:33 编辑

厄~是这样的,刚刚拿到乐高9797(全国比赛时候省科技局送给学校的,然后分配了一套给我使用),然后就下了NXC来写程序,按照搭建手册里面的那个“探索者”搭了一个“探索者”起来,我想让它在前进的时候当跟障碍物距离小于或者等于10cm的时候停止,然后用A接口连接的马达转动超声探测器来查找出路(设置正转也就是右边只转不超过45度然后左边转动探索最多315度刚好能够把360度方向全部探测一遍)找到之后记录下对应的方位,倒退20cm之后(也就是说退到离障碍大于等于30cm的地方)控制轮子转向到对应的方位。可是现在出现这么个问题就是我的超声传感器在遇到障碍的时候要么不动(3个马达都不动,因为关掉了轮子的2个马达)要么就是一直在转直到被线卡住,后续程序都没有被执行,不知道是为什么,希望各位大牛帮我看看。
程序如下:
  1. #include "NXCDefs.h"
  2. #define NEAR 10
  3. #define backward 30
  4. #define h_WheelBase 5
  5. #define d_Wheel 2.45
  6. #define Turn_Angle(alpha) ((h_WheelBase*alpha/d_Wheel))

  7. task main()
  8. {
  9. long t_angle =0;
  10. DrawTextType dtFind;
  11. dtFind.Location.X = 0;
  12. dtFind.Location.Y = LCD_LINE2;
  13. dtFind.Options = 0x01;
  14. SetSensorLowspeed(IN_4);
  15. while (true)
  16. {
  17. OnFwd(OUT_BC,50);
  18. while(SensorUS(IN_4) > NEAR);
  19. Off(OUT_BC);


  20. ResetRotationCount(OUT_A);
  21. OnFwd(OUT_A,20);
  22. while((SensorUS(IN_4) <= NEAR) && (MotorRotationCount(OUT_A) <= 45))
  23. {
  24. t_angle = MotorRotationCount(OUT_A);
  25. dtFind.Text = "Ang=" + NumToStr(MotorRotationCount(OUT_A)) +" Dis=" +NumToStr(SensorUS(IN_4));
  26. SysDrawText(dtFind);
  27. }
  28. Off(OUT_A);
  29. ResetRotationCount(OUT_A);
  30. RotateMotorEx(OUT_A,20,(-t_angle),0,true,true);
  31. ResetRotationCount(OUT_A);
  32. if (t_angle > 45)
  33. {
  34. OnRev(OUT_A,20);
  35. while(SensorUS(IN_4) <= NEAR) t_angle = MotorRotationCount(OUT_A);
  36. Off(OUT_A);
  37. ResetRotationCount(OUT_A);
  38. if (t_angle > 0) t_angle = - t_angle;
  39. }
  40. else
  41. {

  42. }

  43. OnRev(OUT_BC,30);
  44. while(SensorUS(IN_4) <= backward);
  45. Off(OUT_BC);

  46. if (t_angle > 0)
  47. {
  48. RotateMotorEx(OUT_B,30,Turn_Angle(t_angle),0,true,true);
  49. RotateMotorEx(OUT_C,30,-Turn_Angle(t_angle),0,true,true);
  50. }
  51. else
  52. {
  53. RotateMotorEx(OUT_B,30,-Turn_Angle(t_angle),0,true,true);
  54. RotateMotorEx(OUT_C,30,Turn_Angle(t_angle),0,true,true);
  55. }

  56. }

  57. }
复制代码

如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
发表于 2011-10-16 18:42:51 | 显示全部楼层
不动可能是因为能量不够,20可能还不足以让马达动。
其他的问题,我也没看出哪有问题
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2011-10-16 18:58:23 | 显示全部楼层
厄~另外一个情况,我发现,把超声探测器拿下来拿在手上模拟的时候,A口对应的马达要么不转要么一直转,而且还能在转的同时继续执行其他指令(到底什么情况,是不是因为电池电量严重不足了~?气死了我,或者是因为刷固件的时候机子被格式化过的问题~?)
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|中文乐高 ( 桂ICP备13001575号-7 )

GMT+8, 2024-6-20 15:05 , Processed in 0.168701 second(s), 18 queries .

Powered by Discuz! X3.5

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表