Skip to content

Commit 54bc27d

Browse files
authored
I2C Scanner examples
Tested on Bluepill for all three I2c (TWI 1 - TWI 1 alternative pin - TWI 2)
1 parent 10925a1 commit 54bc27d

File tree

1 file changed

+89
-0
lines changed

1 file changed

+89
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
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+
// 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+
// TwoWire Wire_alt(PB9,PB8);
36+
//
37+
// I2C-2: PB9(sda) PB8(scl)
38+
// TwoWire Wire2(PB11,PB10);
39+
40+
41+
42+
#include <Wire.h>
43+
44+
45+
void setup() {
46+
47+
Serial.begin(9600);
48+
Wire.begin();
49+
Serial.println("\nI2C Scanner");
50+
}
51+
52+
53+
void loop() {
54+
byte error, address;
55+
int nDevices;
56+
57+
Serial.println("Scanning...");
58+
59+
nDevices = 0;
60+
for(address = 1; address < 127; address++) {
61+
// The i2c_scanner uses the return value of
62+
// the Write.endTransmisstion to see if
63+
// a device did acknowledge to the address.
64+
65+
Wire.beginTransmission(address);
66+
error = Wire.endTransmission();
67+
68+
if (error == 0) {
69+
Serial.print("I2C device found at address 0x");
70+
if (address < 16)
71+
Serial.print("0");
72+
Serial.println(address, HEX);
73+
74+
nDevices++;
75+
}
76+
else if (error == 4) {
77+
Serial.print("Unknown error at address 0x");
78+
if (address < 16)
79+
Serial.print("0");
80+
Serial.println(address, HEX);
81+
}
82+
}
83+
if (nDevices == 0)
84+
Serial.println("No I2C devices found");
85+
else
86+
Serial.println("done");
87+
88+
delay(5000); // wait 5 seconds for next scan
89+
}

0 commit comments

Comments
 (0)