YKNCT / YKNCT_I2C_lib

Dependents:   arim_AutoMachine

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