Scale-N

Scale-N
Arduino
Componenten
Rollend Materieel
Naslag
Onderdelen
Wissels
Basis Electronica
Symbols Electronica
Programming Arduino
AKS
DCC++
DR5000













































i2c scanner
Sooner or later, everyone stuck on some I2C device – unknown address. For example, on OLED display, there is jumper (SMD resistor with “000” – zero Ohms), and next to it: “IIC address eslect”, and two options, soldered at first one: 0x78, and can be selected another one by removing this resistor and soldering at second place: 0x7A. But, after opening example code for this OLED display, it does not works. Why?! Because it has address of 0x3C, not 0x78 as it is designated. So, here is simple sketch I found somewhere. Well known and simple sketch, but very useful:


Wiring

Instead making wiring diagram, I will just tell you that SCL and SDA of the device in question goes to SCL and SDA on your favorite Arduino board. Usually with numbers 4 and 5; SCL (serial clock) to pin A5 (or ADC5, or pin number 28), and SDA (seral data) to pin A4 (or ADC4, or pin number 27). Do not forget to power your device with appropriate voltage and connect ground wire. Usually it is 5V, but there may be exceptions.
    // --------------------------------------
//    i2c_scanner
//
//    Version 1
//    This program (or code that looks like it)
//    can be found in many places.
//    For example on the Arduino.cc forum.
//    The original author is not know.
//    Version 2, Juni 2012, Using Arduino 1.0.1
//    Adapted to be as simple as possible by Arduino.cc user Krodal
//    Version 3, Feb 26  2013
//    V3 by louarnold
//    Version 4, March 3, 2013, Using Arduino 1.0.3
//    by Arduino.cc user Krodal.
//    Changes by louarnold removed.
//    Scanning addresses changed from 0...127 to 1...119,
//    according to the i2c scanner by Nick Gammon
//    http://www.gammon.com.au/forum/?id=10896
//    Version 5, March 28, 2013
//    As version 4, but address scans now to 127.
//    A sensor seems to use address 120.
//    Version 6, November 27, 2015.
//    Added waiting for the Leonardo serial communication.
//
//
//    This sketch tests the standard 7-bit addresses
//    Devices with higher bit address might not be seen properly.
//
 
    
#include <Wire.h>
 
 
void setup()
{
  Wire.begin();
 
  Serial.begin(115200);
  while (!Serial);             // Leonardo: wait for serial monitor
  Serial.println("\nI2C Scanner");
}
 
 
void loop()
{
  byte error, address;
  int nDevices;
 
  Serial.println("Scanning...");
 
  nDevices = 0;
  for(address = 1; address < 127; address++ )
  {
    // The i2c_scanner uses the return value of
    // the Write.endTransmisstion to see if
    // a device did acknowledge to the address.
    Wire.beginTransmission(address);
    error = Wire.endTransmission();
 
    if (error == 0)
    {
      Serial.print("I2C device found at address 0x");
      if (address<16)
        Serial.print("0");
      Serial.print(address,HEX);
      Serial.println("  !");
 
      nDevices++;
    }
    else if (error==4)
    {
      Serial.print("Unknow error at address 0x");
      if (address<16)
        Serial.print("0");
      Serial.println(address,HEX);
    }    
  }
  if (nDevices == 0)
    Serial.println("No I2C devices found\n");
  else
    Serial.println("done\n");
 
  delay(5000);           // wait 5 seconds for next scan
    


Output: