arduino+oled显示字

2023-11-06

在这里插入图片描述
OLED 显示屏有四个引脚,分别是:
SDA(数据线) SCK(时钟线) VDD(3.3V) GND
在UNO开发板上I2C接口,SDA对应D4,SCK对应D5
在MEGA2560开发板上I2C接口,SDA对应D20, SCL对应D21

首先下载一个外部库u8glib
然后去在这里插入图片描述
在这里插入图片描述

#include "U8glib.h"
 
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0);      // I2C / TWI
 
void draw(void) {
 
// graphic commands to redraw the complete screen should be placed here
 
u8g.setFont(u8g_font_unifont);
 
//u8g.setFont(u8g_font_osb21);
 
u8g.drawStr( 0, 22, "Hello World!");
 
}
 
void setup(void) {
 
}
 
void loop(void) {
 
// picture loop
 
u8g.firstPage();
 
do {
 
draw();
 
} while( u8g.nextPage() );
 
// rebuild the picture after some delay
 
delay(50);
 
}

在这里插入图片描述
说明U8glib的库成功了
然后在导入

#include "U8glib.h"
 
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0);      // I2C / TWI
 
void draw(void) {
 
// graphic commands to redraw the complete screen should be placed here
 
u8g.setFont(u8g_font_unifont);
 
//u8g.setFont(u8g_font_osb21);
 
u8g.drawStr( 0, 22, "Hello World!");
 
}
 
void setup(void) {
 
}
 
void loop(void) {
 
// picture loop
 
u8g.firstPage();
 
do {
 
draw();
 
} while( u8g.nextPage() );
 
// rebuild the picture after some delay
 
delay(50);
 
}
 

改代码时通过点阵将自己的名字换成点阵即可
在这里插入图片描述
一个名字占17个
在这里插入图片描述

//显示中英文字符程序
 
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
 #include "U8glib.h"
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
 
#define LOGO16_GLCD_HEIGHT 16 //定义显示高度
#define LOGO16_GLCD_WIDTH  16 //定义显示宽度
 
//中文:凌  (这就是存储点阵变量,str_1可以修改成自己喜欢的名称,用函数display.drawBitmap()调用就可以了)
static const unsigned char PROGMEM str_1[] =
{
0x00,0x40,0x40,0x40,0x23,0xF8,0x20,0x40,0x00,0x40,0x07,0xFE,0x11,0x10,0x12,0x88,
0x24,0x84,0xE1,0xF0,0x23,0x10,0x24,0xA0,0x20,0x40,0x20,0xA0,0x23,0x10,0x0C,0x0C
  };
 
//中文:顺
static const unsigned char PROGMEM str_2[] =
{
0x04,0x00,0x45,0xFE,0x54,0x20,0x54,0x40,0x55,0xFC,0x55,0x04,0x55,0x24,0x55,0x24,
0x55,0x24,0x55,0x24,0x55,0x24,0x55,0x44,0x54,0x50,0x54,0x88,0x85,0x04,0x06,0x02
  };
 
//中文:实
static const unsigned char PROGMEM str_3[] =
{
0x02,0x00,0x01,0x00,0x7F,0xFE,0x40,0x02,0x88,0x84,0x04,0x80,0x04,0x80,0x10,0x80,
0x08,0x80,0x08,0x80,0xFF,0xFE,0x01,0x40,0x02,0x20,0x04,0x10,0x18,0x08,0x60,0x04
  };
 
//中文:验
static const unsigned char PROGMEM str_4[] =
{
0x00,0x20,0xF8,0x20,0x08,0x50,0x48,0x50,0x48,0x88,0x49,0x04,0x4A,0xFA,0x7C,0x00,
0x04,0x44,0x04,0x24,0x1D,0x24,0xE4,0xA8,0x44,0x88,0x04,0x10,0x2B,0xFE,0x10,0x00
  };
 
//中文:室
static const unsigned char PROGMEM str_5[] =
{
0x02,0x00,0x01,0x00,0x7F,0xFE,0x40,0x02,0x80,0x04,0x3F,0xF8,0x04,0x00,0x08,0x20,
0x1F,0xF0,0x01,0x10,0x01,0x00,0x3F,0xF8,0x01,0x00,0x01,0x00,0xFF,0xFE,0x00,0x00
  };
 
#if (SSD1306_LCDHEIGHT != 32)
#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endif
 
