风筝
发表于: 2020-11-8 17:16:17 | 显示全部楼层

显示技术日新月异,从早先的1602液晶显示屏到如今的电子纸E-Paper和OLED显示屏等各种炫酷的显示,都在不断得到发展,尤其是具有了更多的色彩和更低的功耗。这使得它们成为电子项目中用户界面的理想组件。单色OLED显示屏是这种进步的产物,我们已经在本网站的多个项目中使用了它们,但是尽管它们具有低功耗,明亮且易于使用,但它们是单色的,这意味着它们具有一种或几种颜色可用。因此,在Arduino项目中使用彩色的OLED显示屏将是一个好主意。

oled.png


在本篇文章中,我们将使用基于SSD1331的0.95寸彩色OLED显示屏。与其他所有OLED显示屏一样,​​该显示屏具有低功耗,并且具有96×64像素的分辨率,可以显示65000多种不同的颜色。它通过SPI进行通信,这意味着除了VCC和GND之外,还将使用5个Arduino GPIO引脚。为了演示如何在项目中使用该显示屏,我们将创建一个简单的草图,其中将显示一个YouTube订阅按钮。


所需的组件

●    彩色OLED显示屏

●    Arduino Uno开发板

●    面包板

●    连接导线


原理图

本教程的原理图非常简单,只包含OLED显示屏和Arduino。如下图所示,将OLED显示屏连接到Arduino。

Untitled-Sketch_bb.png


代码

本文的代码主要基于Adafruit SSD1331 OLED驱动程序库。该库是专门为与基于SSD1331显示驱动器的显示屏一起使用而创建的。我为本文创建了一个演示草图,并将详细介绍其功能和声明,以便您可以学习如何使其适应于您自己的项目。除了SSD1221 OLED库之外,我们还将使用Adafruit GFX库和Arduino SPI库。


与往常一样,我们首先包括将在草图中使用的库。之后,我们声明OLED引脚所连接的Arduino引脚,并声明变量以保存我们将要使用的某些颜色。

  1. #include <Adafruit_GFX.h>
  2. #include <Adafruit_SSD1331.h>
  3. #include <SPI.h>

  4. #define sclk 13
  5. #define mosi 11
  6. #define cs   10
  7. #define rst  9
  8. #define dc   8

  9. // Color definitions
  10. #define  BLACK           0x0000
  11. #define BLUE            0x001F
  12. #define RED             0xF800
  13. #define GREEN           0x07E0
  14. #define CYAN            0x07FF
  15. #define MAGENTA         0xF81F
  16. #define YELLOW          0xFFE0  
  17. #define WHITE           0xFFFF
复制代码

接下来,我们使用DC、CS和RST引脚作为参数创建Adafruit SSD1331库的对象。

  1. Adafruit_SSD1331 display = Adafruit_SSD1331(cs, dc, rst);
复制代码

接下来是void setup()函数。我们使用display.begin()函数开始与显示器的通信。完成此操作后,我们将使用display.fillScreen()函数在显示的多个背景上创建和切换。为了显示文本,我们使用display.print()函数和display.setTextColor()display.setTextSize()函数分别设置其颜色和字体大小。所有这些函数均用于创建YouTube订阅按钮。

  1. void setup() {

  2.   display.begin();
  3.   display.fillScreen(RED);
  4.   delay(300);
  5.   display.fillScreen(GREEN);
  6.   delay(300);
  7.   display.fillScreen(BLUE);
  8.   delay(300);
  9.   display.fillScreen(BLACK);
  10.   delay(1000);
  11.   display.setCursor(20,5);
  12.   display.setTextColor(WHITE);
  13.   display.setTextSize(2);
  14.   display.print("Hello");

  15.   display.setCursor(8,25);
  16.   display.setTextColor(RED);
  17.   display.setTextSize(2);
  18.   display.print("YouTUBE");

  19.   display.fillRect(10,40, 75, 20, RED);

  20.   display.setCursor(20,47);
  21.   display.setTextColor(WHITE);
  22.   display.setTextSize(1);
  23.   display.print("Subscribe");

  24.   display.drawRect(0,0,96,64,WHITE);
  25.   delay(1000);
  26. }
复制代码

接下来是void loop()函数。 该函数的代码类似于setup()函数的代码。 我们使用display.fillRect()函数创建了两个框,一个框为黑色背景,另一个框为红色背景。 然后,我们使用display.setCursor()函数在其上写入文本“ subscribe”。

  1. void loop()
  2. {
  3.   display.fillRect(10,40, 75, 20, BLACK);
  4.   delay(1000);
  5.   display.fillRect(10,40, 75, 20, RED);
  6.   display.setCursor(20,47);
  7.   display.setTextColor(WHITE);
  8.   display.setTextSize(1);
  9.   display.print("Subscribe");
  10.   delay(1000);
  11. }
复制代码

本文下面列出了该项目的完整代码。

  1. #include <Adafruit_GFX.h>
  2. #include <Adafruit_SSD1331.h>
  3. #include <SPI.h>

  4. #define sclk 13
  5. #define mosi 11
  6. #define cs   10
  7. #define rst  9
  8. #define dc   8

  9. // Color definitions
  10. #define  BLACK           0x0000
  11. #define BLUE            0x001F
  12. #define RED             0xF800
  13. #define GREEN           0x07E0
  14. #define CYAN            0x07FF
  15. #define MAGENTA         0xF81F
  16. #define YELLOW          0xFFE0  
  17. #define WHITE           0xFFFF

  18. Adafruit_SSD1331 display = Adafruit_SSD1331(cs, dc, rst);

  19. void setup() {

  20.   display.begin();
  21.   display.fillScreen(RED);
  22.   delay(300);
  23.   display.fillScreen(GREEN);
  24.   delay(300);
  25.   display.fillScreen(BLUE);
  26.   delay(300);
  27.   display.fillScreen(BLACK);
  28.   delay(1000);
  29.   display.setCursor(20,5);
  30.   display.setTextColor(WHITE);
  31.   display.setTextSize(2);
  32.   display.print("Hello");

  33.   display.setCursor(8,25);
  34.   display.setTextColor(RED);
  35.   display.setTextSize(2);
  36.   display.print("YouTUBE");

  37.   display.fillRect(10,40, 75, 20, RED);

  38.   display.setCursor(20,47);
  39.   display.setTextColor(WHITE);
  40.   display.setTextSize(1);
  41.   display.print("Subscribe");

  42.   display.drawRect(0,0,96,64,WHITE);
  43.   delay(1000);
  44. }

  45. void loop()
  46. {
  47.   display.fillRect(10,40, 75, 20, BLACK);
  48.   delay(1000);
  49.   display.fillRect(10,40, 75, 20, RED);
  50.   display.setCursor(20,47);
  51.   display.setTextColor(WHITE);
  52.   display.setTextSize(1);
  53.   display.print("Subscribe");
  54.   delay(1000);
  55. }
复制代码

SSD1331 Arduino库中还有其他一些函数,可能对您的项目有用。 您可以在此处的库文档中检查所有函数及其用法。


效果演示

复制代码并上传到您的Arduino Uno开发板。 确保按照原理图部分所述连接所有组件。 如果正确遵循这些步骤,您应该会看到如下图所示的界面。

Demo-1.png


以上就是本篇文章的全部内容。 您认为哪些项目最适合此显示屏? 如有任何疑问,请随时在本帖下面发表回复。

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 705 | 回复: 1492



手机版|

GMT+8, 2024-11-22 04:08 , Processed in 0.042730 second(s), 6 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

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