added I2CScanner from https://github.com/todbot/arduino-i2c-scanner/
authorDobrica Pavlinusic <dpavlin@rot13.org>
Sun, 28 Sep 2014 13:14:01 +0000 (15:14 +0200)
committerDobrica Pavlinusic <dpavlin@rot13.org>
Sun, 28 Sep 2014 13:14:01 +0000 (15:14 +0200)
I2CScanner/I2CScanner.ino [new file with mode: 0644]

diff --git a/I2CScanner/I2CScanner.ino b/I2CScanner/I2CScanner.ino
new file mode 100644 (file)
index 0000000..f8fd38a
--- /dev/null
@@ -0,0 +1,71 @@
+/**
+ * I2CScanner.ino -- I2C bus scanner for Arduino
+ *
+ * 2009,2014, Tod E. Kurt, http://todbot.com/blog/
+ *
+ */
+
+#include "Wire.h"
+extern "C" { 
+#include "utility/twi.h"  // from Wire library, so we can do bus scanning
+}
+
+// Scan the I2C bus between addresses from_addr and to_addr.
+// On each address, call the callback function with the address and result.
+// If result==0, address was found, otherwise, address wasn't found
+// (can use result to potentially get other status on the I2C bus, see twi.c)
+// Assumes Wire.begin() has already been called
+void scanI2CBus(byte from_addr, byte to_addr, 
+                void(*callback)(byte address, byte result) ) 
+{
+  byte rc;
+  byte data = 0; // not used, just an address to feed to twi_writeTo()
+  for( byte addr = from_addr; addr <= to_addr; addr++ ) {
+    rc = twi_writeTo(addr, &data, 0, 1, 0);
+    callback( addr, rc );
+  }
+}
+
+// Called when address is found in scanI2CBus()
+// Feel free to change this as needed
+// (like adding I2C comm code to figure out what kind of I2C device is there)
+void scanFunc( byte addr, byte result ) {
+  Serial.print("addr: ");
+  Serial.print(addr,DEC);
+  Serial.print( (result==0) ? " found!":"       ");
+  Serial.print( (addr%4) ? "\t":"\n");
+}
+
+
+byte start_address = 1;
+byte end_address = 100;
+
+// standard Arduino setup()
+void setup()
+{
+    Wire.begin();
+
+    Serial.begin(19200);
+    Serial.println("\nI2CScanner ready!");
+
+    Serial.print("starting scanning of I2C bus from ");
+    Serial.print(start_address,DEC);
+    Serial.print(" to ");
+    Serial.print(end_address,DEC);
+    Serial.println("...");
+
+    // start the scan, will call "scanFunc()" on result from each address
+    scanI2CBus( start_address, end_address, scanFunc );
+
+    Serial.println("\ndone");
+}
+
+// standard Arduino loop()
+void loop() 
+{
+    // Nothing to do here, so we'll just blink the built-in LED
+    digitalWrite(13,HIGH);
+    delay(300);
+    digitalWrite(13,LOW);
+    delay(300);
+}
\ No newline at end of file