Arduino oled显示
@fishcArduino oled显示"你好" 要在Arduino上使用oled显示屏显示文本,你首先需要连接oled显示屏到Arduino。
oled显示屏通常通过I2C通信协议进行连接。在Arduino上,有两个引脚(A4和A5)专门用于I2C通信。你需要将oled屏幕的SDA引脚连接到A4引脚,SCL引脚连接到A5引脚。
接下来,你需要安装支持oled显示屏的库。在Arduino IDE中,点击“工具”->“管理库”,然后在搜索栏中输入“SSD1306”,找到适合你的oled型号的库并安装。
一旦库安装完成,你可以尝试下面的代码:
#include <Wire.h>//引入I2C通信库
#include <Adafruit_GFX.h> //引入oled显示库
#include <Adafruit_SSD1306.h>
#define OLED_RESET 4// OLED重置引脚,默认为4
Adafruit_SSD1306 display(OLED_RESET);// 创建SSD1306对象
void setup() {
// 初始化I2C通信
Wire.begin();
// 启动oled显示屏
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);// 0x3C是oled显示屏的地址(可以根据你的显示屏型号进行修改)
// 清空显示屏
display.clearDisplay();
}
void loop() {
// 设置字体大小
display.setTextSize(1);
// 设置文本颜色(白色)
display.setTextColor(WHITE);
// 显示文本
display.setCursor(0, 0);
display.println("你好");
// 更新显示
display.display();
delay(1000);// 延迟1秒,然后再次显示"你好"
}
当你上传这段代码到Arduino后,你的oled显示屏上将会显示"你好"。每隔1秒钟,"你好"都会重新显示一次。
希望这能帮到你!如果有任何问题,请随时提问。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-1-10 17:27
要在Arduino上使用oled显示屏显示文本,你首先需要连接oled显示屏到Arduino。
oled显示屏通常通过I2C通 ...
中文乱码 yc0526vip 发表于 2024-01-10 17:43
中文乱码
如果在OLED显示屏上显示中文出现乱码,可能是因为默认的字体库不支持中文字符。为了解决这个问题,你可以下载一个支持中文字符的字体库并替换原来的字体库。以下是一些步骤:
1. 找到一个支持中文的字体库文件(.ttf或者.bdf格式)。你可以在互联网上搜索“Arduino OLED中文字库”来找到一些可用的字体库文件。
2. 将字体库文件转换成C语言数组。你可以使用一些在线工具或者字体库生成器来完成这个步骤。将生成的C语言数组复制到你的Arduino代码中。
3. 调用新的字体库。在你的代码中,找到设置字体大小和颜色的部分,并添加一行代码来调用新的字体库。例如,使用`display.setFont(字体名)`来设置新的字体。
下面是一个示例代码,演示了如何使用新的支持中文字符的字体库:
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
// 替换为你的中文字库数组
const uint8_t ChineseFont[] PROGMEM = {
// 中文字符的C语言数组
};
void setup() {
Wire.begin();
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
// 设置新的字体库
display.setFont(ChineseFont);
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.println("你好");
display.display();
}
void loop() {
}
记得在`ChineseFont`数组中替换为你自己的中文字库数组。上传这段代码到Arduino后,你的OLED显示屏应该能正确显示中文字符了。
希望这对你有所帮助!如果还有其他问题,请随时提问。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-1-10 17:43
如果在OLED显示屏上显示中文出现乱码,可能是因为默认的字体库不支持中文字符。为了解决这个问题,你可 ...
使用u8g2 实现显示中文 yc0526vip 发表于 2024-01-10 17:45
使用u8g2 实现显示中文
使用U8g2库可以实现在Arduino上显示中文。首先,你需要确保已经安装了U8g2库。在Arduino IDE中,点击“工具”->“管理库”,然后搜索“U8g2”,找到适合你的OLED型号的库并安装。
下面是一个示例代码,演示了如何使用U8g2库显示中文:
#include <U8g2lib.h>
#include <Wire.h>
U8G2_SSD1306_128X64_NONAME_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
void setup() {
// 初始化I2C通信
Wire.begin();
// 启动OLED显示屏
u8g2.begin();
}
void loop() {
u8g2.clearBuffer();// 清空显示缓冲区
// 设置字体大小和样式
u8g2.setFont(u8g2_font_wqy12_t_gb2312);// 使用内置的中文字体
// 显示中文
u8g2.setCursor(0, 30);
u8g2.print("你好,世界!");
u8g2.sendBuffer();// 将缓冲区的内容发送到OLED显示屏上
delay(1000);// 延迟1秒钟
}
在这个示例代码中,我们使用了U8g2库的SSD1306_128X64_NONAME_1_HW_I2C驱动,并使用了内置的中文字体u8g2_font_wqy12_t_gb2312。你可以根据自己的OLED型号来选择合适的驱动和字体。
上传这段代码到Arduino后,你的OLED显示屏将会显示中文字符"你好,世界!"。
希望这对你有所帮助!如果还有其他问题,请随时提问。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-1-10 17:46
使用U8g2库可以实现在Arduino上显示中文。首先,你需要确保已经安装了U8g2库。在Arduino IDE中,点击“ ...
调整代码,将代码改成"你好"世界",循环显示
//by lingshunlab.com
#include <Arduino.h>
#include <U8g2lib.h>
#include <Wire.h>
// 定义u8g2实例
// 选择正确的屏幕芯片SH1106,分辨率128X64,接线方式I2C
U8G2_SH1106_128X64_NONAME_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
void setup() {
u8g2.begin(); // 初始化u8g2
u8g2.enableUTF8Print();// 启动UTF8,需要显示中文,必须要开启
}
void loop() {
// 定义字体,该u8g2_font_unifont_t_chinese2字库只支持一些常见的中文
u8g2.setFont(u8g2_font_unifont_t_chinese2);
u8g2.setFontDirection(0);
u8g2.firstPage();
do { // 显示的内容
u8g2.setCursor(18, 20);
u8g2.print("Hello World!!");
u8g2.setCursor(28, 45);
u8g2.print("你好,世界!"); // Chinese "Hello World"
} while ( u8g2.nextPage() );
delay(1000);
}
yc0526vip 发表于 2024-01-10 18:00
调整代码,将代码改成"你好"世界",循环显示
//b ...
以下是已经调整过的代码:
++
#include <Wire.h>
#include <U8g2lib.h>
// 定义u8g2实例
// 选择正确的屏幕芯片SH1106,分辨率128X64,接线方式I2C
U8G2_SH1106_128X64_NONAME_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
void setup() {
u8g2.begin(); // 初始化u8g2
u8g2.enableUTF8Print(); // 启动UTF8,需要显示中文,必须要开启
}
void loop() {
// 定义字体,该u8g2_font_wqy12_t_gb2312字库只支持一些常见的中文
u8g2.setFont(u8g2_font_wqy12_t_gb2312);
u8g2.setFontDirection(0);
u8g2.firstPage();
do {
// 显示的内容
u8g2.setCursor(18, 20);
u8g2.print("你好");
u8g2.setCursor(24, 45);
u8g2.print("世界!");
} while ( u8g2.nextPage() );
delay(1000);
}
此代码将在OLED显示屏上循环显示"你好世界!"。确保正确连接并选择了适合你的屏幕驱动和字库。上传代码后,OLED显示屏将显示"你好世界!"并每秒刷新一次。希望可以帮助到你!如有其他问题,请随时提问。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-1-10 18:00
以下是已经调整过的代码:
让你好 世界 闪烁 yc0526vip 发表于 2024-01-10 18:07
让你好 世界 闪烁
要让"你好 世界"闪烁,你可以在代码中添加一个变量来控制显示的开关状态。下面是已经修改的代码:
#include <U8g2lib.h>
#include <Wire.h>
U8G2_SH1106_128X64_NONAME_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
bool displayOn = true;
void setup() {
u8g2.begin(); // 初始化u8g2
u8g2.enableUTF8Print(); // 启用UTF8打印
}
void loop() {
u8g2.setFont(u8g2_font_wqy12_t_gb2312); // 设置字体,该字库只支持一些常见的中文字符
u8g2.setFontDirection(0);
u8g2.firstPage();
do {
u8g2.setCursor(18, 20);
if (displayOn) {
u8g2.print("你好");
} else {
u8g2.print(" "); // 空格来覆盖之前的文字
}
u8g2.setCursor(24, 45);
if (displayOn) {
u8g2.print("世界!");
} else {
u8g2.print(" "); // 空格来覆盖之前的文字
}
} while (u8g2.nextPage());
delay(500); // 延迟500毫秒
displayOn = !displayOn; // 切换显示开关状态
}
这段代码会使 "你好" 和 "世界!" 在显示屏上闪烁。每500毫秒,显示的文本会切换一次。希望这对你有所帮助!如果还有其他问题,请随时提问。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-1-10 18:07
要让"你好 世界"闪烁,你可以在代码中添加一个变量来控制显示的开关状态。下面是已经修改的代码:
...
调整代码,你好 世界 不同频率闪烁 yc0526vip 发表于 2024-01-10 18:11
调整代码,你好 世界 不同频率闪烁
要使"你好"和"世界"以不同的频率闪烁,你可以为每个文本使用不同的闪烁频率。下面是已经调整的代码:#include #include U8G2_SH1106_128X64_NONAME_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);bool displayOn1 = true;// 控制"你好"的显示开关状态bool displayOn2 = true;// 控制"世界"的显示开关状态unsigned long previousMillis1 = 0;// 用于计算时间间隔unsigned long previousMillis2 = 0;void setup() {u8g2.begin(); // 初始化u8g2u8g2.enableUTF8Print(); // 启用UTF8打印}void loop() {unsigned long currentMillis = millis();if (currentMillis - previousMillis1 >= 1000) { previousMillis1 = currentMillis; displayOn1 = !displayOn1; // 切换"你好"的显示开关状态}if (currentMillis - previousMillis2 >= 500) { previousMillis2 = currentMillis; displayOn2 = !displayOn2; // 切换"世界"的显示开关状态}u8g2.setFont(u8g2_font_wqy12_t_gb2312);u8g2.setFontDirection(0);u8g2.firstPage();do { u8g2.setCursor(18, 20); if (displayOn1) { u8g2.print("你好"); } else { u8g2.print(" "); // 空格来覆盖之前的文字 } u8g2.setCursor(24, 45); if (displayOn2) { u8g2.print("世界!"); } else { u8g2.print(" "); // 空格来覆盖之前的文字 }} while (u8g2.nextPage());}在这个修改后的代码中,"你好"每隔1秒闪烁一次,"世界"每隔0.5秒闪烁一次。希望这样满足了你的需求!如果还有其他问题,请随时提问。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-1-10 18:11
要使"你好"和"世界"以不同的频率闪烁,你可以为每个文本使用不同的闪烁频率。下面是已经调整的代码:#i ...
排版错误,重新输出 yc0526vip 发表于 2024-01-10 18:16
排版错误,重新输出
非常抱歉排版错误,下面是重新调整过的代码:
#include <U8g2lib.h>
#include <Wire.h>
U8G2_SH1106_128X64_NONAME_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
bool displayOn1 = true;// 控制"你好"的显示开关状态
bool displayOn2 = true;// 控制"世界"的显示开关状态
unsigned long previousMillis1 = 0;// 用于计算时间间隔
unsigned long previousMillis2 = 0;
void setup() {
u8g2.begin(); // 初始化u8g2
u8g2.enableUTF8Print(); // 启用UTF8打印
}
void loop() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis1 >= 1000) {
previousMillis1 = currentMillis;
displayOn1 = !displayOn1; // 切换"你好"的显示开关状态
}
if (currentMillis - previousMillis2 >= 500) {
previousMillis2 = currentMillis;
displayOn2 = !displayOn2; // 切换"世界"的显示开关状态
}
u8g2.setFont(u8g2_font_wqy12_t_gb2312);
u8g2.setFontDirection(0);
u8g2.firstPage();
do {
u8g2.setCursor(18, 20);
if (displayOn1) {
u8g2.print("你好");
} else {
u8g2.print(" "); // 空格来覆盖之前的文字
}
u8g2.setCursor(24, 45);
if (displayOn2) {
u8g2.print("世界!");
} else {
u8g2.print(" "); // 空格来覆盖之前的文字
}
} while (u8g2.nextPage());
}
现在你可以上传这段代码到Arduino,屏幕上会显示"你好"和"世界",并且它们以不同的频率闪烁。每隔1秒钟,"你好"会闪烁一次,而"世界"则每隔0.5秒闪烁一次。希望这次的输出没有排版错误!如果还有其他问题,请随时提问。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-1-10 18:16
非常抱歉排版错误,下面是重新调整过的代码:
现在你可以上传这段代码到Arduino,屏幕上会显示"你好 ...
调整代码 随机位置,随机时间 yc0526vip 发表于 2024-01-10 18:19
调整代码 随机位置,随机时间
好的,你想要在随机位置和随机时间显示文本。下面是调整过的代码实现这个功能:
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Wire.h>
Adafruit_SSD1306 display(128, 64, &Wire, -1);
int pos_x = 0;// 文本的X坐标位置
int pos_y = 0;// 文本的Y坐标位置
unsigned long previousMillis = 0;// 上一次文本更新的时间
unsigned long interval = 0;// 更新文本的时间间隔
void setup() {
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
}
void loop() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
interval = random(500, 2000);// 随机生成更新时间间隔(500ms到2000ms之间)
pos_x = random(0, display.width() - 16);// 随机生成X坐标位置
pos_y = random(0, display.height() - 8);// 随机生成Y坐标位置
display.clearDisplay();// 清空屏幕
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(pos_x, pos_y);
display.println("你好");
display.display();
}
}
在这段代码中,我们使用了`random()`函数来生成随机的位置和时间间隔。在每次更新文本之前,我们会重新生成随机的X坐标、Y坐标和时间间隔。然后,我们使用`display.setCursor()`函数将文本放置到随机位置,并使用`display.print()`函数打印文本。
你可以上传这段代码到Arduino,并观察屏幕上的效果。每隔一段随机的时间,屏幕上会出现一个随机位置的"你好"文本。希望这次的代码符合你的需求!如果还有其他问题,请随时提问。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-1-10 18:19
好的,你想要在随机位置和随机时间显示文本。下面是调整过的代码实现这个功能:
调整代码 "你好 哈哈 世界" 随机出现在别的地方
yc0526vip 发表于 2024-1-10 18:38
调整代码 "你好 哈哈 世界" 随机出现在别的地方
调整代码 "你好 哈哈 世界" 随机出现在别的地方
#include <U8g2lib.h>
#include <Wire.h>
U8G2_SH1106_128X64_NONAME_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
bool displayOn1 = true;// 控制"你好"的显示开关状态
bool displayOn2 = true;// 控制"世界"的显示开关状态
bool displayOn3 = true;// 控制"世界"的显示开关状态
unsigned long previousMillis1 = 0;// 用于计算时间间隔
unsigned long previousMillis2 = 0;
unsigned long previousMillis3 = 0;// 用于计算时间间隔
void setup() {
u8g2.begin(); // 初始化u8g2
u8g2.enableUTF8Print(); // 启用UTF8打印
}
void loop() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis1 >= 1000) {
previousMillis1 = currentMillis;
displayOn1 = !displayOn1; // 切换"你好"的显示开关状态
}
if (currentMillis - previousMillis2 >= 500) {
previousMillis2 = currentMillis;
displayOn2 = !displayOn2; // 切换"世界"的显示开关状态
}
if (currentMillis - previousMillis2 >= 100) {
previousMillis2 = currentMillis;
displayOn3 = !displayOn3; // 切换"哈哈"的显示开关状态
}
u8g2.setFont(u8g2_font_wqy12_t_gb2312);
u8g2.setFontDirection(0);
u8g2.firstPage();
do {
u8g2.setCursor(18, 20);
if (displayOn1) {
u8g2.print("你好");
} else {
u8g2.print(" "); // 空格来覆盖之前的文字
}
u8g2.setCursor(24, 45);
if (displayOn2) {
u8g2.print("世界!");
} else {
u8g2.print(" "); // 空格来覆盖之前的文字
}
u8g2.setCursor(32, 32);
if (displayOn3) {
u8g2.print("哈哈!");
} else {
u8g2.print(" "); // 空格来覆盖之前的文字
}
} while (u8g2.nextPage());
} yc0526vip 发表于 2024-01-10 18:38
调整代码 "你好 哈哈 世界" 随机出现在别的地方
好的,我来为你调整代码,使得文本"你好 哈哈 世界"能随机出现在屏幕的任意位置。下面是更新后的代码:
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
int textPosX = 0;
int textPosY = 0;
void setup() {
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
}
void loop() {
display.clearDisplay();
// 随机生成文本的位置
textPosX = random(0, SCREEN_WIDTH - 16);
textPosY = random(0, SCREEN_HEIGHT - 8);
// 设置文本样式
display.setTextSize(1);
display.setTextColor(WHITE);
// 在随机位置显示文本
display.setCursor(textPosX, textPosY);
display.print("你好 哈哈 世界");
display.display();
delay(2000);
}
通过随机生成文本的X和Y坐标位置,文本将会出现在屏幕的任意位置。你可以尝试将这段代码上传到Arduino并观察屏幕上文本的随机位置变化。每2秒钟,文本会重新随机出现在屏幕的另一个位置。
希望这次的调整能满足你的需求!如果还有其他问题,请随时提问。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-1-10 18:40
好的,我来为你调整代码,使得文本"你好 哈哈 世界"能随机出现在屏幕的任意位置。下面是更新后的代码: ...
调整代码"你好 哈哈 世界"随机出现在别的地方
页:
[1]
2