Arduino mega 2560 通过I2C驱动LCD1602

ardruino mega 2560 lcd1602 i2c
yoyojacky
发布时间: 2019-01-17
阅读: 9514

大家好,我是李伟斌,混迹于社区的一名电子小白, 有机会在这里写个评测什么的感觉非常荣幸哈哈!

之前有幸拿到社区发来的Arduino Mega 2560 和扩展板,一直再酝酿写点儿什么,每次都很踟蹰,不知道写个什么应用好,又要让小白能够容易理解,又不会和其他的人冲突,还要有很好的创意,看着手中的板子,我有点儿迷茫,写个系列? 什么系列呢?arduino 从入门到放弃?

还是定制一款arduino mega 2560 的开源CNC? 这个太烧钱,前不久才去新西兰烧了一下钱袋子,所以现在还是决定低调,低调。

翻箱倒柜找到一块LCD1602, 很久没有看到有人用这么老的设备了,但是其特点是简单,亮度可调,还比较小巧,显示一些简单的信息是很不错的。

当然很多人用来显示时间啊,温度啊,湿度啊,有的人还用来表白(怪不得没有女朋友,不懂女人的心思啊!) 

好了,废话不多说,先看看社区的这块arduino mega 2560 的板子是啥样子吧:

logo.jpg

背面也看一下吧:

TIM截图20190117175006.jpg

第一感觉就是引脚够多,绝对做啥小项目都够用了,而且性能应该也是杠杠滴!

我第一时间就去搜索了一下引脚的信息,下面的图足以展示其强大的功能引脚:

mega-2560-atmega-2560-r3.jpg

一张图就解释清楚了所有的引脚图,是不是很赞啊?!哈哈

根据官方的datasheet手册描述:

TIM截图20190117175243.jpg

这个MEGA 2560应该是专为更复杂的项目而设计的,我们平时玩儿的什么arduino uno, pro mini 在它面前都是虾兵蟹将了。它凭借54个数字I / O引脚,16个模拟输入和更大的flash空间称霸arduino 界, 它是3D打印机和机器人项目的推荐开发板。也就是说你要是想做3D 打印机或者CNC,或者机器人项目,可以使用它,别吝啬你的荷包了,赶紧买买买~

特性:

  1. 54个数字输入/输出引脚(其中15个可用作PWM输出)
  2. 16个模拟输入
  3. 4个UART(硬件串行端口)
  4. 16 MHz晶体振荡器
  5. USB连接
  6. 电源插孔
  7. ICSP接头
  8. reset按钮

54个数字输入输出,你有那么多传感器么?土豪都不这么用的,还要啥自行车? 15个可用于pwm输出,15路舵机走起来,机器人关节都可以控制起来了。是不是很不错? 如果再级联上pca9685a舵机驱动板,你可以做机器蜈蚣了。。。

16路模拟输入你可以干的事情更多,16间房间一个房间一个ntc,或者热敏电阻,每天采集的温度信息都可以做”大数据“ 了,哈哈, 不过你得先有16个房间。 

4路UART, 串口这么多,是在炫耀么? 还是硬件串口,4路GPS进来,都可以做高精度差分GPS了, 我猜的,没实践过,估计没有谁这么用,太土豪了。

其他的标配就不说了。反正它包含支持MCU所需的一切; 只需使用USB电缆将其连接到计算机,或使用AC-DC适配器或电池就可以让他工作的很好了!

arduino 怎么用?肯定是用arduino IDE编写程序然后烧录上去就好啊,不过有很多人更喜欢能够自动补全的vscode,或者使用其他编辑器去编辑代码了,当然使用代码语言是C++。 

22222333333.png

好了,言归正传,我下面要讲的是如何用arduino mega 2560 通过i2c驱动LCD1602, 用最简单的步骤完成这个实验。先看看效果。

先讲LCD1602连接到arduino mega 2560, 先看看引脚怎么连:

2560 的 Pin 20  是SDA , 是I2C的数据脚

2560 的 Pin 21 是SCL, 是I2C的时钟脚

2.jpg

然后5v引脚要连接到LCD1602 的VCC引脚,这里用fritzing画图非常方便。推荐大家使用。

3.jpg

然后将GND接到LCD的GND引脚。

4.jpg 

然后将LCD1602的SDA引脚接到arduino mega 2560的D20引脚5.jpg 

最后一根就是将LCD1602的SCL引脚接入Arduino mega 2560 的D21引脚,如下图:6.jpg 

实物图如下,顺便记得找一根USB type A的线缆,将arduino 接入你的电脑,下面就是要在你电脑上用IDE写代码和调试了。8.jpg 

一般情况下我建议新手就直接用arduino的IDE来编写代码和调试,其实也不是很难,有很多库可以用。

