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

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.mfbz.cn/a/80202.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

七夕特辑——3D爱心(可监听鼠标移动)

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 「推荐专栏」&#xff1a; ★java一站式服务 ★ ★ React从入门到精通★ ★前端炫酷代码分享 ★ ★ 从0到英雄&#xff0c;vue成神之路★ ★ uniapp-从构建到提升★ ★ 从0到英雄&#xff…

Lua 语言笔记(一)

1. 变量命名规范 弱类型语言(动态类型语言)&#xff0c;定义变量的时候&#xff0c;不需要类型修饰 而且&#xff0c;变量类型可以随时改变每行代码结束的时候&#xff0c;要不要分号都可以变量名 由数字&#xff0c;字母下划线组成&#xff0c;不能以数字开头&#xff0c;也不…

【数据结构】二叉树

&#x1f407; &#x1f525;博客主页&#xff1a; 云曦 &#x1f4cb;系列专栏&#xff1a;数据结构 &#x1f4a8;吾生也有涯&#xff0c;而知也无涯 &#x1f49b; 感谢大家&#x1f44d;点赞 &#x1f60b;关注&#x1f4dd;评论 文章目录 前言一、树的概念及结构&#x…

【学习笔记之vue】 Cannot find module ‘node-sass‘

Cannot find module node-sass方案一&#xff08;不通&#xff09; 下载node-sass组件 >> npm install -g cnpm>>cnpm install node-sass下载时报错 方案二 使用npm下载node-sass组件 >>npm install node-sassok

科技资讯|苹果Vision Pro新专利曝光:可调节液态透镜

苹果公司近日申请了名为“带液态镜头的电子设备”&#xff0c;概述了未来可能的头显设计。头显设备中的透镜采用可调节的液态透镜&#xff0c;每个透镜可以具有填充有液体的透镜腔&#xff0c;透镜室可以具有形成光学透镜表面的刚性和 / 或柔性壁。 包括苹果自家的 Vision Pr…

opencv-目标追踪

import argparse import time import cv2 import numpy as np# 配置参数 ap argparse.ArgumentParser() ap.add_argument("-v", "--video", typestr,help"path to input video file") ap.add_argument("-t", "--tracker", …

JSP-学习笔记

文章目录 1.JSP介绍2 JSP快速入门3 JSP 脚本3.1 JSP脚本案例3.2 JSP缺点 4 EL表达式4.1 快速入门案例 5. JSTL标签6. MVC模式和三层架构6.1 MVC6.2 三层架构 7. 案例-基于MVC和三层架构实现商品表的增删改查 1.JSP介绍 概念 JSP&#xff08;JavaServer Pages&#xff09;是一种…

财报解读:上半年业绩实现增长,药师帮业务飞轮已经开始旋转?

今年6月底登陆港股的药师帮&#xff0c;近日发布了上市后的首份财务报告。 财报显示&#xff0c;2023年上半年&#xff0c;药师帮实现营收增长、经调整后净利润转正的成果&#xff0c;再次验证了二级市场对于其发展潜力的看好——6月底上市以来&#xff0c;药师帮股价涨幅接近…

Redis——set类型详解

概要 Set&#xff08;集合&#xff09;&#xff0c;将一些有关联的数据放到一起&#xff0c;集合中的元素是无序的&#xff0c;并且集合中的元素是不能重复的 之前介绍的list就是有序的&#xff0c;对于列表来说[1, 2, 3] 和 [2, 1, 3]是两个不同的列表&#xff0c;而对于集合…

mybatis详解

mybatis&#xff1a;原来是apache的一个开源项目&#xff0c;叫ibatis。2010年转移谷歌&#xff0c;从3.0开始改名为mybatis mybatis是一款优秀的持久层框架&#xff0c;是对jdbc功能进行轻量级的封装&#xff0c;提供了统一的数据库信息配置统一放在一个xml文件中&#xff0c;…

C++初阶语法——static类成员

前言&#xff1a;本文将介绍类和对象中的static类成员——静态成员函数&#xff0c;静态成员变量的使用方法和注意点。在某些场景下&#xff0c;静态成员很有意义。 目录 一.概念二.特性静态成员不存在对象中 三.静态成员变量在类外初始化四.静态成员函数 一.概念 声明为stati…

