FishC 发表于 2024-1-10 18:47:03

yc0526vip 发表于 2024-01-10 18:46
调整代码"你好 哈哈 世界"随机出现在别的地方

好的,我明白你的需求。下面是更新后的代码,它会在每次循环时随机生成文本的位置并显示在屏幕上:

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

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

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

void loop() {
display.clearDisplay();

int textPosX = random(0, SCREEN_WIDTH - 16);// 随机生成X坐标位置
int textPosY = random(0, SCREEN_HEIGHT - 8);// 随机生成Y坐标位置

display.setTextSize(1);
display.setTextColor(WHITE);

display.setCursor(textPosX, textPosY);
display.println("你好 哈哈 世界");

display.display();

delay(2000);
}

通过随机生成文本的X和Y坐标位置,每次循环时文本将会出现在屏幕的不同位置。你可以将这段代码上传到Arduino并观察屏幕上文本的随机位置变化。希望这次调整满足了你的需求!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

yc0526vip 发表于 2024-1-10 18:47:52

FishC 发表于 2024-1-10 18:47
好的,我明白你的需求。下面是更新后的代码,它会在每次循环时随机生成文本的位置并显示在屏幕上:

...

调整代码"你好 哈哈 世界"随机出现在别的地方

#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());
}

FishC 发表于 2024-1-10 18:48:04

yc0526vip 发表于 2024-01-10 18:47
调整代码"你好 哈哈 世界"随机出现在别的地方

#i ...

很抱歉,我刚刚给出的代码是基于Adafruit库的。如果你使用的是U8g2库和SH1106控制器的OLED显示屏,请使用下面的代码进行调整:#include <U8g2lib.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.setFlipMode(1);// 设置显示方向为0度}void loop() {unsigned long currentMillis = millis();    if (currentMillis - previousMillis1 >= 1000) {    previousMillis1 = currentMillis;    displayOn1 = !displayOn1;// 切换"你好"的显示开关状态}    if (currentMillis - previousMillis2 >= 500) {    previousMillis2 = currentMillis;    displayOn2 = !displayOn2;// 切换"世界"的显示开关状态}if (currentMillis - previousMillis3 >= 100) {    previousMillis3 = currentMillis;    displayOn3 = !displayOn3;// 切换"哈哈"的显示开关状态}    u8g2.clearBuffer();// 清空缓冲区    u8g2.setFont(u8g2_font_wqy12_t_gb2312);// 设置字体    u8g2.setCursor(18, 20);if (displayOn1) {    u8g2.print("你好");}   u8g2.setCursor(24, 45);if (displayOn2) {    u8g2.print("世界!");}u8g2.setCursor(32, 32);if (displayOn3) {    u8g2.print("哈哈!");}    u8g2.sendBuffer();// 发送缓冲区内容delay(200);// 延迟200毫秒}这段代码会在设定的时间间隔内,通过切换显示开关状态来在屏幕上显示或隐藏文本。你可以根据需要调整时间间隔和文字位置。希望这次的调整符合你的要求!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

yc0526vip 发表于 2024-1-10 18:51:50

FishC 发表于 2024-1-10 18:48
很抱歉,我刚刚给出的代码是基于Adafruit库的。如果你使用的是U8g2库和SH1106控制器的OLED显示屏,请使 ...

排版错误,重新输出

FishC 发表于 2024-1-10 18:52:06

yc0526vip 发表于 2024-01-10 18:51
排版错误,重新输出

非常抱歉,排版错误给你带来困扰,请见谅。下面是重新排版的代码:

#include <U8g2lib.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.setFlipMode(1);// 设置显示方向为0度
}

void loop() {
unsigned long currentMillis = millis();

if (currentMillis - previousMillis1 >= 1000) {
    previousMillis1 = currentMillis;
    displayOn1 = !displayOn1;// 切换"你好"的显示开关状态
}

if (currentMillis - previousMillis2 >= 500) {
    previousMillis2 = currentMillis;
    displayOn2 = !displayOn2;// 切换"世界"的显示开关状态
}

if (currentMillis - previousMillis3 >= 100) {
    previousMillis3 = currentMillis;
    displayOn3 = !displayOn3;// 切换"哈哈"的显示开关状态
}

u8g2.clearBuffer();// 清空缓冲区

u8g2.setFont(u8g2_font_wqy12_t_gb2312);// 设置字体

u8g2.setCursor(18, 20);
if (displayOn1) {
    u8g2.print("你好");
}

u8g2.setCursor(24, 45);
if (displayOn2) {
    u8g2.print("世界!");
}

u8g2.setCursor(32, 32);
if (displayOn3) {
    u8g2.print("哈哈!");
}

u8g2.sendBuffer();// 发送缓冲区内容
delay(200);// 延迟200毫秒
}

请将此代码复制并粘贴到你的Arduino IDE中进行测试。希望这次的排版没有问题,如有其他问题,请随时提问。祝你成功!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: 1 [2]
查看完整版本: Arduino oled显示