Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: YKNCT_I2C.cpp
- Revision:
- 9:f892d57a6714
- Parent:
- 8:f7779710d64a
- Child:
- 10:49ffdd5cf82e
--- a/YKNCT_I2C.cpp Tue Apr 16 10:54:57 2019 +0000 +++ b/YKNCT_I2C.cpp Tue Apr 16 14:45:21 2019 +0000 @@ -15,13 +15,18 @@ void Y_I2C::Out(OUT_I2C_Data_TypeDef *OUT_I2C_Data, uint8_t num) { - i2c.write((OUT_I2C_Data+num) -> DevAddress<<1, &(OUT_I2C_Data+num)->out_data, 1, false); - wait_us(1000); + i2c.write((OUT_I2C_Data+num) -> DevAddress<<1, &(OUT_I2C_Data+num)->out_data, 1); + wait_us(1000); } void Y_I2C::In(IN_I2C_Data_TypeDef *IN_I2C_Data, uint8_t num) { - i2c.read((IN_I2C_Data+num) -> DevAddress<<1, &(IN_I2C_Data+num)->in_data, 1, false); + static char data; + + i2c.read((IN_I2C_Data+num) -> DevAddress<<1, &data, 1); + + for(int i=0; i<4; i++) + (IN_I2C_Data+num)->in_data[i]=data&1<<i; wait_us(1000); } @@ -29,27 +34,24 @@ { static char data[8]= {0}; - i2c.read((ADC_I2C_Data+num) -> DevAddress<<1, data, 8, false); - + i2c.read((ADC_I2C_Data+num) -> DevAddress<<1, data, 8); + for(int i=0; i<4; i++) - (ADC_I2C_Data+num)->adc_data[i]=(int16_t)data[i*2+1]<<8|data[i*2]; + (ADC_I2C_Data+num)->adc_data[i]=data[i*2+1]<<8|data[i*2]; wait_us(1000); } -double Y_I2C::Enc(int address) +void Y_I2C::Enc(ENC_I2C_Data_TypeDef *ENC_I2C_Data, uint8_t num) { static char data[4]= {0}; - long long enc_data=0; - i2c.read(address<<1, data, 4, false); + i2c.read((ENC_I2C_Data+num) -> DevAddress<<1, data, 4); - enc_data=data[3]<<24|data[2]<<16|data[1]<<8|data[0]; - + (ENC_I2C_Data+num)->enc_data=data[3]<<24|data[2]<<16|data[1]<<8|data[0]; wait_us(1000); - return enc_data; } -void Y_I2C::MD_I2C(MD_I2C_Data_TypeDef *MD_I2C_Data, uint8_t number) +void Y_I2C::MD_I2C(MD_I2C_Data_TypeDef *MD_I2C_Data, uint8_t num) { /* 送信データ [0] [ MD出力更新 | 0 | 0 | 0 | 0 | ブレーキ | 回転方向 | MD指定 ] @@ -57,58 +59,58 @@ */ /* 送信データをMD更新フラグを立てて初期化 */ - (MD_I2C_Data + number)->pData[0] = 0x80; + (MD_I2C_Data + num)->pData[0] = 0x80; /* モーターの駆動状態によってデータセット */ - switch (MD_GET_DRIVE(MD_I2C_Data, number)) { + switch (MD_GET_DRIVE(MD_I2C_Data, num)) { /* ブレーキ,ブレーキビット 1,回転方向ビット 0 */ /* 0b00000100 */ case MD_BRAKE: - (MD_I2C_Data + number)->pData[0] |= 0x02 << 1; + (MD_I2C_Data + num)->pData[0] |= 0x02 << 1; break; /* 正転,ブレーキビット 0,回転方向ビット 1 */ /* 0b00000001 */ case MD_FORWARD: - (MD_I2C_Data + number)->pData[0] |= 0x01 << 1; + (MD_I2C_Data + num)->pData[0] |= 0x01 << 1; break; /* 逆転,ブレーキビット 0,回転方向ビット 0 */ /* 0b00000000 */ case MD_REVERSE: - (MD_I2C_Data + number)->pData[0] |= 0x00 << 1; + (MD_I2C_Data + num)->pData[0] |= 0x00 << 1; break; } /* PIC上の出力番号を指定 */ /* 0b00000000 or 0b00000001 */ - (MD_I2C_Data + number)->pData[0] |= (MD_I2C_Data + number)->Number; + (MD_I2C_Data + num)->pData[0] |= (MD_I2C_Data + num)->Number; /* PWM値が100より大きかったら範囲内に補正 */ - if (MD_GET_PWM(MD_I2C_Data, number) > 99) - MD_SET_PWM(MD_I2C_Data, number, 99); + if (MD_GET_PWM(MD_I2C_Data, num) > 99) + MD_SET_PWM(MD_I2C_Data, num, 99); /* PWM(0~100)を0~127に変換して代入(オーバーフロー防止で16bitに一時変換) */ - (MD_I2C_Data + number)->pData[1] = (uint8_t)((uint16_t)MD_GET_PWM(MD_I2C_Data, number) * 127 / 100); + (MD_I2C_Data + num)->pData[1] = (uint8_t)((uint16_t)MD_GET_PWM(MD_I2C_Data, num) * 127 / 100); /*8bitから7bitに変換*/ - i2c.write((MD_I2C_Data + number)->DevAddress << 1,(MD_I2C_Data + number)->pData,2); + i2c.write((MD_I2C_Data + num)->DevAddress << 1,(MD_I2C_Data + num)->pData,2); wait_us(1000); } /** * @brief MDに通信確認用送信 * @param MD_I2C_Data: I2C式MDデータ構造 - * @param number: 使用MD番号 + * @param num: 使用MD番号 * @retval なし * @detail I2C式MD側が通信が切れていないことを確認するために空データを送信する */ -void Y_I2C::MD_I2C_Empty(MD_I2C_Data_TypeDef *MD_I2C_Data, uint8_t number) +void Y_I2C::MD_I2C_Empty(MD_I2C_Data_TypeDef *MD_I2C_Data, uint8_t num) { /* 送信データをMD更新フラグを立てず初期化 */ - (MD_I2C_Data+number)->pData[0] = 0; + (MD_I2C_Data+num)->pData[0] = 0; /* PIC上の出力番号を指定 */ /* 0b00000000 or 0b00000001 */ - (MD_I2C_Data+number)->pData[0] |= (MD_I2C_Data+number)->Number; + (MD_I2C_Data+num)->pData[0] |= (MD_I2C_Data+num)->Number; /*8bitから7bitに変換*/ - i2c.write((MD_I2C_Data + number)->DevAddress << 1,(MD_I2C_Data + number)->pData,2); + i2c.write((MD_I2C_Data + num)->DevAddress << 1,(MD_I2C_Data + num)->pData,2); wait_us(1000); } \ No newline at end of file