[136] | 1 | #ifndef ArduinoRobot_h
|
---|
| 2 | #define ArduinoRobot_h
|
---|
| 3 |
|
---|
| 4 | #include "EasyTransfer2.h"
|
---|
| 5 | #include "Multiplexer.h"
|
---|
| 6 | #include "LineFollow.h"
|
---|
| 7 | //#include "IRremote.h"
|
---|
| 8 |
|
---|
| 9 | #if ARDUINO >= 100
|
---|
| 10 | #include "Arduino.h"
|
---|
| 11 | #else
|
---|
| 12 | #include "WProgram.h"
|
---|
| 13 | #endif
|
---|
| 14 |
|
---|
| 15 | //Command code
|
---|
| 16 | #define COMMAND_SWITCH_MODE 0
|
---|
| 17 | #define COMMAND_RUN 10
|
---|
| 18 | #define COMMAND_MOTORS_STOP 11
|
---|
| 19 | #define COMMAND_ANALOG_WRITE 20
|
---|
| 20 | #define COMMAND_DIGITAL_WRITE 30
|
---|
| 21 | #define COMMAND_ANALOG_READ 40
|
---|
| 22 | #define COMMAND_ANALOG_READ_RE 41
|
---|
| 23 | #define COMMAND_DIGITAL_READ 50
|
---|
| 24 | #define COMMAND_DIGITAL_READ_RE 51
|
---|
| 25 | #define COMMAND_READ_IR 60
|
---|
| 26 | #define COMMAND_READ_IR_RE 61
|
---|
| 27 | #define COMMAND_ACTION_DONE 70
|
---|
| 28 | #define COMMAND_READ_TRIM 80
|
---|
| 29 | #define COMMAND_READ_TRIM_RE 81
|
---|
| 30 | #define COMMAND_PAUSE_MODE 90
|
---|
| 31 | #define COMMAND_LINE_FOLLOW_CONFIG 100
|
---|
| 32 |
|
---|
| 33 |
|
---|
| 34 | //component codename
|
---|
| 35 | #define CN_LEFT_MOTOR 0
|
---|
| 36 | #define CN_RIGHT_MOTOR 1
|
---|
| 37 | #define CN_IR 2
|
---|
| 38 |
|
---|
| 39 | //motor board modes
|
---|
| 40 | #define MODE_SIMPLE 0
|
---|
| 41 | #define MODE_LINE_FOLLOW 1
|
---|
| 42 | #define MODE_ADJUST_MOTOR 2
|
---|
| 43 | #define MODE_IR_CONTROL 3
|
---|
| 44 |
|
---|
| 45 | //bottom TKs, just for communication purpose
|
---|
| 46 | #define B_TK1 201
|
---|
| 47 | #define B_TK2 202
|
---|
| 48 | #define B_TK3 203
|
---|
| 49 | #define B_TK4 204
|
---|
| 50 |
|
---|
| 51 | /*
|
---|
| 52 | A message structure will be:
|
---|
| 53 | switch mode (2):
|
---|
| 54 | byte COMMAND_SWITCH_MODE, byte mode
|
---|
| 55 | run (5):
|
---|
| 56 | byte COMMAND_RUN, int speedL, int speedR
|
---|
| 57 | analogWrite (3):
|
---|
| 58 | byte COMMAND_ANALOG_WRITE, byte codename, byte value;
|
---|
| 59 | digitalWrite (3):
|
---|
| 60 | byte COMMAND_DIGITAL_WRITE, byte codename, byte value;
|
---|
| 61 | analogRead (2):
|
---|
| 62 | byte COMMAND_ANALOG_READ, byte codename;
|
---|
| 63 | analogRead _return_ (4):
|
---|
| 64 | byte COMMAND_ANALOG_READ_RE, byte codename, int value;
|
---|
| 65 | digitalRead (2):
|
---|
| 66 | byte COMMAND_DIGITAL_READ, byte codename;
|
---|
| 67 | digitalRead _return_ (4):
|
---|
| 68 | byte COMMAND_DIGITAL_READ_RE, byte codename, int value;
|
---|
| 69 | read IR (1):
|
---|
| 70 | byte COMMAND_READ_IR;
|
---|
| 71 | read IR _return_ (9):
|
---|
| 72 | byte COMMAND_READ_IR_RE, int valueA, int valueB, int valueC, int valueD;
|
---|
| 73 |
|
---|
| 74 |
|
---|
| 75 | */
|
---|
| 76 |
|
---|
| 77 | class RobotMotorBoard:public LineFollow{
|
---|
| 78 | public:
|
---|
| 79 | RobotMotorBoard();
|
---|
| 80 | void begin();
|
---|
| 81 |
|
---|
| 82 | void process();
|
---|
| 83 |
|
---|
| 84 | void parseCommand();
|
---|
| 85 |
|
---|
| 86 | int IRread(uint8_t num);
|
---|
| 87 |
|
---|
| 88 | void setMode(uint8_t mode);
|
---|
| 89 | void pauseMode(bool onOff);
|
---|
| 90 |
|
---|
| 91 | void motorsWrite(int speedL, int speedR);
|
---|
| 92 | void motorsWritePct(int speedLpct, int speedRpct);//write motor values in percentage
|
---|
| 93 | void motorsStop();
|
---|
| 94 | private:
|
---|
| 95 | float motorAdjustment;//-1.0 ~ 1.0, whether left is lowered or right is lowered
|
---|
| 96 |
|
---|
| 97 | //convert codename to actual pins
|
---|
| 98 | uint8_t parseCodename(uint8_t codename);
|
---|
| 99 | uint8_t codenameToAPin(uint8_t codename);
|
---|
| 100 |
|
---|
| 101 | void stopCurrentActions();
|
---|
| 102 | //void sendCommand(byte command,byte codename,int value);
|
---|
| 103 |
|
---|
| 104 | void _analogWrite(uint8_t codename, int value);
|
---|
| 105 | void _digitalWrite(uint8_t codename, bool value);
|
---|
| 106 | void _analogRead(uint8_t codename);
|
---|
| 107 | void _digitalRead(uint8_t codename);
|
---|
| 108 | int _IRread(uint8_t num);
|
---|
| 109 | void _readIR();
|
---|
| 110 | void _readTrim();
|
---|
| 111 |
|
---|
| 112 | void _refreshMotorAdjustment();
|
---|
| 113 |
|
---|
| 114 | Multiplexer IRs;
|
---|
| 115 | uint8_t mode;
|
---|
| 116 | uint8_t isPaused;
|
---|
| 117 | EasyTransfer2 messageIn;
|
---|
| 118 | EasyTransfer2 messageOut;
|
---|
| 119 |
|
---|
| 120 | //Line Following
|
---|
| 121 | void reportActionDone();
|
---|
| 122 | };
|
---|
| 123 |
|
---|
| 124 | extern RobotMotorBoard RobotMotor;
|
---|
| 125 |
|
---|
| 126 | #endif
|
---|