记录一次arcgis engine开发版本引入问题

之前基于arcigs 10.1vs2013开发的程序&#xff0c;现在拿出来要改&#xff0c;但是目前版本是arcgis10.7vs2017/vs2019,打开后无论如何替换引用版本&#xff0c;都报错 &#xff08;具体版本对应可以看这&#xff1a;ArcGIS Engine 与 Visual Studio 版本对照表_vs2019对应啥版…

华为开源自研AI框架昇思MindSpore应用案例:基于MindSpore框架的UNet-2D案例实现

目录 一、环境准备1.进入ModelArts官网2.使用CodeLab体验Notebook实例 二、环境准备与数据读取三、模型解析Transformer基本原理Attention模块 Transformer EncoderViT模型的输入整体构建ViT 四、模型训练与推理模型训练模型验证模型推理 近些年&#xff0c;随着基于自注意&…

WinCC V7.5 中的C脚本对话框不可见,将编辑窗口移动到可见区域的具体方法

WinCC V7.5 中的C脚本对话框不可见&#xff0c;将编辑窗口移动到可见区域的具体方法 由于 Windows 系统更新或使用不同的显示器&#xff0c;在配置C动作时&#xff0c;有可能会出现C脚本编辑窗口被移动到不可见区域的现象。 由于该窗口无法被关闭&#xff0c;故无法进行进一步…

机器学习算法之-逻辑回归(1)

什么是回归 回归树&#xff0c;随机森林的回归&#xff0c;无一例外他们都是区别于分类算法们&#xff0c;用来处理和预测连续型标签的算法。然而逻辑回归&#xff0c;是一种名为“回归”的线性分类器&#xff0c;其本质是由线性回归变化而来的&#xff0c;一种广泛使用于分类问…

【傅里叶级数与傅里叶变换】数学推导——3、[Part4:傅里叶级数的复数形式] + [Part5:从傅里叶级数推导傅里叶变换] + 总结

文章内容来自DR_CAN关于傅里叶变换的视频&#xff0c;本篇文章提供了一些基础知识点&#xff0c;比如三角函数常用的导数、三角函数换算公式等。 文章全部链接&#xff1a; 基础知识点 Part1&#xff1a;三角函数系的正交性 Part2&#xff1a;T2π的周期函数的傅里叶级数展开 P…

SOLIDWORKS 2023中装配体配合的正确使用方法 硕迪科技

-SOLIDWORKS 装配体打开时是由不同的阶段和性能检查组成的。如果在创建装配体时未应用基本的配合方法&#xff0c;问题会随着时间的推移而累积&#xff0c;并且在使用时会出现明显的速度减慢。 如果您的装配体运行速度很慢&#xff0c;则很可能是在创建配合时出现了不良操作的症…

Nacos和GateWay路由转发NotFoundException: 503 SERVICE_UNAVAILABLE “Unable to find

问题再现&#xff1a; 2023-08-15 16:51:16,151 DEBUG [reactor-http-nio-2][CompositeLog.java:147] - [dc73b32c-1] Encoding [{timestampTue Aug 15 16:51:16 CST 2023, path/content/course/list, status503, errorService Unavai (truncated)...] 2023-08-15 16:51:16,17…

Vue的鼠标键盘事件

Vue的鼠标键盘事件 原生 鼠标事件(将v-on简写为) click // 点击 dblclick // 双击 mousedown // 按下 mousemove // 移动 mouseleave // 离开 mouseout // 移出 mouseenter // 进入 mouseover // 鼠标悬浮mousedown.left 键盘事件 keydown //键盘按下时触发 keypress …

SpringBoot3集成ElasticSearch

标签&#xff1a;ElasticSearch8.Kibana8&#xff1b; 一、简介 Elasticsearch是一个分布式、RESTful风格的搜索和数据分析引擎&#xff0c;适用于各种数据类型&#xff0c;数字、文本、地理位置、结构化数据、非结构化数据&#xff1b; 在实际的工作中&#xff0c;历经过Ela…
最新文章