关于arduino mpu60500 DMP求助

查看: 9191|回复: 39
开源一份姿态解算算法及程序,适用于MPU,非DMP
这套工程是我毕业设计中应用到的。支持K60系列。之前发过一贴MPU的姿态解算程序,用的里面的DMP,但效果实在很一般。故这次改用软件来进行解算。一些说明在下面,例如用到的端口,可以自行修改。希望这份工程能够对你带来帮助,让你更好的理解和学习“姿态算法”。
端口描述:
I2C:&&PTC8 SCL
& && &PTC9 SDA
MPU INT: PTC18
工程是在IAR 7.10中开发,若你使用的是低版本的,需要重新配置。
对PIT0定时器寄存器进行了修改,就不要用这个作为定时中断了,这点一定要注意。
解算精度在0.1/degree,目前只有Pitch和Roll能达到,Yaw在没有校正拟合的情况下是无法稳定使用的。
百度网盘链接
链接: 密码:usiq
论坛下载:&&
原作者相关文献:Estimation of IMU and MARG orientation using a gradient descent algorithm
& && && && && &
本帖子中包含更多资源
才可以下载或查看,没有帐号?
本帖被以下淘专辑推荐:
& |主题: 21, 订阅: 23
& |主题: 12, 订阅: 4
请教一下。为什么收回来的数据都是&&0 呢/
你的mpu6050还是0吗
Daniel_Lau 又来开源好东西了。
非常感谢,收藏一个
谢谢分享哦 好好学习
走过路过,不能错过
帅呆了,赞一个
谢谢楼主分享强烈支持,非常感谢哥们
赞开源精神
中国真正意义上的开源就从山外开始了?
大神这个怎么用呢
请教一下。为什么收回来的数据都是&&0 呢/
对PIT0寄存器做了修改?哪个寄存器呢?在哪
你的我的你 发表于
请教一下。为什么收回来的数据都是&&0 呢/
有的时候根据模块不同,需要给6050先上电的初始化时间也不同,不能完成6050的初始化就读不到数据…可能是这个原因
顶一个,回头试试
楼主,请问求出的角速度的单位是什么啊,怎么把它转换成弧度制的啊?
赞一下!!
赞一下!!
ask来得及发货吧不vlasiukbgfvoilausb
很不错,感谢了a
你好我想问下那个imu是什么,是一个处理器吗 为什么我用你的代码测得的值全是零
Daniel_Lau 又来开源好东西了。
山外哥那个imu什么什么东西啊
你的mpu6050还是0吗
你好我的也是零,你知道imu是什么吗,程序里面有一句对io口的设置注释是imu一脸萌
很不错,感谢了a
你好请问你读出数据了吗,那个imu是什么啊
你好请问你读出数据了吗,那个imu是什么啊
我下不了资料 亲你有吗
我下不了资料 亲你有吗
什么资料qq
你的mpu6050还是0吗
你好,你的问题解决了吗,我刚开始能读出来,但是调了一会又是零了
你好,你的这个工程能读出数据,,但是调了一会全变成零了,
Daniel_Lau 又来开源好东西了。
山外哥,我用开源的程序刚开始能读出6050数据,但是调了一会又是零了
就喜欢这种前辈的分享精神
int 为什么很多资料都说可以不接,我没有焊接问下怎么改程序
山外飞思卡尔智能车论坛关于MPU6050 DMP求助 - Arduino中文社区 - Powered by Discuz!
Arduino中文社区
标题: 关于MPU6050 DMP求助
作者: sde& & 时间:
标题: 关于MPU6050 DMP求助求大神解释一下,我这个MPU6050 DMP输出的是什么东西啊?网上抄的一段程序,想让MPU6050输出俯仰角,翻滚角,方向角,不过我根本看不出输出的东西跟传感器姿态有什么关系啊。下面是程序:
// I2C device class (I2Cdev) demonstration Arduino sketch for MPU6050 class using DMP (MotionApps v2.0)
// 6/21/2012 by Jeff Rowberg &&
// Updates should (hopefully) always be available at
// Changelog:
//& && & - added seamless Fastwire support
//& && && && && &&&- added note about gyro calibration
//& && & - added note about Arduino 1.0.1 + Leonardo compatibility error
//& && & - improved FIFO overflow handling and simplified read process
//& && & - completely rearranged DMP initialization code and simplification
//& && & - pull gyro and accel data from FIFO packet instead of reading directly
//& && & - fix broken FIFO read sequence and change interrupt detection to RISING
//& && & - add gravity-compensated initial reference frame acceleration output
//& && && && && &&&- add 3D math helper file to DMP6 example sketch
//& && && && && &&&- add Euler output and Yaw/Pitch/Roll output formats
//& && & - remove accel offset clearing for better results (thanks Sungon Lee)
//& && & - fixed gyro sensitivity to be 2000 deg/sec instead of 250
//& && & - basic DMP initialization working
/* ============================================
I2Cdev device library code is placed under the MIT license
Copyright (c) 2012 Jeff Rowberg
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the &Software&), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED &AS IS&, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
===============================================
// I2Cdev and MPU6050 must be installed as libraries, or else the .cpp/.h files
// for both classes must be in the include path of your project
#include &I2Cdev.h&
#include &MPU6050_6Axis_MotionApps20.h&
//#include &MPU6050.h& // not necessary if using MotionApps include file
// Arduino Wire library is required if I2Cdev I2CDEV_ARDUINO_WIRE implementation
// is used in I2Cdev.h
#if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE
& & #include &Wire.h&
// class default I2C address is 0x68
// specific I2C addresses may be passed as a parameter here
// AD0 low = 0x68 (default for SparkFun breakout and InvenSense evaluation board)
// AD0 high = 0x69
//MPU6050 mpu(0x69); // &-- use for AD0 high
/* =========================================================================
& &NOTE: In addition to connection 3.3v, GND, SDA, and SCL, this sketch
& &depends on the MPU-6050's INT pin being connected to the Arduino's
& &external interrupt #0 pin. On the Arduino Uno and Mega 2560, this is
& &digital I/O pin 2.
* ========================================================================= */
/* =========================================================================
& &NOTE: Arduino v1.0.1 with the Leonardo board generates a compile error
& &when using Serial.write(buf, len). The Teapot output uses this method.
& &The solution requires a modification to the Arduino USBAPI.h file, which
& &is fortunately simple, but annoying. This will be fixed in the next IDE
& &release. For more info, see these links:
* ========================================================================= */
// uncomment &OUTPUT_READABLE_QUATERNION& if you want to see the actual
// quaternion components in a [w, x, y, z] format (not best for parsing
// on a remote host such as Processing or something though)
//#define OUTPUT_READABLE_QUATERNION
// uncomment &OUTPUT_READABLE_EULER& if you want to see Euler angles
// (in degrees) calculated from the quaternions coming from the FIFO.
// Note that Euler angles suffer from gimbal lock (for more info, see
//#define OUTPUT_READABLE_EULER
// uncomment &OUTPUT_READABLE_YAWPITCHROLL& if you want to see the yaw/
// pitch/roll angles (in degrees) calculated from the quaternions coming
// from the FIFO. Note this also requires gravity vector calculations.
// Also note that yaw/pitch/roll angles suffer from gimbal lock (for
// more info, see: )
#define OUTPUT_READABLE_YAWPITCHROLL
// uncomment &OUTPUT_READABLE_REALACCEL& if you want to see acceleration
// components with gravity removed. This acceleration reference frame is
// not compensated for orientation, so +X is always +X according to the
// sensor, just without the effects of gravity. If you want acceleration
// compensated for orientation, us OUTPUT_READABLE_WORLDACCEL instead.
//#define OUTPUT_READABLE_REALACCEL
// uncomment &OUTPUT_READABLE_WORLDACCEL& if you want to see acceleration
// components with gravity removed and adjusted for the world frame of
// reference (yaw is relative to initial orientation, since no magnetometer
// is present in this case). Could be quite handy in some cases.
//#define OUTPUT_READABLE_WORLDACCEL
// uncomment &OUTPUT_TEAPOT& if you want output that matches the
// format used for the InvenSense teapot demo
//#define OUTPUT_TEAPOT
#define LED_PIN 13 // (Arduino is 13, Teensy is 11, Teensy++ is 6)
bool blinkState =
// MPU control/status vars
bool dmpReady =&&// set true if DMP init was successful
uint8_t mpuIntS& &// holds actual interrupt status byte from MPU
uint8_t devS& && &// return status after each device operation (0 = success, !0 = error)
uint16_t packetS& & // expected DMP packet size (default is 42 bytes)
uint16_t fifoC& &&&// count of all bytes currently in FIFO
uint8_t fifoBuffer[64]; // FIFO storage buffer
// orientation/motion vars
Q& && && &&&// [w, x, y, z]& && && &quaternion container
VectorInt16& && && &// [x, y, z]& && && && &accel sensor measurements
VectorInt16 aaR& &&&// [x, y, z]& && && && &gravity-free accel sensor measurements
VectorInt16 aaW& & // [x, y, z]& && && && &world-frame accel sensor measurements
VectorF& & // [x, y, z]& && && && &gravity vector
float euler[3];& && && &// [psi, theta, phi]& & Euler angle container
float ypr[3];& && && &&&// [yaw, pitch, roll]& &yaw/pitch/roll container and gravity vector
// packet structure for InvenSense teapot demo
uint8_t teapotPacket[14] = { '$', 0x02, 0,0, 0,0, 0,0, 0,0, 0x00, 0x00, '\r', '\n' };
// ================================================================
// ===& && && && && &INTERRUPT DETECTION ROUTINE& && && && && & ===
// ================================================================
volatile bool mpuInterrupt =& &&&// indicates whether MPU interrupt pin has gone high
void dmpDataReady() {
& & mpuInterrupt =
// ================================================================
// ===& && && && && && && & INITIAL SETUP& && && && && && && &&&===
// ================================================================
void setup() {
& & // join I2C bus (I2Cdev library doesn't do this automatically)
& & #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE
& && &&&Wire.begin();
& && &&&TWBR = 24; // 400kHz I2C clock (200kHz if CPU is 8MHz)
& & #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE
& && &&&Fastwire::setup(400, true);
& & #endif
& & // initialize serial communication
& & // (115200 chosen because it is required for Teapot Demo output, but it's
& & // really up to you depending on your project)
& & Serial.begin(115200);
& & while (!Serial); // wait for Leonardo enumeration, others continue immediately
& & // NOTE: 8MHz or slower host processors, like the Teensy @ 3.3v or Ardunio
& & // Pro Mini running at 3.3v, cannot handle this baud rate reliably due to
& & // the baud timing being too misaligned with processor ticks. You must use
& & // 38400 or slower in these cases, or use some kind of external separate
& & // crystal solution for the UART timer.
& & // initialize device
& & Serial.println(F(&Initializing I2C devices...&));
& & mpu.initialize();
& & // verify connection
& & Serial.println(F(&Testing device connections...&));
& & Serial.println(mpu.testConnection() ? F(&MPU6050 connection successful&) : F(&MPU6050 connection failed&));
& & // wait for ready
& & Serial.println(F(&\nSend any character to begin DMP programming and demo: &));
& & while (Serial.available() && Serial.read()); // empty buffer
& & while (!Serial.available());& && && && && &&&// wait for data
& & while (Serial.available() && Serial.read()); // empty buffer again
& & // load and configure the DMP
& & Serial.println(F(&Initializing DMP...&));
& & devStatus = mpu.dmpInitialize();
& & // supply your own gyro offsets here, scaled for min sensitivity
& & mpu.setXGyroOffset(220);
& & mpu.setYGyroOffset(76);
& & mpu.setZGyroOffset(-85);
& & mpu.setZAccelOffset(1788); // 1688 factory default for my test chip
& & // make sure it worked (returns 0 if so)
& & if (devStatus == 0) {
& && &&&// turn on the DMP, now that it's ready
& && &&&Serial.println(F(&Enabling DMP...&));
& && &&&mpu.setDMPEnabled(true);
& && &&&// enable Arduino interrupt detection
& && &&&Serial.println(F(&Enabling interrupt detection (Arduino external interrupt 0)...&));
& && &&&attachInterrupt(0, dmpDataReady, RISING);
& && &&&mpuIntStatus = mpu.getIntStatus();
& && &&&// set our DMP Ready flag so the main loop() function knows it's okay to use it
& && &&&Serial.println(F(&DMP ready! Waiting for first interrupt...&));
& && &&&dmpReady =
& && &&&// get expected DMP packet size for later comparison
& && &&&packetSize = mpu.dmpGetFIFOPacketSize();
& & } else {
& && &&&// ERROR!
& && &&&// 1 = initial memory load failed
& && &&&// 2 = DMP configuration updates failed
& && &&&// (if it's going to break, usually the code will be 1)
& && &&&Serial.print(F(&DMP Initialization failed (code &));
& && &&&Serial.print(devStatus);
& && &&&Serial.println(F(&)&));
& & // configure LED for output
& & pinMode(LED_PIN, OUTPUT);
// ================================================================
// ===& && && && && && &&&MAIN PROGRAM LOOP& && && && && && && &===
// ================================================================
void loop() {
& & // if programming failed, don't try to do anything
& & if (!dmpReady)
& & // wait for MPU interrupt or extra packet(s) available
& & while (!mpuInterrupt && fifoCount & packetSize) {
& && &&&// other program behavior stuff here
& && &&&// .
& && &&&// .
& && &&&// .
& && &&&// if you are really paranoid you can frequently test in between other
& && &&&// stuff to see if mpuInterrupt is true, and if so, && from the
& && &&&// while() loop to immediately process the MPU data
& && &&&// .
& && &&&// .
& && &&&// .
& & // reset interrupt flag and get INT_STATUS byte
& & mpuInterrupt =
& & mpuIntStatus = mpu.getIntStatus();
& & // get current FIFO count
& & fifoCount = mpu.getFIFOCount();
& & // check for overflow (this should never happen unless our code is too inefficient)
& & if ((mpuIntStatus & 0x10) || fifoCount == 1024) {
& && &&&// reset so we can continue cleanly
& && &&&mpu.resetFIFO();
& && &&&Serial.println(F(&FIFO overflow!&));
& & // otherwise, check for DMP data ready interrupt (this should happen frequently)
& & } else if (mpuIntStatus & 0x02) {
& && &&&// wait for correct available data length, should be a VERY short wait
& && &&&while (fifoCount & packetSize) fifoCount = mpu.getFIFOCount();
& && &&&// read a packet from FIFO
& && &&&mpu.getFIFOBytes(fifoBuffer, packetSize);
& && &&&// track FIFO count here in case there is & 1 packet available
& && &&&// (this lets us immediately read more without waiting for an interrupt)
& && &&&fifoCount -= packetS
& && &&&#ifdef OUTPUT_READABLE_QUATERNION
& && && && &// display quaternion values in easy matrix form: w x y z
& && && && &mpu.dmpGetQuaternion(&q, fifoBuffer);
& && && && &Serial.print(&quat\t&);
& && && && &Serial.print(q.w);
& && && && &Serial.print(&\t&);
& && && && &Serial.print(q.x);
& && && && &Serial.print(&\t&);
& && && && &Serial.print(q.y);
& && && && &Serial.print(&\t&);
& && && && &Serial.println(q.z);
& && &&&#endif
& && &&&#ifdef OUTPUT_READABLE_EULER
& && && && &// display Euler angles in degrees
& && && && &mpu.dmpGetQuaternion(&q, fifoBuffer);
& && && && &mpu.dmpGetEuler(euler, &q);
& && && && &Serial.print(&euler\t&);
& && && && &Serial.print(euler[0] * 180/M_PI);
& && && && &Serial.print(&\t&);
& && && && &Serial.print(euler[1] * 180/M_PI);
& && && && &Serial.print(&\t&);
& && && && &Serial.println(euler[2] * 180/M_PI);
& && &&&#endif
& && &&&#ifdef OUTPUT_READABLE_YAWPITCHROLL
& && && && &// display Euler angles in degrees
& && && && &mpu.dmpGetQuaternion(&q, fifoBuffer);
& && && && &mpu.dmpGetGravity(&gravity, &q);
& && && && &mpu.dmpGetYawPitchRoll(ypr, &q, &gravity);
& && && && &Serial.print(&ypr\t&);
& && && && &Serial.print(ypr[0] * 180/M_PI);
& && && && &Serial.print(&\t&);
& && && && &Serial.print(ypr[1] * 180/M_PI);
& && && && &Serial.print(&\t&);
& && && && &Serial.println(ypr[2] * 180/M_PI);
& && &&&#endif
& && &&&#ifdef OUTPUT_READABLE_REALACCEL
& && && && &// display real acceleration, adjusted to remove gravity
& && && && &mpu.dmpGetQuaternion(&q, fifoBuffer);
& && && && &mpu.dmpGetAccel(&aa, fifoBuffer);
& && && && &mpu.dmpGetGravity(&gravity, &q);
& && && && &mpu.dmpGetLinearAccel(&aaReal, &aa, &gravity);
& && && && &Serial.print(&areal\t&);
& && && && &Serial.print(aaReal.x);
& && && && &Serial.print(&\t&);
& && && && &Serial.print(aaReal.y);
& && && && &Serial.print(&\t&);
& && && && &Serial.println(aaReal.z);
& && &&&#endif
& && &&&#ifdef OUTPUT_READABLE_WORLDACCEL
& && && && &// display initial world-frame acceleration, adjusted to remove gravity
& && && && &// and rotated based on known orientation from quaternion
& && && && &mpu.dmpGetQuaternion(&q, fifoBuffer);
& && && && &mpu.dmpGetAccel(&aa, fifoBuffer);
& && && && &mpu.dmpGetGravity(&gravity, &q);
& && && && &mpu.dmpGetLinearAccel(&aaReal, &aa, &gravity);
& && && && &mpu.dmpGetLinearAccelInWorld(&aaWorld, &aaReal, &q);
& && && && &Serial.print(&aworld\t&);
& && && && &Serial.print(aaWorld.x);
& && && && &Serial.print(&\t&);
& && && && &Serial.print(aaWorld.y);
& && && && &Serial.print(&\t&);
& && && && &Serial.println(aaWorld.z);
& && &&&#endif
& && &&&#ifdef OUTPUT_TEAPOT
& && && && &// display quaternion values in InvenSense Teapot demo format:
& && && && &teapotPacket[2] = fifoBuffer[0];
& && && && &teapotPacket[3] = fifoBuffer[1];
& && && && &teapotPacket[4] = fifoBuffer[4];
& && && && &teapotPacket[5] = fifoBuffer[5];
& && && && &teapotPacket[6] = fifoBuffer[8];
& && && && &teapotPacket[7] = fifoBuffer[9];
& && && && &teapotPacket[8] = fifoBuffer[12];
& && && && &teapotPacket[9] = fifoBuffer[13];
& && && && &Serial.write(teapotPacket, 14);
& && && && &teapotPacket[11]++; // packetCount, loops at 0xFF on purpose
& && &&&#endif
& && &&&// blink LED to indicate activity
& && &&&blinkState = !blinkS
& && &&&digitalWrite(LED_PIN, blinkState);
作者: wdadzym& & 时间:
本帖最后由 wdadzym 于
16:36 编辑
看你的数据,是跳得很厉害
delay太多就会溢出
另外那BUG&&溢出清零后第一次输出是正确的
所以也有人故意清零来绕过BUG
其实是I2C库问题
DMP 那个原网址里的I2C是对的
老IDE里带的不行 读少量数据没问题&&DMP一次读42就不正常了
作者: zishiquan& & 时间:
我编译的时候出错了MPU6050_DMP6.ino:54:40: fatal error: MPU6050_6Axis_MotionApps20.h: No such file or directory
compilation terminated.
作者: sde& & 时间:
我这是求助贴。。。我没发相关的库文件,当然找不到了。(这里遇到跟我一样的新手感觉好亲切啊)
作者: ling3ye& & 时间:
请问知道 停在了 Send any character to begin DMP programming and demo& &这一句话上一直没有数据出现,是什么回事?
(, 下载次数: 54)
点击文件名下载附件
作者: sde& & 时间:
请问知道 停在了 Send any character to begin DMP programming and demo& &这一句话上一直没有数据出现,是 ...
你看看英文好么?它叫你随便输个东西,你按个空格就行了。(这是求助帖啊,为什么我成回答的了)
作者: ling3ye& & 时间:
你看看英文好么?它叫你随便输个东西,你按个空格就行了。(这是求助帖啊,为什么我成回答的了) ...
是啊,后来我也是晕了,没看仔细。可以读取DMP的数据,但怎么应用还在学习
作者: ling3ye& & 时间:
不知道是不是这三个数据
资料来源& &/p/
作者: sde& & 时间:
不知道是不是这三个数据
资料来源& &/p/
好像不是,我不知道是不是我的芯片有问题还是程序有问题,它输出的值貌似根本没有根据平台姿态而变化
作者: sde& & 时间:
我编译的时候出错了MPU6050_DMP6.ino:54:40: fatal error: MPU6050_6Axis_MotionApps20.h: No such file or ...
这是求助帖,不是资源帖,我没有发相关的库文件当然找不到了,资源可以到论坛里下
作者: wdadzym& & 时间:
这是求助帖,不是资源帖,我没有发相关的库文件当然找不到了,资源可以到论坛里下 ...
去更新i2c的库
作者: ling3ye& & 时间:
看你的数据,是跳得很厉害
(, 下载次数: 14)
点击文件名下载附件
我是用MPU6050 应该是最基本的那个模块。
使用了某大神的库和DMP例子程序(资料来源:/jrowberg/i2cdevlib/tree/master/Arduino/MPU6050)
这是我录得的数据,在源码里添加delay(300);方便观察数据。
但就多了一行提示 : FIFO overflow!&&(FIFO溢出)
我转动,相应的也会有数值变化,停止的话,会维持在一定值得范围。
不知道你的情况是怎么样呢?
作者: sde& & 时间:
看你的数据,是跳得很厉害
我的就是姿态怎么变都没反应,而且跳的很厉害,我在试试wdadzym的方法更新IIC库也许是因为这个关系
作者: ling3ye& & 时间:
我的就是姿态怎么变都没反应,而且跳的很厉害,我在试试wdadzym的方法更新IIC库也许是因为这个关系 ...
好的,看看行不行,我直接是用那个库提供的I2C库
作者: ling3ye& & 时间:
delay太多就会溢出
另外那BUG&&溢出清零后第一次输出是正确的
所以也有人故意清零来绕过BUG
原来如此·····还在研究中请多多谢指教
作者: sde& & 时间:
delay太多就会溢出
另外那BUG&&溢出清零后第一次输出是正确的
所以也有人故意清零来绕过BUG
I2C更新之后输出正常多了,不过还有一点小问题,为什么它要过一会数据才能稳定下来呢?
作者: Geek-Mr.Wang& & 时间:
看你的数据,是跳得很厉害
为什么你的数据这么稳定,我的需要较长的调节时间才能稳定下来,还有怎么用,大神们,求教啊
作者: ghostinholiday& & 时间:
为什么你的数据这么稳定,我的需要较长的调节时间才能稳定下来,还有怎么用,大神们,求教啊 ...
楼主你还在吗?我的Arduino数据也是跳的厉害。不过我破血一次淘的stm32探索版,数据相当稳定,并没有什么延时,好像fifo都可以关掉不用,只可惜是板载芯片卸不下来。那么为什么stm32的板子就能用,Arduino就不行?
作者: sde& & 时间:
楼主你还在吗?我的Arduino数据也是跳的厉害。不过我破血一次淘的stm32探索版,数据相当稳定,并没有什么 ...
有可能就是板子的问题而不是程序的问题,我最近在用Xbee模块,居然连续两块Arduino的tx跟rx的口是坏掉的,表示以后用完存货还是转投genuino比较可靠,这浪费的时间真不值得。
作者: sde& & 时间:
楼主你还在吗?我的Arduino数据也是跳的厉害。不过我破血一次淘的stm32探索版,数据相当稳定,并没有什么 ...
有可能就是板子的问题而不是程序的问题,我最近在用Xbee模块,居然连续两块Arduino的tx跟rx的口是坏掉的,表示以后用完存货还是转投genuino比较可靠,这浪费的时间真不值得。
作者: sde& & 时间:
楼主你还在吗?我的Arduino数据也是跳的厉害。不过我破血一次淘的stm32探索版,数据相当稳定,并没有什么 ...
忘了说了,那些是盗版的Arduino
作者: ghostinholiday& & 时间:
忘了说了,那些是盗版的Arduino
好吧数据跳动真是旧的i2c库造成的,按楼上的重新到大神github下了库就好了。盗版现在还是有质量保证的,一般不会坏,楼主rx tx串口通信外加软串口通信弄明白了吗?我外接esp8266回传数据也是乱码率奇高,片间通讯也是一塌糊涂,估计和设定的延时长短有关但自己不知道要延时多久。
作者: sde& & 时间:
好吧数据跳动真是旧的i2c库造成的,按楼上的重新到大神github下了库就好了。盗版现在还是有质量保证的, ...
呵呵,我换到第三块Arduino的时候这串口就莫名其妙的好了,这实在让我不得不怀疑是质量的问题。关于esp8266的我并没有用过,你最好看看说明书,反正我用MPU6050的时候意识到说明书是个很有用的玩意
作者: ghostinholiday& & 时间:
呵呵,我换到第三块Arduino的时候这串口就莫名其妙的好了,这实在让我不得不怀疑是质量的问题。关于esp82 ...
我也换了3块板子,效果都不好,但换用其他程序就能正常工作所以我想应该是我i2c版本或延时的问题。另外mpu6050那示例程序具体怎么调零呀,应该是改mpu.setXGyroOffset(220);
& & mpu.setYGyroOffset(76);
& & mpu.setZGyroOffset(-85);
& & mpu.setZAccelOffset(1788);这些不过改完貌似不太对,这4个参数什么意思
作者: 我行我素002& & 时间:
I2C更新之后输出正常多了,不过还有一点小问题,为什么它要过一会数据才能稳定下来呢? ...
在哪里更新I2C的库?
欢迎光临 Arduino中文社区 (/)
Powered by Discuz! X3.3}

我要回帖

更多关于 6050违章怎么处理 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信