12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- #ifndef ROOMBA_COMMANDS_H
- #define ROOMBA_COMMANDS_H
- /* "Roomba mode" States */
- #define ROOMBA_MODE_OFF 0
- #define ROOMBA_MODE_DRIVE 1
- #define ROOMBA_MODE_FULL 2
- #define ROOMBA_MODE_CLEAN 3
- #define ROOMBA_MODE_SPOT 4
- #define ROOMBA_MODE_DOCK 5
- /* Roomba commands */
- #define ROOMBA_START 0x80
- #define ROOMBA_BAUD 0x81 // len = 1
- #define ROOMBA_CTRL 0x82
- #define ROOMBA_SAFE 0x83
- #define ROOMBA_FULL 0x84
- #define ROOMBA_POWER 0x85
- #define ROOMBA_SPOT 0x86
- #define ROOMBA_CLEAN 0x87
- #define ROOMBA_MAX 0x88
- #define ROOMBA_DRIVE 0x89 // len = 4
- #define ROOMBA_MOTORS 0x8a // len = 1
- #define ROOMBA_LEDS 0x8b // len = 3
- #define ROOMBA_SONG 0x8c // len = ...
- #define ROOMBA_PLAY 0x8d // len = 1
- #define ROOMBA_SENSORS 0x8e // len = 1
- #define ROOMBA_DOCK 0x8f
- /* Sensor bit-shifting */
- #define SENSE_DROP_CASTER (4)
- #define SENSE_DROP_LEFT (3)
- #define SENSE_DROP_RIGHT (2)
- #define SENSE_BUMP_LEFT (1)
- #define SENSE_BUMP_RIGHT (0)
- struct __attribute__((packed)) sensors_code1 {
- uint8_t bumps_wheeldrop;
- uint8_t wall;
- uint8_t cliff_left;
- uint8_t cliff_front_left;
- uint8_t cliff_front_right;
- uint8_t cliff_right;
- uint8_t virtual_wall;
- uint8_t motor_overcurrents;
- uint8_t dirt_detect_left;
- uint8_t dirt_detect_right;
- };
- struct __attribute__((packed)) sensors_code2 {
- uint8_t rc_detect;
- uint8_t buttons;
- uint16_t distance;
- uint16_t angle;
- };
- struct __attribute__((packed)) sensors_code3 {
- uint8_t charging_state;
- uint8_t voltage_lsb;
- uint8_t voltage_msb;
- uint8_t current_lsb;
- uint8_t current_msb;
- uint8_t temperature;
- uint16_t charge_mah;
- uint16_t capacity_mah;
- };
- struct __attribute__((packed)) roomba_sensors_data {
- int valid;
- uint8_t drop_caster, drop_left, drop_right;
- uint8_t bump_left, bump_right;
- uint8_t wall;
- uint8_t cliff_left, cliff_frontleft, cliff_frontright, cliff_right;
- uint8_t ovc;
- };
- void roomba_cmd(uint8_t cmd, uint8_t *payload, uint8_t len);
- /* Sensors */
- struct roomba_sensors_data *roomba_sensors(void);
- /* Motors */
- void motors_clean_set(int brush, int vac, int side);
- void motors_spin(int cw);
- void motors_stop(void);
- void motors_drive(int16_t speed, int16_t radius);
- #endif
|