?>

Hard Copy World

HCW

Q&A

Home > Forum >

Q&A

레트로밴드 코드 질문이 있습니다.

페이지 정보

작성자 정9 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일15-11-19 17:40 조회1,470회 댓글1건

본문

안녕하세요. 레트로밴드를 제작해보고자 코드를 분석하고 있는데 몇 가지 의문점이 발생해서 도움을 얻고자 글을 작성하게 되었습니다.

 

1.

void setup() {
 int error;
 uint8_t c;

 Serial.begin(9600);
 Wire.begin(); 
 BTSerial.begin(9600);  
 
 error = MPU6050_read (MPU6050_WHO_AM_I, &c, 1); 
 Serial.print(F("WHO_AM_I : "));
 Serial.print(c,HEX);
 Serial.print(F(", error = "));
 Serial.println(error,DEC);

 

 error = MPU6050_read (MPU6050_PWR_MGMT_2, &c, 1);
 Serial.print(F("PWR_MGMT_2 : "));
 Serial.print(c,HEX);
 Serial.print(F(", error = "));
 Serial.println(error,DEC);

 MPU6050_write_reg (MPU6050_PWR_MGMT_1, 0);

 initBuffer();
}

 

이 setup 함수에서 c를 왜 정의해주었고 아무 값도 넣어주지 않은 쓰레기 값인 c를 출력하는 것인가요?

 

2.

int MPU6050_read(int start, uint8_t *buffer, int size)
{
 int i, n, error;
 
 Wire.beginTransmission(MPU6050_I2C_ADDRESS);
 
 n = Wire.write(start);
 if (n != 1)
  return (-10);
 
 n = Wire.endTransmission(false); // hold the I2C-bus
 if (n != 0)
  return (n);
 
 // Third parameter is true: relase I2C-bus after data is read.
 Wire.requestFrom(MPU6050_I2C_ADDRESS, size, true);
 i = 0;
 while(Wire.available() && i<size)
 {
  buffer[i++]=Wire.read();
 }
 if ( i != size)
  return (-11);
 return (0); // return : no error
}

 

read 함수인데요. 시작함수를 넣고 왜 n 값들을 각각 return 하는지 이해가 가질 않습니다.

 

 

아직 공부를 많이 하지 않아 코드를 해석하는 부분에 있어서 많이 부족합니다. 코드를 해석하면서 많이 배우고 싶습니다. 많은 도움 부탁드립니다.

댓글목록

최고관리자님의 댓글

최고관리자 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 작성일

1. MPU6050_read() 함수의 파리미터를 보면 c를 받는 파라미터가 uint8_t *buffer 입니다. 포인터로 받았고 실제 c 변수를 전달할 때도 &c 로 전달했습니다. 즉, c 변수의 값을 전달한게 아니라.. c의 포인터(address)를 전달해서 해당 함수에서 c에 값을 담아주도록 한겁니다. 그래서 setup() 함수 안에서는 c에 값을 할당하는 부분이 보이지 않습니다. (실제로 c가 가지는 값은 I2C 통신으로 받아온 데이터를 저장한 버퍼입니다.)

2. 가속도/자이로 센서의 값은 전역으로 선언된 구조체에 별도로 저장됩니다. 구조체를 참고해서 값을 알 수 있습니다. MPU6050_read() 함수가 리턴하는 값은 read 과정이 정상적으로 수행이 되었는지, 혹 에러가 발생했다면 어떤 에러인지를 표시하는 결과 코드입니다.