yc0526vip 发表于 2024-1-11 16:16:05

Arduino 代码问题

@fishc

这段代码有问题吗?


#include <U8g2lib.h>
#include <Wire.h>
#include "FACE_Big_smile.h"
#include "FACE_Heart_large.h"

U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, U8X8_PIN_NONE);

void page1() {
}

void setup(){
u8g2.setI2CAddress(0x3C*2);
u8g2.begin();
}

void loop(){
u8g2.firstPage();
do
{
    while (true) {
      u8g2.drawXBMP(20,0,89,64,FACE_Big_smile);
      delay(1000);
      u8g2.drawXBMP(20,0,89,64,FACE_Heart_large);
      delay(1000);
    }
}while(u8g2.nextPage());

}

FishC 发表于 2024-1-11 16:16:25

这段代码有一些问题。让我们一步步来解决。

首先,你需要确保你的头文件 `#include <U8g2lib.h>` 和 `#include <Wire.h>` 被正确引入。这两个头文件用于操作 OLED 显示屏和 I2C 通信。

接下来,你需要确保你的全局变量 `u8g2` 能够正确初始化。在 `setup()` 函数中,你可以使用 `begin()` 方法来初始化你的 OLED 显示屏。但是在调用 `begin()` 方法之前,你需要设置 I2C 地址。根据你的代码,你可以使用 `setI2CAddress()` 方法来设置地址。确保传递的参数是正确的。在你的代码中,你设置的地址是 `0x3C*2`,这是因为 I2C 地址是 7 位的而不是 8 位的。大多数情况下,如果你的 OLED 显示屏没有其他设备与之冲突,你可以将地址设置为 `0x3C`。

然后,我们来看看 `loop()` 函数。在这个函数中,你使用了 `firstPage()` 和 `nextPage()` 方法来处理页面刷新。这是正确的做法。但是,在你的代码中,你使用 `while (true)` 来循环显示两个图像,这是不必要的,并且会导致程序陷入无限循环。你只需要删除这个多余的循环即可。

最后,记得要加上适当的延迟,这样可以控制图像显示的速度。例如,你可以使用 `delay(1000)` 来设置每个图像显示的时间间隔为 1 秒。

修复后的代码如下所示:

#include <U8g2lib.h>
#include <Wire.h>
#include "FACE_Big_smile.h"
#include "FACE_Heart_large.h"

U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, U8X8_PIN_NONE);

void page1() {
}

void setup(){
u8g2.setI2CAddress(0x3C);
u8g2.begin();
}

void loop(){
u8g2.firstPage();
do
{
    u8g2.drawXBMP(20,0,89,64,FACE_Big_smile);
    delay(1000);
    u8g2.nextPage();

    u8g2.drawXBMP(20,0,89,64,FACE_Heart_large);
    delay(1000);
    u8g2.nextPage();
} while(u8g2.nextPage());
}

希望能对你有所帮助!如果你还有其他问题,请随时提问。

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