Softi2c with pull up enabled

Revision:
1:05473196d133
Parent:
0:fee70b6fe0e9
Child:
2:7e8f03569953
--- a/SoftI2C.cpp	Tue Nov 22 20:45:35 2016 +0000
+++ b/SoftI2C.cpp	Mon Nov 28 19:55:30 2016 +0000
@@ -59,11 +59,11 @@
 
 int SoftI2C::read(int ack) {
     int retval = 0;
+    _scl.output();
     
     // Shift the bits out, msb first
     for (int i = 7; i>=0; i--) {
         //SCL low
-        _scl.output();
         _scl.write(0);
         _sda.input();
         wait_us(delay_us);
@@ -73,12 +73,11 @@
         wait_us(delay_us);
         
         //SCL high again
-        _scl.input();
+        _scl.write(1);
         wait_us(delay_us << 1); //wait two delays
     }
     
     // Last cycle to set the ACK
-    _scl.output();
     _scl.write(0);
     if ( ack ) {
         _sda.output();
@@ -88,7 +87,7 @@
     }
     wait_us(delay_us << 1);
     
-    _scl.input();
+    _scl.write(1);
     wait_us(delay_us << 1);
 
     
@@ -96,10 +95,11 @@
 }
 
 int SoftI2C::write(int data) {
+     _scl.output();
+     
     // Shift the bits out, msb first
     for (int i = 7; i>=0; i--) {
         //SCL low
-        _scl.output();
         _scl.write(0);
         wait_us(delay_us);
         
@@ -113,19 +113,18 @@
         wait_us(delay_us);
         
         //SCL high again
-        _scl.input();
+        _scl.write(1);
         wait_us(delay_us << 1); //wait two delays
     }
     
     // Last cycle to get the ACK
-    _scl.output();
     _scl.write(0);
     wait_us(delay_us);
     
     _sda.input();
     wait_us(delay_us);
     
-    _scl.input();
+    _scl.write(1);
     wait_us(delay_us);
     int retval = ~_sda.read(); //Read the ack
     wait_us(delay_us);
@@ -140,7 +139,7 @@
         _scl.output();
         _scl.write(0);
         wait_us(delay_us << 1);
-        _scl.input();
+        _scl.write(1);
         wait_us(delay_us << 1);
     }
     // Pull SDA low