가속도 센서값을 다른 아두이노로 넘겨줘 그 값으로 dc모터를 제어하는 코드를 짜려고 합니다.
마스터 코드:
#include <SPI.h>
SoftwareSerial btSerial(8,9);
const int MPU=0x68;
int AcX, AcY, AcZ, Tmp, GyX, GyY, GyZ;
void get6050();
int xpos;
int ypos;
void setup()
{
Serial.begin(9600);
btSerial.begin(9600);
Wire.begin();
Wire.beginTransmission(MPU);
Wire.write(0x6B);
Wire.write(0);
Wire.endTransmission(true);
}
void loop()
{
get6050();
xpos=map(AcX,-16383,16383,0,180);//가속도 센서 x축값을 매핑함
ypos=map(AcY,-16383,16383,0,180);
btSerial.write(xpos);//블루투스로 값 전송
Serial.print("xpos=");
Serial.println(xpos);//xpos 값은 정상적으로 나오는데 블루투스로 전송하면 값이 이상하게 보내짐
delay(100);
}
void get6050(){
Wire.beginTransmission(MPU);
Wire.write(0x3B);
Wire.endTransmission(false);
Wire.requestFrom(MPU,14,true);
AcX=Wire.read()<<8|Wire.read();
AcY=Wire.read()<<8|Wire.read();
AcZ=Wire.read()<<8|Wire.read();
Tmp=Wire.read()<<8|Wire.read();
GyX=Wire.read()<<8|Wire.read();
GyY=Wire.read()<<8|Wire.read();
GyZ=Wire.read()<<8|Wire.read();
}
슬레이브 코드:
#include <SoftwareSerial.h>
SoftwareSerial BTSerial(8,9);
void setup() {
Serial.begin(9600);
BTSerial.begin(9600);
pinMode(2, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(10, OUTPUT);
}
void loop() {
if(BTSerial.available()){
int pos;
pos =BTSerial.read();
Serial.print("pos=");
Serial.println(pos);
digitalWrite(2,HIGH);
digitalWrite(3,LOW);
digitalWrite(7,HIGH);
digitalWrite(8,LOW);
analogWrite(5,pos);
analogWrite(10,pos);
delay(10);}
}
이렇게 넣었는데 슬레이브 아두이노의 시리얼 모니터에서 아무것도 프린트가 안되네요. 가속도 센서값은 마스터 아두이노에서 프린트 되는 것을 확인했습니다. 결국 통신 문제인데 뭐가 문제인지 모르겠네요... 도와주세요
|