Arduino 入门学习笔记10 使用I2C的OLED屏幕

news2024/12/25 1:04:28

Arduino 入门学习笔记10 使用I2C的OLED屏幕

  • 一、准备工具
  • 二、JMD0.96C-1介绍
    • 1. 显示屏参数
    • 2. SSD1306驱动芯片介绍:
  • 三、使用Arduino开发步骤
    • 1. 安装库
      • (1)Adafruit_GFX_Library 库
      • (2)Adafruit_SSD1306 驱动库
      • (3)常用函数
        • display.setCursor()
        • display.drawRect()
        • display.setTextSize()
        • display.setCursor
  • 四、示例代码
    • 1. 显示简单的图形和文本
    • 2. 显示一段简单的动画
    • 3. 一个圆随机移动的效果

在这里插入图片描述

一、准备工具

  • arduino UNO
  • JMD0.96C-1 OLED显示屏模块
    在这里插入图片描述

二、JMD0.96C-1介绍

1. 显示屏参数

本次试验采用的OLED屏是使用I2C接口通讯的0.96寸屏,采用 SSD1306 驱动,有4个引脚。单色, 128x64像素。

2. SSD1306驱动芯片介绍:

SSD1306是一款单片CMOS OLED/PLED驱动器,具有有机/聚合物发光控制器二极管点阵图形显示系统。这款芯片专为共阴极OLED面板设计,具有内置对比度控制器、显示RAM和振荡器,可以减少外部元件的数量和功耗。其分辨率为128x64,适用于许多小型便携式应用,如手机副显示屏、MP3播放器和计算器等。

要驱动SSD1306,可以使用通用微控制器通过硬件选择的6800/8000系列通用并行接口、I2C接口或SPI接口发送数据或命令。该芯片内置128x64位SRAM显示缓冲区,可以方便地实现滚动屏幕的功能。此外,该芯片还支持可编程帧速率和多路复用比,具有行映射和列映射功能。其工作温度范围为-40℃至85℃。

某宝上截的部分参数截图:

在这里插入图片描述

三、使用Arduino开发步骤

1. 安装库

(1)Adafruit_GFX_Library 库

Adafruit GFX 是一个显示用的核心图形库,提供了一组通用的基本点、线、圆等处理功能。Adafruit GFX由Limor Fried/Ladyada为Adafruit Industries撰写。 留意其使用的是 BSD 许可证。

(2)Adafruit_SSD1306 驱动库

(3)常用函数

display.setCursor()

display.setCursor(x, y) 是一个函数,用于设置文本绘制的起始位置。它将文本光标移动到指定的屏幕坐标 (x, y),以便在该位置开始绘制文本。这里是关于参数的解释:

  • x: 这是屏幕上的水平位置,表示从左边缘到光标开始位置的像素数。数值越大,光标越靠右,从左边缘算起。
  • y: 这是屏幕上的垂直位置,表示从顶部到光标开始位置的像素数。数值越大,光标越靠底部,从顶部算起。

display.setCursor(30, 10) 将光标设置在屏幕上离左边缘 30 个像素,离顶部 10 个像素的位置。

display.drawRect()

画正方形

display.setTextSize()

设置文本大小

display.setCursor

设置光标位置

四、示例代码

1. 显示简单的图形和文本

#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

// 初始化OLED显示屏对象,设置分辨率为128x64
Adafruit_SSD1306 display = Adafruit_SSD1306(128, 64, &Wire);

void setup() {
  Serial.begin(9600);

  // 初始化OLED显示屏
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  display.clearDisplay();

  // 设置文本样式
  display.setTextSize(1);
  display.setTextColor(SSD1306_WHITE);

  // 显示提示信息 Drawing Shapes
  display.setCursor(30, 8);
  display.println("Drawing Shapes");

  // 绘制文本 Square:
  display.setTextSize(1);
  display.setCursor(10, 25);
  display.println("Square:");

  // 在屏幕内部绘制正方形
  display.drawRect(15, 40, 20, 20, SSD1306_WHITE);  // (x, y, width, height, color)

  // 显示文本 Circle:
  display.setTextSize(1);
  display.setCursor(60, 25);
  display.println("Circle:");

  // 在屏幕内部绘制圆
  display.drawCircle(80, 50, 12, SSD1306_WHITE);  // (centerX, centerY, radius, color)


  // 更新显示内容
  display.display();
}

void loop() {

}

2. 显示一段简单的动画

下面示例是文字跑马灯效果:

#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

Adafruit_SSD1306 display = Adafruit_SSD1306(128, 64, &Wire);

int posX = 0;  // 初始X坐标
int posY = 32; // 初始Y坐标

void setup() {
  Serial.begin(9600);
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
}

