아두이노/소스코드모음

아두이노 I2C Address 주소 찾기

원원 2022. 6. 25. 14:48

안녕하세요. 오늘은 I2C Address 주소찾기를 해보겠습니다.

사용한 보드는 Arduino-UNO입니다. (SDA:A4 , SCL:A5)

사용할 함수는 세개입니다.

- Wire.begin() : I2C를 사용할 수 있게 초기화합니다. 
- Wire.beginTransmission(address) : 슬레이브 주소전달 함수입니다. (주소는 7bit) 
- Wrie.endTransmission() :  write()에 의해 대기중이였던 데이터를 전송하고, 통신을 종료합니다. 이 함수의 리턴값에 따라서 슬레이브가 데이터를 수신했는지 알 수 있습니다. 
0: 성공 
1: 데이터가 너무 길어 전송 버퍼에 맞지 않음 
2: 주소 전송 시 NACK 수신 
3: 데이터 전송 시 NACK 수신 
4: 기타 오류

 

 Wire.beginTransmission(address)를 통해서 0~127번주소까지 보낸다음에  Wrie.endTransmission()를 통해서 통신이 정상적으로 되었는지 return값을 확인하고 0이면 성공입니다

#include <Wire.h>

void setup()
{
  Wire.begin();
  Serial.begin(9600);
}

void loop()
{
  byte address,flag=0;
  Serial.println("Scanning");
  for(address = 1; address < 127; address++ ) 
  {
    Wire.beginTransmission(address);

    if (Wire.endTransmission() == 0)
    {
      Serial.print("I2C device address : 0x");
      if (address<16) 
        Serial.print("0");
      Serial.print(address,HEX);
      Serial.println("\nAddress scan success\n");
      flag = 1;
      break;
    }
  }
  if(flag == 0)
    Serial.println("Address scan fail\n");
  delay(5000);
}

성공하면 success가 뜨고 실패하면 fail이 뜹니다. 저는 fail때 모듈을 우노랑 제거했었습니다

*슬레이브에게 응답을 받았을 때 ACK

 

*슬레이브에게 응답을 못받았을 때 NAK