极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13692|回复: 4

Liquidcrystal库与Wire库不能在一起工作?问题解决了...

[复制链接]
发表于 2012-12-29 17:26:58 | 显示全部楼层 |阅读模式
本帖最后由 zintiger 于 2013-12-1 17:29 编辑

做了一个三轴陀螺仪MPU6050的试验,将数据用液晶1602显示出来。它们分别工作是正常的,但放在一起时,严格说是执行了wire.begin()以后,液晶显示的函数就乱了,显示花码。把LCD采用4bit和8bit的连接方法都是一样的问题。

下面是源代码。各位高手遇到过这样的问题吗?问题出在哪儿?
感谢你的任何建议。

感谢美国网友bperrybap的指点,问题已经解决。Leonardo板子上虽然有独立的SDA和SCL针,但pin2,pin3仍然被保留作为SDA,SCL使用。我把它们作为LCD的数据线的,固然会出问题。在调用LCD时避开它们就行了。我把这些写出来希望对大家有所帮助。



// 这个代码是没有添加算法的,所以显示的是只是原始数据!
#include <LiquidCrystal.h>


// Arduino Wire library is required if I2Cdev I2CDEV_ARDUINO_WIRE implementation
// is used in I2Cdev.h
#include "Wire.h"
// 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.h"

// class default I2C address is 0x68
// specific I2C addresses may be passed as a parameter here
// AD0 low = 0x68 (default for InvenSense evaluation board)
// AD0 high = 0x69
MPU6050 accelgyro;

int16_t ax, ay, az;
int16_t gx, gy, gz;

#define LED_PIN 13
bool blinkState = false;
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 9,8,7,6,5, 4, 3, 2); //问题就出在这儿。
void setup() {
   // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);
// Print a message to the LCD.
  lcd.print("hello, world!");
  
  // join I2C bus (I2Cdev library doesn't do this automatically)

lcd.setCursor(0, 1);
   lcd.println("Initializing I2C"); //这行和下面的一行调换一下,也会显示花码。显然Wire.begig()执行过之后,lcd类的就会有问题。
    Wire.begin();
  // initialize serial communication
  // (38400 chosen because it works as well at 8MHz as it does at 16MHz, but
  // it's really up to you depending on your project)
  Serial.begin(9600);
//while(!Serial);
  // initialize device
  Serial.println("Initializing I2C devices...");
   
  accelgyro.initialize();

  // verify connection
  Serial.println("Testing device connections...");
  Serial.println(accelgyro.testConnection() ? "MPU6050 connection successful" : "MPU6050 connection failed");

  // configure Arduino LED for
  pinMode(LED_PIN, OUTPUT);
}

void loop() {
  // read raw accel/gyro measurements from device
  accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
  
   delay(1000);
lcd.setCursor(0, 8);  
// lcd.print(millis()/1000);
lcd.print(ax);  //未能被显示出来。

lcd.setCursor(0, 1);
lcd.print(ay);  //照片中的乱码部分来自这里。
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2012-12-29 19:01:02 | 显示全部楼层
我记得我在UNO下使用是没有问题的。。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-12-30 14:00:19 | 显示全部楼层
弘毅 发表于 2012-12-29 19:01
我记得我在UNO下使用是没有问题的。。。

看来我需要一个Uno了。
回复 支持 反对

使用道具 举报

发表于 2012-12-30 14:05:34 | 显示全部楼层
在UNO下确认没问题。
回复 支持 反对

使用道具 举报

发表于 2014-1-15 18:22:06 | 显示全部楼层
用IIC通信啊,不会接这么多的线
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-9 11:32 , Processed in 0.120650 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表