我正在使用独立的ATMEGA328P-PU从mpu6050获取加速度计数据,并以波特率115200发送到串行,还将其发送到另一个串行(到HC05蓝牙模块)。但是问题是有时我遇到一个奇怪的场景,atmega328p-pu通过USB到ttl转换器接受程序,但是控制器无法通过串行发送任何数据。 hc05蓝牙和USB串行中的串行数据均为空白。任何人都知道任何可能的原因。我正在使用以下代码。
我尝试检查veroboard上的连接,但是这种情况有时会修复,有时会再次出现。
#include <SoftwareSerial.h>
#include "I2Cdev.h" // include the I2Cdev library
#include "MPU6050.h" // include the accelerometer library
SoftwareSerial bt(3,4); /* (Rx,Tx) */
MPU6050 accelgyro; // set device to MPU6050
int16_t ax, ay, az, gx, gy, gz; // define accel as ax,ay,az
int baselineX = 0;
void setup() {
Wire.begin(); // join I2C bus
Serial.begin(115200); // initialize serial communication
bt.begin(9600);
accelgyro.initialize(); // initialize the accelerometer
accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
baselineX = gz;
}
void loop() {
// read measurements from device
sendAverage();
}
long sendAverage() {
long totalX = 0, totalY = 0, totalZ = 0;
long X, Y, Z;
for (int i = 0; i < 20; i++) {
accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
totalX = totalX + ax;
totalY = totalY + ay;
totalZ = totalZ + az;
delay(1);
}
X = 500+ ((totalX/20)*0.05);
Y = 500+ ((totalY/20)*0.05);
Z = 500+ ((totalZ/20)*0.05);
Serial.print(X);Serial.print(";");
Serial.print(Y);Serial.print(";");
Serial.println(Z);
bt.print(X);bt.print(";");
bt.print(Y);bt.print(";");
bt.print(Z);bt.print("#");
}
答案 0 :(得分:0)
您正在使用SoftwareSerial
类来更改用于串行传输的引脚,但是在setup()
中,您并未设置两个引脚的属性。如果要通过SoftwareSerial
类进行传输,请添加pinMode
:
SoftwareSerial bt = SoftwareSerial(rxPin, txPin);
void setup() {
// define pin modes for tx, rx of SoftwareSerial:
pinMode(3, INPUT);
pinMode(4, OUTPUT);
// set the data rate for the SoftwareSerial port
bt.begin(9600);
}
有关完整参考,请参见SoftwareSerial.begin documentation page