Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007 #ifndef Omni3MD_h
00008 #define Omni3MD_h
00009
00010 #include "WProgram.h"
00011
00012 #define KEY1 0xAA // key used in critical commands
00013 #define KEY2 0x55 // key used in critical commands
00014
00015
00016
00017 #define COMMAND_FIRMWARE_INT 0xFE //Parte inteira da versão do firmware
00018 #define COMMAND_FIRMWARE_DEC 0xFD //Parte decimal da versão do firmware
00019
00020 #define COMMAND_STOP 0xFC //Comando de paragem sem controlo
00021 #define COMMAND_CALIBRATE 0xFB //Calibração dos parâmetros fÃsicos do movimento
00022 #define COMMAND_MOV_OMNI_PID 0xFA //Comando de movimento omidireccional com controlo PID
00023 #define COMMAND_MOV_OMNI_NOPID 0xF9 //Comando de movimento omidireccional sem controlo
00024 #define COMMAND_MOV_LIN3M_PID 0xF8 //Comando de movimento linear de 3 motores com controlo PID
00025 #define COMMAND_MOV_LIN3M_NOPID 0xF7 //Comando de movimento linear de 3 motores sem controlo PID
00026 #define COMMAND_MOV_LIN1M_PID 0xF6 //Comando de movimento linear de 1 motor com controlo PID
00027 #define COMMAND_MOV_LIN1M_NOPID 0xF5 //Comando de movimento linear de 1 motor sem controlo PID
00028 #define COMMAND_GAIN_UPDATE 0xF4 //Recepção dos ganhos para o controlo
00029 #define COMMAND_CFG_MOV_CW 0xF3 //Define o sentido CW do movimento
00030 #define COMMAND_I2C_ADD 0xF2 //Comando para mudança do Endereço I2C
00031 #define COMMAND_TIMEOUT_I2C 0xF1 //Comando para configuração do tempo de timeout I2C
00032 #define COMMAND_PRESCALER_CFG 0xF0 //Comando para configuração do presclaer da contagem incremental dos encoders
00033 #define COMMAND_INC_ENC_PRESET 0xEF //Comando para efectuar reset à contagem incremental dos encoders
00034 #define COMMAND_MOV_INC 0xEE //Comando de movimento linear incremental de um motor
00035
00036
00037 #define COMMAND_BAT_HI 0xE4 //Leitura do valor da temperatura da placa
00038 #define COMMAND_BAT_LOW 0xE3 //Leitura do valor da tensão da bateria
00039 #define COMMAND_TEMPER1_HI 0xE2 //Leitura do valor da temperatura da placa (sensor1)
00040 #define COMMAND_TEMPER1_LOW 0xE1 //Leitura do valor da temperatura da placa (sensor1)
00041 #define COMMAND_ENC1_LIM_HI 0xE0 //PWM no Limiar do movimento para o motor 1
00042 #define COMMAND_ENC1_LIM_LOW 0xDF //Valor obtido na rotina de calibração
00043 #define COMMAND_ENC2_LIM_HI 0xDE //PWM no Limiar do movimento para o motor 2
00044 #define COMMAND_ENC2_LIM_LOW 0xDD //Valor obtido na rotina de calibração
00045 #define COMMAND_ENC3_LIM_HI 0xDC //PWM no Limiar do movimento para o motor 3
00046 #define COMMAND_ENC3_LIM_LOW 0xDB //Valor obtido na rotina de calibração
00047 #define COMMAND_ENC1_MAX_HI 0xDA //Valor de contagens máximo registado para o encoder1
00048 #define COMMAND_ENC1_MAX_LOW 0xD9 //Permite ao utilizador obter o estado do encoder 1
00049 #define COMMAND_ENC2_MAX_HI 0xD8 //Valor de contagens máximo registado para o encoder2
00050 #define COMMAND_ENC2_MAX_LOW 0xD7 //Permite ao utilizador obter o estado do encoder 2
00051 #define COMMAND_ENC3_MAX_HI 0xD6 //Valor de contagens máximo registado para o encoder3
00052 #define COMMAND_ENC3_MAX_LOW 0xD5 //Permite ao utilizador obter o estado do encoder 3
00053 #define COMMAND_CTRL_RATE 0xD4 //Leitura da taxa de controlo dos motores
00054 #define COMMAND_ENC1_INC_HI 0xD3 //Contagem incremental do encoder 1 HI
00055 #define COMMAND_ENC1_INC_LOW 0xD2 //Contagem incremental do encoder 1 LO
00056 #define COMMAND_ENC2_INC_HI 0xD1 //Contagem incremental do encoder 2 HI
00057 #define COMMAND_ENC2_INC_LOW 0xD0 //Contagem incremental do encoder 2 LO
00058 #define COMMAND_ENC3_INC_HI 0xCF //Contagem incremental do encoder 3 HI
00059 #define COMMAND_ENC3_INC_LOW 0xCE //Contagem incremental do encoder 3 LO
00060
00061 #include "WProgram.h"
00062
00063 class Omni3MD
00064 {
00065 public:
00066
00067
00068
00069 void i2c_connect(byte omniAddress);
00070 void calibrate_omni();
00071 void set_i2c_timeout (byte timeout);
00072 void set_i2c_address (byte newAddress);
00073
00074 void set_PID(word Kp, word Ki, word Kd);
00075 void set_prescaler(byte encoder, byte value);
00076 void set_enc_value(byte encoder, word encValue);
00077
00078
00079 float read_temperature();
00080 float read_battery();
00081 float read_firmware();
00082
00083
00084
00085
00086
00087
00088
00089 int read_enc1();
00090 int read_enc2();
00091
00092
00093
00094
00095
00096 void mov_lin3M_pid(byte way1,byte speed1,byte way2,byte speed2,byte way3,byte speed3);
00097
00098
00099
00100
00101 void stop_motors();
00102
00103 private:
00104 byte _omniAddress;
00105 byte i2cRequestData(byte addressValue, byte command);
00106 void i2cSendData(byte addressValue, byte command, byte buffer[], byte numBytes);
00107 };
00108
00109 #endif
00110
00111
00112
00113