使用旋转编码器的诺基亚 5110 Lcd 上的 Arduino 菜单
组件和用品
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
应用和在线服务
|
关于这个项目
亲爱的朋友们欢迎来到另一个教程!在本视频中,我们将学习如何为流行的诺基亚 5110 LCD 显示屏构建我们自己的菜单,以使我们的项目更加用户友好和功能更强大。 让我们开始吧!
这就是我们要构建的项目。显示屏上会出现一个简单的菜单,在旋转编码器的帮助下,我可以通过按下旋转编码器按钮向上或向下导航并选择菜单项。当按下旋转编码器的中间按钮时,会出现另一个屏幕,我们可以更改变量的值。如果我们再次按下旋转编码器按钮,我们将返回主菜单屏幕。菜单有 6 个项目,我们可以向下或向上滚动菜单,显示屏上的项目会相应改变。观看随附的视频以确切了解此菜单的工作原理。当然,如果您愿意,您可以修改它以构建您自己的更复杂的菜单。
现在让我们看看如何构建这个项目。
第 1 步:获取所有零件
构建此项目所需的部分如下:
- 一个 Arduino Uno ▶ http://educ8s.tv/part/ArduinoUno
- 诺基亚 5110 LCD 显示屏 ▶ http://educ8s.tv/part/NOKIA5110
- 旋转编码器 ▶ http://educ8s.tv/part/RotaryEncoder
- 一个小面包板 ▶ http://edu8s.tv/part/SmallBreadboard
- 一些电线 ▶ http://edu8s.tv/part/Wires
该项目的成本非常低,不到10美元。您可以在下面的视频说明中找到我使用的所有部分的链接。
第 2 步:诺基亚 5110 液晶显示屏
诺基亚 5110 是我最喜欢的 Arduino 项目显示器。
诺基亚 5110 是一款基本的图形 LCD 屏幕,最初用作手机屏幕。它使用 PCD8544 控制器,它是一种低功耗 CMOS LCD 控制器/驱动器。因此,该显示器具有令人印象深刻的功耗。它在开启时仅使用 0.4mA,但背光被禁用。它在睡眠模式下使用小于 0.06mA!这就是使这款显示器成为我最喜欢的原因之一。 PCD8544 通过串行总线接口连接到微控制器。这使得显示器非常易于与 Arduino 一起使用。你只需要连接8根线。
我准备了一个详细的教程,介绍如何在 Arduino 上使用诺基亚 5110 液晶显示器。我在本教程中附上了该视频,它将提供有关显示的可能有用的信息,因此我鼓励您仔细观看。显示器的成本约为 4 美元。
你可以在这里得到它:▶ http://educ8s.tv/part/NOKIA5110
第 3 步:旋转编码器
旋转编码器,也称为轴编码器,是一种机电设备,可将轴或轴的角位置或运动转换为模拟或数字代码。旋转编码器用于需要精确轴无限制旋转的许多应用,包括工业控制、机器人、专用摄影镜头、计算机输入设备(如光机械鼠标和轨迹球)、受控应力流变仪和旋转雷达平台。
我们将在这个项目中使用的旋转编码器是一种非常便宜的编码器。它还嵌入了一个按钮,为了使其工作,我们只需要连接 5 根电线。我准备了有关如何使用旋转编码器的详细教程。你可以在这里找到这个视频。
这种旋转编码器的成本非常低。它的成本约为 1.5 美元。
你可以在这里得到它▶ http://educ8s.tv/part/RotaryEncoder
第 4 步:构建项目 图> 图> 图>
现在让我们将所有部分连接在一起。在构建这个项目之前,如果你过去没有使用过旋转编码器,我鼓励你观看我准备的关于旋转编码器的教程。它将帮助您了解旋转编码器的工作原理,并且您将获得一些使用它们的经验。此视频附在此处。
我把显示器放在一个像这样的小面包板上。我们先连接显示器。显示器的第一个引脚是复位连接到 Arduino Uno 的数字引脚 3,第二个引脚连接到数字引脚 4,第三个引脚连接到数字引脚 5,第四个引脚连接到数字引脚 11,第五个引脚连接到数字引脚引脚 13。下一个引脚是 Vcc。我们将 Vcc 连接到面包板的正极,面包板正极连接到 Arduino 的 3.3V 输出。下一个引脚是显示器的背光。因为我们想通过软件控制它,所以我们将它连接到数字引脚 7。最后一个引脚是 GND。我们将 GND 连接到面包板的负轨,将面包板的负轨连接到 Arduino GND。
现在我们要做的就是连接旋转编码器。第一个引脚是 GND,我们将它连接到面包板的负轨。下一个引脚是 Vcc,我们将它连接到面包板的正极轨道。下一个引脚是 SW,我们将其连接到模拟引脚 2。下一个引脚名为 DT,我们将其连接到模拟引脚 1。最后,引脚 CLK 连接到模拟引脚 0。您可以在中找到该项目的示意图下面是视频的说明。
现在我们已准备好启动项目。如您所见,项目运行良好,菜单也按预期运行!太好了,现在让我们看看项目的软件。
第五步:项目代码
在这个项目中,我们使用了 4 个库。我们使用两个库用于显示,两个用于旋转编码器。
- Adafruit GFX:https://github.com/adafruit/Adafruit-GFX-Library
- 诺基亚 5110:https://github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-library
- 编码器库:https://github.com/0xPIT/encoder/tree/arduino
- TimerOne 库:https://github.com/PaulStoffregen/TimerOne
首先我们来看看drawMenu函数。该函数负责在显示器上绘制菜单。这个函数每隔几毫秒调用一次,所以如果菜单上有变化,这个函数负责更新屏幕上的菜单。
int menuitem =1;int frame =1;int page =1;int lastMenuItem =1;
还有3个非常重要的全局变量,变量page,变量menuitem和变量frame。变量 page 记住屏幕上显示的是哪个 UI 屏幕。因此,如果页面变量为 1,则我们在主 UI 屏幕中,如果变量为 2,则我们在辅助 UI 屏幕中,我们在其中设置变量的值。菜单项会记住所选的菜单项。因此,如果它的值为 1,则选择第一个菜单项,因此 drawMenu 函数必须将此菜单项绘制为黑色和白色字母。如果菜单项为 2,则选择第二个菜单项,依此类推。 frame 变量,记住菜单的哪一部分显示在屏幕上。由于我们创建的菜单包含 6 个项目,并且我们一次只能显示其中的 3 个,因此我们需要知道屏幕上显示了哪些项目。 frame 变量准确地告诉我们这一点。如果 frame 变量的值为 1,则显示前三个菜单项,如果为 2,则显示项 2、3、4,以此类推。
我试图使代码尽可能容易修改,因此我创建了一些保存菜单项名称的全局变量。这样,您无需在代码中搜索即可轻松创建自己的菜单。
String menuItem1 ="Contrast";String menuItem2 ="Volume";String menuItem3 ="Language";String menuItem4 ="Difficulty";String menuItem5 ="Light:ON";String menuItem6 ="Reset";布尔背光 =真;int 对比度 =60;int 音量 =50;字符串语言 [3] ={“EN”,“ES”,“EL”};int selectedLanguage =0;字符串难度 [2] ={“EASY” , "HARD" };int selectedDifficulty =0;
首先我们初始化代码中需要的所有全局变量。接下来我们初始化显示。在loop函数中,首先我们调用drawMenu函数在屏幕上绘制菜单。然后我们从 Rotary 编码器读取值并检查按钮是否被按下。例如,如果我们在主 UI 屏幕上选择了第一个菜单项,如果来自旋转编码器的值增加,则 menuitem 变量增加,并且在下一个循环中 drawMenu 函数将绘制第二个菜单项作为选择。如果我们现在按下旋转编码器的按钮,我们将导航到第二页,在那里我们设置变量的值。再次使用旋转编码器,我们可以增加或减少变量的值。如果我们按下按钮,我们将导航回主菜单页面,页面变量减少。
这就是这个菜单背后的基本思想。我们对所有菜单项和页面都遵循相同的过程。代码很复杂,长达 400 多行。这看起来很复杂,但如果你自己尝试,你会更容易理解它,你将能够改变它,扩展它并在你自己的项目中使用它。与往常一样,您可以在此处找到随附的代码。
Nokia5110MenuRotary.ino
第 6 步:测试项目
如果我们加载代码,我们可以看到项目按预期工作。我们可以使用轴上下导航菜单,我们可以通过按下旋转编码器按钮选择任何菜单项。多酷啊!
现在我们知道如何为诺基亚 5110 LCD 显示器构建菜单,我们可以为我们的项目添加更多功能并使它们更加用户友好。不过,我们今天构建的这个简单菜单可以改进。我们可以使用中断而不是一直检查按钮状态。这样我们就可以降低项目的功耗,让代码更干净。我将很快准备一个关于中断的视频,敬请期待。我很想听听您对这个菜单项目的看法。你觉得它有用吗?你打算在你的任何项目中使用菜单吗?请在下面发表您的想法和想法,谢谢!
代码
- 代码片段#2
代码片段#2纯文本
String menuItem1 ="Contrast";String menuItem2 ="Volume";String menuItem3 ="Language";String menuItem4 ="难度";String menuItem5 ="Light:ON";String menuItem6 ="Reset";boolean背光 =true;int 对比=60;int volume =50;String language[3] ={ "EN", "ES", "EL" };int selectedLanguage =0;String 难度 [2] ={ "EASY", "HARD " };int selectedDifficulty =0;
Github
https://github.com/adafruit/Adafruit-GFX-Libraryhttps://github.com/adafruit/Adafruit-GFX-Library制造工艺