void setup()   {               
  Serial.begin(9600);
 
  // by default, we'll generate the high voltage from the 3.3v line internally! (neat!)
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  // initialize with the I2C addr 0x3D (for the 128x64)
  // init done
 
  display.clearDisplay();
 
  //英文字符显示
  display.setTextSize(1);             //设置字体大小
  display.setTextColor(WHITE);        //设置字体颜色白色
  display.setCursor(0,0);             //设置字体的起始位置
  display.println("Hello, world!");   //输出字符并换行
 
  display.setTextColor(BLACK, WHITE); //设置字体黑色,字体背景白色
  display.println(3.141592);          //输出数字并换行
 
  display.setTextSize(2);             //设置字体大小
  display.setTextColor(WHITE);        //设置字体白色
  display.print("0x");                //输出字符
  display.println(0xDEADBEEF, HEX);   //输出为ASCII编码的十六进制
  //display.display();                  //显示以上
 
  //中文字符显示
  display.drawBitmap(26, 32, str_1, 16, 16, 1); //在坐标X:26  Y:16的位置显示中文字符凌
  display.drawBitmap(42, 32, str_2, 16, 16, 1); //在坐标X:42  Y:16的位置显示中文字符顺
  display.drawBitmap(58, 32, str_3, 16, 16, 1);
  display.drawBitmap(74, 32, str_4, 16, 16, 1);
  display.drawBitmap(90, 32, str_5, 16, 16, 1);
  display.display();                  //把缓存的都显示
}
 
void loop() {
 
}

参考博客:
https://blog.csdn.net/qq_42860728/article/details/84310160
https://blog.csdn.net/MENGHUANBEIKE/article/details/75666266
https://blog.csdn.net/ling3ye/article/details/53399305

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