界面类似这样, 而对于我的这块LCD1602来说,我需要找到它的寄存器地址,就是它的i2c地址,可以用树莓派接上去利用i2cdetect -y 1 命令得到,但是我这里说一下如何用arduino本身来进行i2c地址的读取。

10.jpg 

代码我贴这里,大家可以自行下载:

// --------------------------------------
// i2c_scanner
//
// Version 1
//    This program (or code that looks like it)
//    can be found in many places.
//    For example on the Arduino.cc forum.
//    The original author is not know.
// Version 2, Juni 2012, Using Arduino 1.0.1
//     Adapted to be as simple as possible by Arduino.cc user Krodal
// Version 3, Feb 26  2013
//    V3 by louarnold
// Version 4, March 3, 2013, Using Arduino 1.0.3
//    by Arduino.cc user Krodal.
//    Changes by louarnold removed.
//    Scanning addresses changed from 0...127 to 1...119,
//    according to the i2c scanner by Nick Gammon
//    http://www.gammon.com.au/forum/?id=10896
// Version 5, March 28, 2013
//    As version 4, but address scans now to 127.
//    A sensor seems to use address 120.
// Version 6, November 27, 2015.
//    Added waiting for the Leonardo serial communication.
// 
//
// This sketch tests the standard 7-bit addresses
// Devices with higher bit address might not be seen properly.
//

#include <Wire.h>


void setup()
{
  Wire.begin();

  Serial.begin(9600);
  while (!Serial);             // Leonardo: wait for serial monitor
  Serial.println("\nI2C Scanner");
}


void loop()
{
  byte error, address;
  int nDevices;

  Serial.println("Scanning...");

  nDevices = 0;
  for(address = 1; address < 127; address++ ) 
  {
    // The i2c_scanner uses the return value of
    // the Write.endTransmisstion to see if
    // a device did acknowledge to the address.
    Wire.beginTransmission(address);
    error = Wire.endTransmission();

    if (error == 0)
    {
      Serial.print("I2C device found at address 0x");
      if (address<16) 
        Serial.print("0");
      Serial.print(address,HEX);
      Serial.println(" !");

      nDevices++;
    }
    else if (error==4) 
    {
      Serial.print("Unknown error at address 0x");
      if (address<16) 
        Serial.print("0");
      Serial.println(address,HEX);
    }    
  }
  if (nDevices == 0)
    Serial.println("No I2C devices found\n");
  else
    Serial.println("done\n");

  delay(5000);           // wait 5 seconds for next scan
}


通过在工具里面选择板卡为2560,选择好串口就可以下载了。

ide0.png

ctrl+m打开串口监视器,就可以看到你的器件的I2C地址了,知道地址记得记下来, 红色圈里是地址哦。

11.jpg  

看看我的设备是0x3F的地址,让我记下来,写在记事贴上。

12.jpg 

接下来就是去下载驱动LCD的库咯,不用重复造轮子,这个过程非常简单。

选择菜单的项目->加载库(include library)->管理库(manage libraries)

14.jpg 

在topic里面选择display

15.jpg 

 然后搜索 lcd i2c这两个关键字:

16.jpg 

找到这个liquidCrystal I2C by Frank de Brander 这个人写的不错。

17.jpg  

然后选择最新的版本进行安装就好。

18.jpg 

你们安装完成后,在例程里面就可以找到liquidcrystal I2C的hello world 例程,加载上来。

20.jpg  

然后找到LiquidCrystal_I2C  lcd();这个函数,将里面默认的寄存器地址替换成前面我们查询到的地址0x3F

21.jpg22.jpg 

然后烧录就可以看到效果了。。

26.jpg 

然后duang一下就可以制作成一个展示小盒子了。

images (2).jpg

这里你可以根据需求自己改内容, 例如做一个温度提示盒子,闹钟, 或者是提醒活动的提示器,

更或者是搞一个机算你写代码敲了多少次退格键的记录器。

谁知道呢~ 好吧,最后来张图结束今天的内容,大家猜猜做了个啥? 

提示,外壳是3D打印机打印的,耗时7小时。

images.jpg

下期再见,白了个白。



原创作品,未经权利人授权禁止转载。详情见转载须知 举报文章

点赞 (2)
yoyojacky 擅长:科研教育
评论(2)

登录后可评论,请 登录注册

88417331a5feb0b4 10天前...
请问有MEGE2560相关资料吗,去哪儿下载
1   回复
xbk_619187 回复 88417331a5feb0b4 174天前...
ST 原装正品现货,有价格优势!欢迎咨询 QQ:53358029
0   回复
相关文章推荐
X
你的打赏是对原创作者最大的认可
请选择打赏IC币的数量,一经提交无法退回 !
100IC币
500IC币
1000IC币
自定义
IC币
确定
X
提交成功 ! 谢谢您的支持
返回

我要举报该内容理由

×
请输入您举报的理由(50字以内)