Skip to content

Commit 740d316

Browse files
authored
Merge pull request stm32duino#303 from Testato/patch-1
I2C Scanner examples
2 parents cc094f5 + c7e9624 commit 740d316

File tree

1 file changed

+96
-0
lines changed

1 file changed

+96
-0
lines changed

Diff for: libraries/Wire/examples/i2c_scanner/i2c_scanner.ino

+96
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
// --------------------------------------
2+
// i2c_scanner
3+
//
4+
// Version 1
5+
// This program (or code that looks like it)
6+
// can be found in many places.
7+
// For example on the Arduino.cc forum.
8+
// The original author is not know.
9+
// Version 2, Juni 2012, Using Arduino 1.0.1
10+
// Adapted to be as simple as possible by Arduino.cc user Krodal
11+
// Version 3, Feb 26 2013
12+
// V3 by louarnold
13+
// Version 4, March 3, 2013, Using Arduino 1.0.3
14+
// by Arduino.cc user Krodal.
15+
// Changes by louarnold removed.
16+
// Scanning addresses changed from 0...127 to 1...119,
17+
// according to the i2c scanner by Nick Gammon
18+
// http://www.gammon.com.au/forum/?id=10896
19+
// Version 5, March 28, 2013
20+
// As version 4, but address scans now to 127.
21+
// A sensor seems to use address 120.
22+
//
23+
// This sketch tests the standard 7-bit addresses
24+
// Devices with higher bit address might not be seen properly.
25+
//
26+
27+
28+
29+
// Example pinmap for Bluepill I2Cs (by Testato)
30+
//
31+
// I2C-1 standard pins: PB7(sda) PB6(scl)
32+
// Use it by "Wire" without pin declaration
33+
//
34+
// I2C-1 alternative pins: PB9(sda) PB8(scl)
35+
// Remap the first I2C before call begin()
36+
// Wire.setSDA(PB9);
37+
// Wire.setSCL(PB8);
38+
// Wire.begin();
39+
//
40+
// I2C-2: PB11(sda) PB10(scl)
41+
// Wire.setSDA(PB11);
42+
// Wire.setSCL(PB10);
43+
//
44+
// If you want to use the two I2Cs simultaneously, create a new instance for the second I2C
45+
// TwoWire Wire2(PB11,PB10);
46+
47+
48+
49+
#include <Wire.h>
50+
51+
52+
void setup() {
53+
54+
Serial.begin(9600);
55+
Wire.begin();
56+
Serial.println("\nI2C Scanner");
57+
}
58+
59+
60+
void loop() {
61+
byte error, address;
62+
int nDevices;
63+
64+
Serial.println("Scanning...");
65+
66+
nDevices = 0;
67+
for(address = 1; address < 127; address++) {
68+
// The i2c_scanner uses the return value of
69+
// the Write.endTransmisstion to see if
70+
// a device did acknowledge to the address.
71+
72+
Wire.beginTransmission(address);
73+
error = Wire.endTransmission();
74+
75+
if (error == 0) {
76+
Serial.print("I2C device found at address 0x");
77+
if (address < 16)
78+
Serial.print("0");
79+
Serial.println(address, HEX);
80+
81+
nDevices++;
82+
}
83+
else if (error == 4) {
84+
Serial.print("Unknown error at address 0x");
85+
if (address < 16)
86+
Serial.print("0");
87+
Serial.println(address, HEX);
88+
}
89+
}
90+
if (nDevices == 0)
91+
Serial.println("No I2C devices found");
92+
else
93+
Serial.println("done");
94+
95+
delay(5000); // wait 5 seconds for next scan
96+
}

0 commit comments

Comments
 (0)