정보나눔

오픈소스하드웨어 프로젝트에 대한 다양한 정보를 나누는 공간입니다.

블루투스 통신에 관련하여 궁금한 것이 있습니다.
coldbrew | 2020-06-20

mpu 6050의 x축 y 축 z축에 대한 값을 0-180으로 mapping하여 블루투스를 통해 다른 아두이노에 전송할려고 합니다. 



//master code
#include 
#include 
#include 
MPU6050 mpu;

SoftwareSerial btSerial(3,2);
// Timers
unsigned long timer = 0;
float timeStep = 0.01;

// Pitch, Roll and Yaw values
float pitch = 0;
float roll = 0;
float yaw = 0;
int prepitch=0;
int preroll=0;
int preyaw=0;
void setup() 
{
  btSerial.begin(115200);
  Serial.begin(115200);
  // Initialize MPU6050
  while(!mpu.begin(MPU6050_SCALE_2000DPS, MPU6050_RANGE_2G))
  {
    Serial.println("Could not find a valid MPU6050 sensor, check wiring!");
    delay(500);
  }
  
  // Calibrate gyroscope. The calibration must be at rest.
  // If you don't want calibrate, comment this line.
  mpu.calibrateGyro();

  // Set threshold sensivty. Default 3.
  // If you don't want use threshold, comment this line or set 0.
  mpu.setThreshold(3);

}

void loop()
{
  timer = millis();

  // Read normalized values
  Vector norm = mpu.readNormalizeGyro();

  // Calculate Pitch, Roll and Yaw
  pitch = pitch + norm.YAxis * timeStep;
  roll = roll + norm.XAxis * timeStep;
  yaw = yaw + norm.ZAxis * timeStep;

  int pitchmap= map(pitch ,-100,100,0,180);
  int rollmap = map(roll,-100,100,0,180);
  int yawmap = map(yaw, -100,100,0, 180);
  Serial.print(pitchmap);
  Serial.print(rollmap);  
  Serial.println(yawmap);
  delay(100);
  btSerial.println(pitchmap);
  delay(100);
  btSerial.println(rollmap);
  delay(100);
  btSerial.println(yawmap);
}




//slave
#include 

SoftwareSerial btSerial(3,2);

void setup() {
  btSerial.begin(115200);
  Serial.begin(115200);
}

void loop() {
  if(btSerial.available()){
    int a =btSerial.parseInt();
    Serial.println(a);
    int b=btSerial.parseInt();
    Serial.println(b);
    int c=btSerial.parseInt();
    Serial.println(c);    
    delay(100);
}
}

 각각 master code와 slave 코드는 위와 같습니다. master code에서 serial print를 통해 각 pitchmap rollmap yawmap이 잘 나오는 것을 확인하였으며 master와 slave는 페어링이 되는 것 또한 확인했습니다. parseInt와 println을 통해 따로 변수에 있는 숫자 값을 블루투스로 전송되는 것 또한 확인하였습니다. 하지만 저렇게 코딩을 넣을 경우 slave에 있는 serial monitor에서 master의 mpu 6050의 x,y,z축에 변화를 주어도 90이라는 일정한 값이 출력됩니다. 처음에는 통신 속도의 문제라 생각하여 9600에서 115200으로 올렸는데도 같은 결과를 가져오네요...

어떤 부분이 문제일까요...?

이전글   |    초음파센서 NAN값 처리 방법 문의 2020-06-19
다음글   |    안녕하세요. 2020-06-22