roomba.h 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. #ifndef ROOMBA_COMMANDS_H
  2. #define ROOMBA_COMMANDS_H
  3. /* "Roomba mode" States */
  4. #define ROOMBA_MODE_OFF 0
  5. #define ROOMBA_MODE_DRIVE 1
  6. #define ROOMBA_MODE_FULL 2
  7. #define ROOMBA_MODE_CLEAN 3
  8. #define ROOMBA_MODE_SPOT 4
  9. #define ROOMBA_MODE_DOCK 5
  10. /* Roomba commands */
  11. #define ROOMBA_START 0x80
  12. #define ROOMBA_BAUD 0x81 // len = 1
  13. #define ROOMBA_CTRL 0x82
  14. #define ROOMBA_SAFE 0x83
  15. #define ROOMBA_FULL 0x84
  16. #define ROOMBA_POWER 0x85
  17. #define ROOMBA_SPOT 0x86
  18. #define ROOMBA_CLEAN 0x87
  19. #define ROOMBA_MAX 0x88
  20. #define ROOMBA_DRIVE 0x89 // len = 4
  21. #define ROOMBA_MOTORS 0x8a // len = 1
  22. #define ROOMBA_LEDS 0x8b // len = 3
  23. #define ROOMBA_SONG 0x8c // len = ...
  24. #define ROOMBA_PLAY 0x8d // len = 1
  25. #define ROOMBA_SENSORS 0x8e // len = 1
  26. #define ROOMBA_DOCK 0x8f
  27. /* Sensor bit-shifting */
  28. #define SENSE_DROP_CASTER (4)
  29. #define SENSE_DROP_LEFT (3)
  30. #define SENSE_DROP_RIGHT (2)
  31. #define SENSE_BUMP_LEFT (1)
  32. #define SENSE_BUMP_RIGHT (0)
  33. struct __attribute__((packed)) sensors_code1 {
  34. uint8_t bumps_wheeldrop;
  35. uint8_t wall;
  36. uint8_t cliff_left;
  37. uint8_t cliff_front_left;
  38. uint8_t cliff_front_right;
  39. uint8_t cliff_right;
  40. uint8_t virtual_wall;
  41. uint8_t motor_overcurrents;
  42. uint8_t dirt_detect_left;
  43. uint8_t dirt_detect_right;
  44. };
  45. struct __attribute__((packed)) sensors_code2 {
  46. uint8_t rc_detect;
  47. uint8_t buttons;
  48. uint16_t distance;
  49. uint16_t angle;
  50. };
  51. struct __attribute__((packed)) sensors_code3 {
  52. uint8_t charging_state;
  53. uint8_t voltage_lsb;
  54. uint8_t voltage_msb;
  55. uint8_t current_lsb;
  56. uint8_t current_msb;
  57. uint8_t temperature;
  58. uint16_t charge_mah;
  59. uint16_t capacity_mah;
  60. };
  61. struct __attribute__((packed)) roomba_sensors_data {
  62. int valid;
  63. uint8_t drop_caster, drop_left, drop_right;
  64. uint8_t bump_left, bump_right;
  65. uint8_t wall;
  66. uint8_t cliff_left, cliff_frontleft, cliff_frontright, cliff_right;
  67. uint8_t ovc;
  68. };
  69. void roomba_cmd(uint8_t cmd, uint8_t *payload, uint8_t len);
  70. /* Sensors */
  71. struct roomba_sensors_data *roomba_sensors(void);
  72. /* Motors */
  73. void motors_clean_set(int brush, int vac, int side);
  74. void motors_spin(int cw);
  75. void motors_stop(void);
  76. void motors_drive(int16_t speed, int16_t radius);
  77. #endif