void loop() {
  display.clearDisplay();  // 清空屏幕内容

  // 在当前位置显示文本
  display.setTextSize(1);
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(posX, posY);
  display.println("Moving Text!");

  display.display();  // 显示文本

  delay(100);  // 延迟一段时间

  // 移动位置
  posX += 2;  // X轴坐标增加
  if (posX > 128) {
    posX = -50; // 移动到屏幕外部
  }
}

3. 一个圆随机移动的效果

#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Wire.h>

Adafruit_SSD1306 display = Adafruit_SSD1306(128, 64, &Wire);

int circleX, circleY;  // 圆的当前位置
int circleRadius = 10; // 圆的半径

void setup() {
  Serial.begin(9600);
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  randomSeed(analogRead(0)); // 初始化随机数生成器
  circleX = random(circleRadius, display.width() - circleRadius); // 在X轴随机位置
  circleY = random(circleRadius, display.height() - circleRadius); // 在Y轴随机位置
}

void loop() {
  display.clearDisplay(); // 清空屏幕内容

  // 随机生成下一个位置
  int newX = circleX + random(-2, 3); // 在[-2, 2]范围内随机移动
  int newY = circleY + random(-2, 3); // 在[-2, 2]范围内随机移动

  // 确保圆不会移动出屏幕范围
  newX = constrain(newX, circleRadius, display.width() - circleRadius);
  newY = constrain(newY, circleRadius, display.height() - circleRadius);

  // 更新圆的位置
  circleX = newX;
  circleY = newY;

  // 在新位置绘制圆
  display.fillCircle(circleX, circleY, circleRadius, SSD1306_WHITE);

  display.display(); // 显示绘制内容
  delay(100); // 延迟一段时间
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/892133.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HCIP——STP配置案例

STP配置案例 一、简介二、实现说明1、华为实现说明2、其他厂商实现 三、STP原理1、协商原则2、角色和状态3、报文格式4、BPDU报文处理流程4.1 BPDU报文的分类4.2 BPDU报文的处理流程4.3 BPDU报文格式 四、使用注意事项五、配置举例1、组网需求2、配置思路3、操作步骤4、配置文件…

多维时序 | MATLAB实现WOA-CNN鲸鱼算法优化卷积神经网络的数据多变量时间序列预测

多维时序 | MATLAB实现WOA-CNN鲸鱼算法优化卷积神经网络的数据多变量时间序列预测 目录 多维时序 | MATLAB实现WOA-CNN鲸鱼算法优化卷积神经网络的数据多变量时间序列预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 多维时序 | MATLAB实现WOA-CNN鲸鱼算法优化卷积神经…

大模型技术实践(一)|ChatGLM2-6B基于UCloud UK8S的创新应用

近半年来&#xff0c;通过对多款主流大语言模型进行了调研&#xff0c;我们针对其训练方法和模型特点进行逐一分析&#xff0c;方便大家更加深入了解和使用大模型。本文将重点分享ChatGLM2-6B基于UCloud云平台的UK8S实践应用。 01各模型结构及特点 自从2017年6月谷歌推出Transf…

【OpenCV学习笔记】我的OpenCV学习之路

刚开始接触OpenCV是因为需要进行图像的处理&#xff0c;由于之前没有接触过&#xff0c;所以只能自己进行学习&#xff0c;下面将学习的过程做简单记录分享。 OpenCV专栏链接 OpenCV学习笔记 一、引言 OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是…

【C# 基础精讲】文件读取和写入

文件读取和写入是计算机程序中常见的操作&#xff0c;用于从文件中读取数据或将数据写入文件。在C#中&#xff0c;使用System.IO命名空间中的类来进行文件读写操作。本文将详细介绍如何在C#中进行文件读取和写入&#xff0c;包括读取文本文件、写入文本文件、读取二进制文件和写…

MyBatis动态SQL:打造灵活可变的数据库操作

目录 if标签trim标签where标签set标签foreach标签 动态SQL就是根据不同的条件或需求动态地生成查询语句&#xff0c;比如动态搜索条件、动态表或列名、动态排序等。 if标签 在我们填写一些信息时&#xff0c;有些信息是必填字段&#xff0c;有的则是非必填的&#xff0c;这些…

Docker版TDengine2.6升级到Tdengine3.0

此升级性质为导入导出操作 2.6版本操作步棸 进入docker容器 docker exec -it a5f88c26119d bash 查找taosdump文件路径 find -name /taosdump 进入taosdump外层文件夹中&#xff0c;执行导出命令 ./taosdump -o /root -D power -T 4 实际导出命令可根据个人需求查到官方文档…

Spring Boot中使用validator如何实现接口入参自动检验

文章目录 一、背景二、使用三、举例 一、背景 在项目开发过程中&#xff0c;经常会对一些字段进行校验&#xff0c;比如字段的非空校验、字段的长度校验等&#xff0c;如果在每个需要的地方写一堆if else 会让你的代码变的冗余笨重且相对不好维护&#xff0c;如何更加规范和优…

【经典排序】—— “希尔排序”

插入排序希尔排序插入排序VS希尔排序 测试 希尔排序是在插入排序的基础上进行改进优化&#xff0c;所以学习希尔排序之前需要先了解插入排序。 插入排序 像玩扑克牌摸牌时一样&#xff0c;一张一张摸&#xff0c;每摸到一张插入到对应的位置&#xff0c;插入排序就是从第一个位…

最强自动化测试框架Playwright(33)-Route类拦截修改请求

在Playwright中&#xff0c;Route类用于捕获和修改请求和响应。它允许您拦截和处理特定的网络请求&#xff0c;以模拟不同的行为或进行自定义操作。 您可以使用page.route()方法创建Route对象&#xff0c;并指定要拦截的请求URL或使用正则表达式进行匹配。 一旦创建了Route对…

hive--给表名和字段加注释

1.建表添加注释 CREATE EXTERNAL TABLE test(loc_province string comment 省份,loc_city string comment 城市,loc_district string comment 区,loc_street string comment 街道,)COMMENT 每日数据处理后的表 PARTITIONED BY (par_dt string) ROW FORMAT SERDEorg.apache.had…

SpringBoot ⽇志⽂件

日志 1. 作用2. 日志的使用3. 日志的级别4. 日志的持久化 1. 作用 日志最主要的⽤途就是排除和定位问题。 除了发现和定位问题之外&#xff0c;我们还可以通过⽇志实现以下功能&#xff1a; 记录⽤户登录⽇志&#xff0c;⽅便分析⽤户是正常登录还是恶意破解⽤户。记录系统的…

【Elasticsearch】spring-boot-starter-data-elasticsearch的使用以及Elasticsearch集群的连接

更多有关博主写的往期Elasticsearch文章 标题地址【ElasticSearch 集群】Linux安装ElasticSearch集群&#xff08;图文解说详细版&#xff09;https://masiyi.blog.csdn.net/article/details/131109454基于SpringBootElasticSearch 的Java底层框架的实现https://masiyi.blog.c…

如何在 Elasticsearch 中将矢量搜索与过滤结合起来 - Python 8.x

大型语言模型&#xff08;LLM&#xff09;每天都在发展&#xff0c;这种情况有助于语义搜索的扩展。 LLM 擅长分析文本和揭示语义相似性。 这种情况也反映在搜索引擎上&#xff0c;因为语义搜索引擎可以为用户提供更满意的结果。 尽管大型语言模型可以捕获语义上接近的结果&am…

zabbix整合prometheus的数据

1 zabbix安装 官方文档参考 https://www.zabbix.com/download?zabbix6.0&os_distributioncentos&os_version7&componentsproxy&dbmysql&ws https://www.zabbix.com/download?zabbix4.0&os_distributioncentos&os_version7&componentsserver…

【抖音直播小玩法】介绍

一、是什么 直播小玩法是基于抖音直播场景的新型实时互动内容。直播小玩法由开发者自主开发&#xff0c;接入平台并开放给抖音主播挂载使用。开发者提供创意&#xff0c;依托平台生态&#xff0c;获取收益。 介入标准&#xff1a; 企业开发者&#xff0c;暂不支持个人开发者…

8.文件存储空间管理

第四章 文件管理 8.文件存储空间管理 空闲表法&#xff1a;   空闲盘块表和在内存管理的动态分区分配中学习过的空闲分区表是类似的&#xff0c;空闲盘块表记录了每一个空闲区间的起始位置和这个空闲区间的长度这两个信息。像第一个空闲区间是0&#xff0c;1这两个空闲块&am…

【克罗恩病是银屑病及银屑病关节炎的因果风险因素】

克罗恩病是银屑病及银屑病关节炎的因果风险因素 ①纳入463372名欧洲人&#xff0c;包括12882例IBD患者、5621例银屑病患者、2063例银屑病关节炎患者&#xff1b;②单变量孟德尔随机化&#xff08;MR&#xff09;分析表明&#xff0c;基于遗传因素预测的IBD与较高的银屑病和银屑…

复数混频器、零中频架构和高级算法开发

文章里讲解了关于射频IQ调制器、零中频架构相关的原理及技术&#xff0c;全都是干货&#xff01;其实好多同行对软件无线电的原理、IQ调制、镜像抑制都是一知半解&#xff0c;知其然不知其所以然。好好研读这篇文章&#xff0c;相信会让你有种恍然大悟的感觉。 RF工程常被视为…

【Selenium学习】环境搭建 API学习

目录 一、javaSelenium的环境搭建&#xff1f; 二、认识Selenium 1、什么是自动化&#xff1f; 2、什么是Selenium? (重点) 3、selenium的工作原理&#xff1f;&#xff08;重点&#xff09; 三、Selenium操作元素API&#xff08;重点&#xff09; 第一部分&#…