arduino+oled显示字 的相关文章

  • 如何返回变量?

    我正在编写一个程序 将字母翻译成摩尔斯电码 然后将它们传输到 LED 并闪烁 我无法返回值 include
  • 使用 pySerial 等待 Arduino 自动重置

    我正在尝试在 Linux 上使用非常简单的代码 为了展示问题 从 Arduino 板上读取行 Python代码 arduino py import serial arduino serial Serial dev ttyACM0 with
  • 如何在Arduino上将int转换为字符串?

    如何转换 int n 到一个字符串 以便当我通过串行发送它时 它作为字符串发送 这是我到目前为止所拥有的 int ledPin 13 int testerPin 8 int n 1 char buf 10 void setup pinMod
  • Arduino:字符串到整数得到奇怪的值

    我想转换一个String to an int 我所能找到的就是你必须将 String 转换为 char 数组 然后将该数组转换为int 但我的代码产生奇怪的值 我无法弄清楚问题是什么 void ledDimm String command
  • printf 的包装

    我在Arduino下编码 我想开发串行打印格式化功能 所以我尝试使用sprintf未知大小的缓冲区 基本上 我们可以避免谈论 Arduino 及其串行输出 并考虑将文本写入缓冲区 然后使用printf 我试过这个 include
  • 读取串行端口 - 忽略在一定时间内写入串行端口的部分数据

    我想定期读取串行端口上的数据和Arduino 所以本质上是这样的 读一读 Wait 读一读 Wait Take etc 我面临的问题是端口将缓冲其信息 因此一旦我调用等待函数 串行端口上的数据就会开始缓冲 等待函数完成后 我尝试再次读取数据
  • 如何将值从 Arduino 发送到 Python,然后使用该值

    我正在构建一个使用 Python 进行远程控制的机器人 通过简单的 GUI 通过互联网发送控制消息 我的部分代码 GUI 和控制系统 运行得很好 但我陷入了困境 我正在尝试使用视差平传感器来获取与物体的距离信息Arduino Mega ht
  • Python自动选择串口(适用于Arduino)

    目前 Python 程序必须知道设备 Arduino 位于哪个端口 然后 Python 才能与设备进行通信 Problem 每当设备拔出并重新插入时 其 COM 端口都会发生变化 因此必须再次向 Python 提供正确的串行端口 以便它找到
  • sim800L GPRS 发布请求

    我一直在研究 LoNet 迷你 GSM 模块 SIM800L 并将其与 Arduino 连接 我已插入 SIM 移动卡并且可以连接互联网 通过串行监视器 我可以毫无问题地与它通信 但是当向网络服务器页面发出 GET 或 POST 请求时 它
  • 同时使用 GPRS 和 GSM

    我正在尝试使用 GSM GPRS 调制解调器的 GPRS 功能将数据发送到远程服务器 但我无法这样做 我在 Arduino 论坛上发布了一个问题 但没有得到任何回复 这是问题的链接 https robotics stackexchange
  • C++:将成员函数作为普通函数指针传递的闭包

    我正在尝试调用外部库的成员函数 该函数接受函数指针作为参数 Timer every unsigned long period void callback void 但不幸的是我想传递的参数是一个成员函数 void MyClass the m
  • 是否有通用 I2C 命令来查看设备是否仍然存在于总线上?

    是否有通用的 I2C 命令来查看设备在初始化一次后是否仍然存在于总线上 例如 OLED 显示器 我问这个的原因是为了避免主程序由于库代码中存在无限循环而冻结 当设备断开连接时 例如 Wire 库 在 MCU 启动时 我想检查设备是否可用 并
  • Arduino 的 C++ 类文件中的字符串无法编译

    我正在用 C 为 Arduino 编写一个堆栈类sketch http www arduino cc en Tutorial Sketch 我相信它完全符合AVR 如果这就是它的名字 我记不清了 编译器 我都用过malloc and fre
  • 将浮点数转换为字节数组的 C 函数

    我正在尝试创建一个函数来接受浮点变量并将其转换为字节数组 我找到了一段有效的代码片段 但如果可能的话 希望在函数中重用它 我也在使用 Arduino 环境 但我知道它接受大多数 C 语言 目前工作 float variable 1 11 b
  • Arduino C++ 析构函数?

    我知道在Arduino中你不能使用delete 那么什么时候调用 C 类中定义的析构函数呢 同样 如果我想创建一个指向数组的指针 我必须使用malloc and free 当对象被销毁时 析构函数被调用 对于自动 堆栈上 变量 它在离开其作
  • 通过iPhone音频插孔读取数据

    我正在寻找一种方法来读取通过 iPhone 的音频插孔从 Arduino 发送的原始数据 我搜索了很多并发现this https github com sanjibahmad Is Headphone Plugged In tree mas
  • 如何在 Arduino 中将 char 变量作为数字打印到串行端口?

    我正在使用 Arduino Uno 我正在从 EEPROM 读取一个字节值并将该值存储在类型变量中char 1 字节 我想将变量的值作为数字 而不是相应的 ASCII 代码 打印到串行监视器 例如考虑char val 5 我想查看串行监视器
  • 如何使用基于HM-10蓝牙模块的BLE Shield?

    我是 arduino 项目的新手 我想请你帮忙 我从 http imall iteadstudio com development platform arduino shields im130704001 html http imall i
  • 使用 Arduino 来操作 Android [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 有人尝试过让 Android 和 Arduino 相互通信吗 我在网上找到了几个项目 Amarino http www amarino tool
  • ESP32:dsb1820 温度传感器给出恒定的负 127 读数

    我正在尝试使用连接到 esp32 微控制器的单个 dsb1820 温度传感器来获取温度读数 传感器连接到 esp32 的 GPIO 4 我打算将温度读数发送到云端 我面临的问题是温度读数总是给出值 127 我在网上某处读到 当 dsb182

随机推荐

  • 基于粒子群优化和引力搜索混合优化算法改进的前馈神经网络(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 Matlab代码实现 4 参考文献 1 概述 本文利用粒子群优化 PSO 和引力搜索算法
  • 计算机云维护是做什么的,IT运维是什么?云时代下的运维人员是怎样的?

    IT运维是当下IT最热门 最具发展的新概念 随着IT建设的不断深入和完善 计算机硬软件系统的运行维护已经成为了各行各业的信息服务部门普遍关注和不堪重负的问题 这是一个随着计算机信息技术的深入应用而产生的新课题 因此如何进行有效的IT运维管理
  • Java网络编程详解

    1 网络编程 1 1计算机网络概述 网络编程的实质就是两个 或多个 设备 例如计算机 之间的数据传输 按照计算机网络的定义 通过一定的物理设备将处于不同位置的计算机连接起来组成的网络 这个网络中包含的设备有 计算机 路由器 交换机等等 其实
  • MyBatis基本操作及概念

    MyBatis 一 Mybatis简介 1 1 什么是Mybatis MyBatis 是一款优秀的持久层框架 它支持自定义 SQL 存储过程以及高级映射 MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作 MyB
  • 手工编译内核驱动模块时安装和添加modules.order

    手工编译内核驱动模块在当前路径下生成 ko insmod可以加载 但实际一般采用cp或者install安装到 lib modules 下面去 但modinfo modprobe是找不到的 还需要把模信息写到modules order文件里
  • 解决Python的AttributeError: module ‘base64‘ has no attribute ‘b64decode‘问题(参数为str类型)

    小编也是一名网络新手 最近在做一道base64解密的题目时 出现了module base64 has no attribute decodestring 的报错提示 网上有很多说法 下面我列举三种方法 大家都可以去试一试 方法如下 1 查看
  • 记一次晚上帮朋友处理文档名称的问题---正则表达式

    通过你的问题让我虎骨了一下正则表达式 因为最近工作很少用到这个知识点 所以记录一下 这个知识在文档处理有很重要的作用 而且功能也特别强大 问题 批处理文档的文件名 处理成要求的格式 用到的技术 正则表达式
  • 前端学习之Ajax

    文章目录 一 客户端与服务器 1 概念 二 URL地址 1 概念 2 URL地址的组成部分 三 分析网页的打开过程 1 理解客户端和服务器的通信过程 2 基于浏览器的开发者工具分析通信过程 四 服务器对外提供了哪些资源 1 网页常见的资源
  • GBase8s BYTE 和 TEXT 数据类型

    GBase 8s BYTE 和 TEXT 数据类型 以及如何以 JDBC API 来操纵这些数据 类型的列 BYTE 数据类型是在不可分的字节流中存储任何数据的简单大对象数据类型 此二进制数 据的示例包括电子表格 数字化的语音模式以及视频片
  • vue中使用事件监听addEventListener()来实现回车登录功能

    在开发中需要做一个点击回车按钮来实现登录的功能 使用到事件监听 事件监听addEventListener 用法 参照文献 菜鸟教程 addEventListener event function useCapture 参数一event 必须
  • Vue基础精讲 —— 规范代码三步走?关于eslint和editorconfig以及precommit的安装和使用

    eslint ESLint 是一个语法规则和代码风格的检查工具 可以用来保证写出语法正确 风格统一的代码 ESLint最初是由Nicholas C Zakas 于2013年6月创建的开源项目 它的目标是提供一个插件化的 javascript
  • 吴恩达深度学习作业_吴恩达深度学习第一部分第二周作业打卡

    1 What does a neuron compute A A neuron computes the mean of all features before applying the output to an activation fu
  • keil不能进调试模式的解决方法

    一 问题现象 平时用烧录器调试程序一直都没问题 突然今天不能调试了 故障提示如下 二 问题分析 尝试过各种解决方法 插拔烧录器 更换烧录器 插拔stm32主机电源 重启keil开发环境 问题依旧 看来问题不应该在主机和烧录器上 最后问题定位
  • spec文件

    spec文件 spec文件是配置规范文件 是RPM软件包编译过程的核心 它说明了软件包如何被配置 打那些补丁 安装哪些文件 安装到哪里 安装过程需要哪些系统级别活动 标签说明 依赖关系 Dependencies BuildRequires
  • 线上项目路由跳转报错 Loading chunk failed

    场景 线上PC端项目点击左侧路由菜单栏进行页面跳转时点击无反应并报错 Loading chunk failed 原因 经查阅资料找出原因 项目使用了路由懒加载 路由懒加载的情况下 访问当前应用进行路由跳转时都是实时动态的从服务器上拉取相应模
  • Python 递归函数返回值为 None 的解决办法

    在使用 Python 开发的过程中 避免不了会用到递归函数 但递归函数的返回值有时会出现意想不到的情况 下面来举一个例子 gt gt gt def fun i i 1 if i lt 5 fun i else return i gt gt
  • 【转载】做好功能测试,这8项必备技能了解一下!

    原文链接 功能测试是测试工程师的基础功 很多人功能测试还做不好 就想去做性能测试 自动化测试 很多人对功能测试的理解就是点点点 如何自己不用心去悟 去研究 那么你的职业生涯也就停留在点点点上了 在这里 我把我对功能测试的理解写下来 那么 功
  • Can not load Open Client,please verify that libct.dll and libcs.dll are in your

    Can not load Open Client please verify that libct dll and libcs dll are in your path Please make sure your version of Op
  • C++ 函数模板与类模板template,以及具体化、实例化

    函数模板 需要创建针对不同参数类型的实现相同功能的不同函数 注 模板不能缩短可执行程序 最终仍是有多个独立的函数定义 另 若对不同类型的参数执行不同的算法 可以重载模板定义 前提是两函数的特征标不同 例 template
  • arduino+oled显示字

    OLED 显示屏有四个引脚 分别是 SDA 数据线 SCK 时钟线 VDD 3 3V GND 在UNO开发板上I2C接口 SDA对应D4 SCK对应D5 在MEGA2560开发板上I2C接口 SDA对应D20 SCL对应D21 首先下载一个