diff --git a/include/action_id.h b/include/action_id.h new file mode 100644 index 0000000000000000000000000000000000000000..1628d2f280a83ec9cbd6ad7654b7ea9bc9e08ba2 --- /dev/null +++ b/include/action_id.h @@ -0,0 +1,144 @@ +#ifndef _ACTION_ID_H +#define _ACTION_ID_H + +#define BOW 1 +#define BRAVO 2 +#define RAP_CHEST 5 +#define SCRATCH_HEAD 8 +#define HAND_STANDING 11 +#define R_BLOCKING 14 +#define L_BLOCKING 16 +#define L_KICK 18 +#define R_KICK 19 +#define R_ATTACK 20 +#define L_ATTACK 21 +#define F_ATTACK 22 +#define DEFENCE 23 +#define SIT_DOWN 25 +#define STANF_UP 26 +#define F_GET_UP 27 +#define B_GET_UP 28 +#define CLAP_READY 29 +#define CLAPPING 30 +#define WALK_READY 31 +/* forward step */ +#define F_S_L 32 +#define F_S_R 34 +#define F_M_L 36 +#define F_M_R 38 +#define F_E_L 40 +#define F_E_R 42 +/* backward step */ +#define B_S_L 44 +#define B_S_R 46 +#define B_M_L 48 +#define B_M_R 50 +#define B_E_L 52 +#define B_E_R 54 +/* left turn step */ +#define LT_S_L 56 +#define LT_S_R 58 +#define LT_M_L 60 +#define LT_M_R 62 +#define LT_E_L 64 +#define LT_E_R 66 +/* right turn step */ +#define RT_S_L 68 +#define RT_S_R 70 +#define RT_M_L 72 +#define RT_M_R 74 +#define RT_E_L 76 +#define RT_E_R 78 +/* left step */ +#define L_S_L 80 +#define L_S_R 82 +#define L_M_L 84 +#define L_M_R 86 +#define L_E_L 88 +#define L_E_R 90 +/* right step */ +#define R_S_L 92 +#define R_S_R 94 +#define R_M_L 96 +#define R_M_R 98 +#define R_E_L 100 +#define R_E_R 102 +/* forward left turn step */ +#define FLT_S_L 104 +#define FLT_S_R 106 +#define FLT_M_L 108 +#define FLT_M_R 110 +#define FLT_E_L 112 +#define FLT_E_R 114 +/* forward right turn step */ +#define FRT_S_L 116 +#define FRT_S_R 118 +#define FRT_M_L 120 +#define FRT_M_R 122 +#define FRT_E_L 124 +#define FRT_E_R 126 +/* backward left turn step */ +#define BLT_S_L 128 +#define BLT_S_R 130 +#define BLT_M_L 132 +#define BLT_M_R 134 +#define BLT_E_L 136 +#define BLT_E_R 138 +/* backward right turn step */ +#define BRT_S_L 140 +#define BRT_S_R 142 +#define BRT_M_L 144 +#define BRT_M_R 146 +#define BRT_E_L 148 +#define BRT_E_R 150 +/* left turn A??? step */ +#define LTA_S_L 152 +#define LTA_S_R 154 +#define LTA_M_L 156 +#define LTA_M_R 158 +#define LTA_E_L 160 +#define LTA_E_R 162 +/* right turn A?? step */ +#define RTA_S_L 164 +#define RTA_S_R 166 +#define RTA_M_L 168 +#define RTA_M_R 170 +#define RTA_E_L 172 +#define RTA_E_R 174 +/* forward left step */ +#define FL_S_L 176 +#define FL_S_R 178 +#define FL_M_L 180 +#define FL_M_R 182 +#define FL_E_L 184 +#define FL_E_R 186 +/* forward right step */ +#define FR_S_L 188 +#define FR_S_R 190 +#define FR_M_L 192 +#define FR_M_R 194 +#define FR_E_L 196 +#define FR_E_R 198 +/* backward left step */ +#define BL_S_L 200 +#define BL_S_R 202 +#define BL_M_L 204 +#define BL_M_R 206 +#define BL_E_L 208 +#define BL_E_R 210 +/* backward right step */ +#define BR_S_L 212 +#define BR_S_R 214 +#define BR_M_L 216 +#define BR_M_R 218 +#define BR_E_L 220 +#define BR_E_R 222 + +#define BALANCE 224 +#define CLAP_END 225 + + +#endif + + +#endif diff --git a/include/adc_dma.h b/include/adc_dma.h index a9359ae138bbc01d81b06fc9bd6dfb3ee10d3093..eb6393b1f6daf4b07f7efa7dabe2c0a4daf29e26 100644 --- a/include/adc_dma.h +++ b/include/adc_dma.h @@ -7,10 +7,15 @@ extern "C" { #include "stm32f4xx_hal.h" +typedef enum {ADC_CH1,ADC_CH2,ADC_CH3,ADC_CH4,ADC_CH6,ADC_CH8} adc_ch_t; + // public functions void adc_init(void); void adc_start(void); void adc_set_period(uint8_t period_ms); +unsigned short adc_get_channel(adc_ch_t channel); +unsigned short adc_get_channel_raw(adc_ch_t channel); +unsigned short adc_get_temperature(void); void adc_stop(void); // operation functions uint8_t adc_in_range(unsigned short int address,unsigned short int length); diff --git a/include/bioloid_gyro.h b/include/bioloid_gyro.h new file mode 100644 index 0000000000000000000000000000000000000000..f9bca06e99a21e48ed3098d183f0bc9b4346087f --- /dev/null +++ b/include/bioloid_gyro.h @@ -0,0 +1,8 @@ +#ifndef BIOLOID_GYRO_H +#define BIOLOID_GYRO_H + +/* public functions */ +void gyro_init(void); + + +#endif diff --git a/include/bioloid_registers.h b/include/bioloid_registers.h index 5376e83a14e6c7d35db5f116586402a157ad432f..f466735464b284bb320a626a98029390509f29b1 100644 --- a/include/bioloid_registers.h +++ b/include/bioloid_registers.h @@ -11,6 +11,8 @@ extern "C" { #define BAUDRATE_OFFSET ((unsigned short int)0x0004) #define RETURN_DELAY_OFFSET ((unsigned short int)0x0005) #define MM_PERIOD_OFFSET ((unsigned short int)0x0006) +#define GYRO_FB_ADC_CH_OFFSET ((unsigned short int)0x0007) +#define GYRO_LR_ADC_CH_OFFSET ((unsigned short int)0x0008) #define RETURN_LEVEL_OFFSET ((unsigned short int)0x0010) #define LAST_EEPROM_OFFSET ((unsigned short int)0x0020) @@ -24,6 +26,8 @@ typedef enum { BIOLOID_RETURN_DELAY_TIME = RETURN_DELAY_OFFSET, BIOLOID_MM_PERIOD_L = MM_PERIOD_OFFSET, BIOLOID_MM_PERIOD_H = MM_PERIOD_OFFSET+1, + BIOLIOD_GYRO_FB_ADC_CH = GYRO_FB_ADC_CH_OFFSET, + BIOLIOD_GYRO_LR_ADC_CH = GYRO_LR_ADC_CH_OFFSET, BIOLOID_RETURN_LEVEL = RETURN_LEVEL_OFFSET, BIOLOID_USER1_LED_CNTRL = 0x20, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 // | | | | blink | toggle | value | internally used @@ -179,8 +183,16 @@ typedef enum { BIOLOID_MM_SERVO31_CUR_POS_L = 0x98, BIOLOID_MM_SERVO31_CUR_POS_H = 0x99, BIOLOID_ACTION_PAGE = 0x9A, - BIOLOID_ACTION_CNTRL = 0x9B // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 + BIOLOID_ACTION_CNTRL = 0x9B, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 // | | | page running | interrupt flag | enable interrupt | stop page | start page + BIOLOID_GYRO_CNTRL = 0x9C, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 + // + BIOLOID_GYRO_STATUS = 0x9D, // bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 + // + BIOLOID_GYRO_FWD_FALL_THD = 0x9E, + BIOLOID_GYRO_BWD_FALL_THD = 0x9F, + BIOLOID_GYRO_LEFT_FALL_THD = 0xA0, + BOILOID_GYRO_RIGHT_FALL_THD = 0xA1 } bioloid_registers; #define GPIO_BASE_ADDRESS 0x20 diff --git a/src/adc_dma.c b/src/adc_dma.c index 074643bcbfa444b91f7e84bd07c73e5ae3df24f0..c3bb736db3c5706baeb3d0df2eccc5865591631d 100644 --- a/src/adc_dma.c +++ b/src/adc_dma.c @@ -362,6 +362,57 @@ void adc_set_period(uint8_t period_ms) adc_period_ms=period_ms*84; } +uint16_t adc_get_channel(adc_ch_t channel) +{ + uint16_t value; + + switch(channel) + { + case ADC_CH1: ram_data[BIOLOID_ADC_CH1_L]+ram_data[BIOLOID_ADC_CH1_H]*256; + break; + case ADC_CH2: ram_data[BIOLOID_ADC_CH2_L]+ram_data[BIOLOID_ADC_CH2_H]*256; + break; + case ADC_CH3: ram_data[BIOLOID_ADC_CH3_L]+ram_data[BIOLOID_ADC_CH3_H]*256; + break; + case ADC_CH4: ram_data[BIOLOID_ADC_CH4_L]+ram_data[BIOLOID_ADC_CH4_H]*256; + break; + case ADC_CH6: ram_data[BIOLOID_ADC_CH6_L]+ram_data[BIOLOID_ADC_CH6_H]*256; + break; + case ADC_CH8: ram_data[BIOLOID_ADC_CH8_L]+ram_data[BIOLOID_ADC_CH8_H]*256; + break; + } + + return value; +} + +uint16_t adc_get_channel_raw(adc_ch_t channel) +{ + uint16_t value; + + switch(channel) + { + case ADC_CH1: value=adc_data[0]&0x0000FFFF; + break; + case ADC_CH2: value=(adc_data[0]&0xFFFF0000)>>16; + break; + case ADC_CH3: value=adc_data[1]&0x0000FFFF; + break; + case ADC_CH4: value=(adc_data[1]&0xFFFF0000)>>16; + break; + case ADC_CH6: value=(adc_data[2]&0xFFFF0000)>>16; + break; + case ADC_CH8: value=(adc_data[3]&0xFFFF0000)>>16; + break; + } + + return value; +} + +uint16_t adc_get_temperature(void) +{ + return ram_data[BIOLOID_ADC_TEMP_L]+ram_data[BIOLOID_ADC_TEMP_H]*256; +} + void adc_stop(void) { ram_data[BIOLOID_ADC_CNTRL]&=0xFE; diff --git a/src/bioloid_gyro.h b/src/bioloid_gyro.h new file mode 100644 index 0000000000000000000000000000000000000000..b56982a1b87d4727471769d3ddee304da3827f5f --- /dev/null +++ b/src/bioloid_gyro.h @@ -0,0 +1,10 @@ +#include "bioloid_gyro.h" +#include "adc_dma.h" + +/* private functions */ + +/* public functions */ +void gyro_init(void) +{ + +}