鱼C论坛

 找回密码
 立即注册
12
返回列表 发新帖
楼主: yc0526vip

Arduino oled显示

[复制链接]
发表于 2024-1-10 18:47:03 | 显示全部楼层
yc0526vip 发表于 2024-01-10 18:46
调整代码"你好 哈哈 世界"  随机出现在别的地方


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

  1. #include <Adafruit_GFX.h>
  2. #include <Adafruit_SSD1306.h>
  3. #include <Wire.h>

  4. #define SCREEN_WIDTH 128
  5. #define SCREEN_HEIGHT 64

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

  7. void setup() {
  8.   display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  9.   display.clearDisplay();
  10. }

  11. void loop() {
  12.   display.clearDisplay();

  13.   int textPosX = random(0, SCREEN_WIDTH - 16);  // 随机生成X坐标位置
  14.   int textPosY = random(0, SCREEN_HEIGHT - 8);  // 随机生成Y坐标位置
  15.   
  16.   display.setTextSize(1);
  17.   display.setTextColor(WHITE);
  18.   
  19.   display.setCursor(textPosX, textPosY);
  20.   display.println("你好 哈哈 世界");
  21.   
  22.   display.display();
  23.   
  24.   delay(2000);
  25. }
复制代码


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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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());
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

排版错误,重新输出
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-1-10 18:52:06 | 显示全部楼层
yc0526vip 发表于 2024-01-10 18:51
排版错误,重新输出


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

  1. #include <U8g2lib.h>
  2. U8G2_SH1106_128X64_NONAME_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);

  3. bool displayOn1 = true;  // 控制"你好"的显示开关状态
  4. bool displayOn2 = true;  // 控制"世界"的显示开关状态
  5. bool displayOn3 = true;  // 控制"哈哈"的显示开关状态
  6. unsigned long previousMillis1 = 0;  // 用于计算时间间隔
  7. unsigned long previousMillis2 = 0;
  8. unsigned long previousMillis3 = 0;  // 用于计算时间间隔

  9. void setup() {
  10.   u8g2.begin();  // 初始化显示屏
  11.   u8g2.setFlipMode(1);  // 设置显示方向为0度
  12. }

  13. void loop() {
  14.   unsigned long currentMillis = millis();

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

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

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

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

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

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

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

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

  41.   u8g2.sendBuffer();  // 发送缓冲区内容
  42.   delay(200);  // 延迟200毫秒
  43. }
复制代码


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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 13:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表