servos.h 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. /*****************************************************************
  2. Copyright: 2016-2020 ROS小课堂 www.corvin.cn
  3. Description:
  4. 定义舵机操作的类SweepServo,舵机连接的引脚和初始的舵机角度.在这里连接
  5. 的两个舵机分别连接5,6两个引脚,5号引脚连接左右旋转的舵机,6号引脚连接
  6. 上下移动的舵机.其中设置左右旋转的舵机初始角度为90度,上下转动舵机的初始
  7. 角度为90度.在代码里总共可以连接12个舵机,当然你的舵机可以根据arduino板
  8. 的不同来连接不同的引脚,同时修改引脚的初始角度即可.
  9. Author: corvin
  10. History:
  11. 20181128: initial this comment.
  12. 20181130: 新增了舵机使能状态的标识,而且最多可接12个舵机。
  13. 20181204: 新增getCurrentPos()函数用户获取当前舵机的角度。
  14. 20200902: 更新上下转动的舵机初始角度为90度,这样舵机的线就可以朝后了.
  15. ******************************************************************/
  16. #ifndef _SERVOS_H_
  17. #define _SERVOS_H_
  18. #define N_SERVOS 12
  19. #define SERVO_ENABLE 1
  20. #define SERVO_DISABLE 0
  21. //Define All Servos's Pins
  22. byte myServoPins[N_SERVOS] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
  23. // Initial Servo Position [0, 180] degrees
  24. int servoInitPosition[N_SERVOS] = {0, 0, 0, 90, 90, 0, 0, 0, 0, 0, 0, 0};
  25. class SweepServo
  26. {
  27. public:
  28. SweepServo();
  29. void initServo(int servoPin, unsigned int initPosition, unsigned int stepDelayMs);
  30. void setTargetPos(unsigned int targetPos, unsigned int stepDelayMs);
  31. int getCurrentPos(void);
  32. void setEnable(byte flag);
  33. void moveServo(void);
  34. byte isEnabled(void);
  35. Servo getServoObj();
  36. private:
  37. Servo servo;
  38. unsigned int stepDelayMs;
  39. unsigned long lastMoveTime;
  40. int currentPosDegrees;
  41. int targetPosDegrees;
  42. byte enabled;
  43. };
  44. SweepServo myServos[N_SERVOS];
  45. #endif