YKNCT / YKNCT_I2C_lib

Dependents:   arim_AutoMachine

Revision:
11:c7c764e21224
Parent:
10:49ffdd5cf82e
Child:
14:5f0acdcd52ee
Child:
15:23cf4a802b5b
Child:
17:b78b92e5c4b5
Child:
20:ee9aaf0877c5
--- a/YKNCT_I2C.cpp	Wed Apr 17 10:32:03 2019 +0000
+++ b/YKNCT_I2C.cpp	Thu Apr 18 11:00:50 2019 +0000
@@ -5,50 +5,59 @@
     i2c.frequency(100000);
 }
 
-void Y_I2C::Out_Set(OUT_I2C_Data_TypeDef *OUT_I2C_Data, uint8_t num, uint8_t value, uint8_t shift)
+void Y_I2C::Out_Set(OUT_I2C_Data_TypeDef *OUT_I2C_Data, uint8_t num, uint8_t value)
 {
     if(value==1)
-        (OUT_I2C_Data+num) -> out_data |= 1<<shift;
+        (OUT_I2C_Data+num) -> out_data |= 1;
     else
-        (OUT_I2C_Data+num) -> out_data &= ~(1<<shift);
+        (OUT_I2C_Data+num) -> out_data &= 0;
 }
 
-void Y_I2C::Out(OUT_I2C_Data_TypeDef *OUT_I2C_Data, uint8_t num)
+void Y_I2C::Out(OUT_I2C_Data_TypeDef *OUT_I2C_Data, uint8_t MAX)
 {
-    i2c.write((OUT_I2C_Data+num) -> DevAddress<<1, &(OUT_I2C_Data+num)->out_data, 1);
-    wait_us(1000);
+    int cnt=0;
+    int i=0;
+    while(cnt<MAX) {
+        char data=0;
+        int tmp=(OUT_I2C_Data+cnt)->DevAddress;
+        for(i=0;; i++) {
+            if(tmp!=(OUT_I2C_Data+cnt+i)->DevAddress)
+                break;
+        }
+        for(int j=0; j<=i; j++) data|=(OUT_I2C_Data+cnt+j)->out_data<<j;
+
+        i2c.write((OUT_I2C_Data+cnt)->DevAddress<<1, &data, 1);
+        cnt+=i;
+    }
 }
 
 void Y_I2C::In(IN_I2C_Data_TypeDef *IN_I2C_Data, uint8_t num)
 {
-    static char data;
+    char data;
     uint8_t array=(IN_I2C_Data+num)->Number;
-    
-    i2c.read((IN_I2C_Data+num) -> DevAddress<<1, &data, 1);
-    
-        (IN_I2C_Data+num)->in_data=data&1<<array;
-    wait_us(1000);
+
+    i2c.read((IN_I2C_Data+num)->DevAddress<<1, &data, 1);
+
+    (IN_I2C_Data+num)->in_data=data&1<<array;
 }
 
 void Y_I2C::Adc(ADC_I2C_Data_TypeDef *ADC_I2C_Data, uint8_t num)
 {
-    static char data[8]= {0};
+    char data[8]= {0};
     uint8_t array=(ADC_I2C_Data+num)->Number;
 
     i2c.read((ADC_I2C_Data+num) -> DevAddress<<1, data, 8);
-    
-        (ADC_I2C_Data+num)->adc_data=data[array*2+1]<<8|data[array*2];
-    wait_us(1000);
+
+    (ADC_I2C_Data+num)->adc_data=data[array*2+1]<<8|data[array*2];
 }
 
 void Y_I2C::Enc(ENC_I2C_Data_TypeDef *ENC_I2C_Data, uint8_t num)
 {
-    static char data[4]= {0};
+    char data[4]= {0};
 
     i2c.read((ENC_I2C_Data+num) -> DevAddress<<1, data, 4);
 
     (ENC_I2C_Data+num)->enc_data=data[3]<<24|data[2]<<16|data[1]<<8|data[0];
-    wait_us(1000);
 }
 
 void Y_I2C::MD_I2C(MD_I2C_Data_TypeDef *MD_I2C_Data, uint8_t num)
@@ -91,7 +100,6 @@
 
     /*8bitから7bitに変換*/
     i2c.write((MD_I2C_Data + num)->DevAddress << 1,(MD_I2C_Data + num)->pData,2);
-    wait_us(1000);
 }
 
 /**
@@ -112,5 +120,4 @@
 
     /*8bitから7bitに変換*/
     i2c.write((MD_I2C_Data + num)->DevAddress << 1,(MD_I2C_Data + num)->pData,2);
-    wait_us(1000);
 }
\ No newline at end of file