【问题标题】:Problem with setting pixels to OLED display 128x64将像素设置为 OLED 显示器 128x64 的问题
【发布时间】:2020-08-26 22:25:27
【问题描述】:

所以我有一个类“SnakeGame”来处理我的游戏。 我有另一个名为 engine 的类,它只是一个接受玩家输入和设置像素(头文件和主文件)的类:

void Engine::SetPixels(int positionX, int positionY, int sizeX, int sizeY) {
    display.fillRect(positionX, positionY, sizeX, sizeY, WHITE);
    Serial.println("drawing");
    display.display();
}

void Engine::Display() {
    display.display();
    Serial.println("Display");
}

在我的 .ino 文件和 loop() 函数中(我目前正在使用 Visual micro):

SnakeGame game;

void loop() {
    // Calculate delta time
    unsigned long frameStartTime = millis();
    unsigned long deltaTimeMillis = frameStartTime - timeOld;
    float deltaTime = deltaTimeMillis / 1000.0;
    timeOld = frameStartTime;

    // Update
    engine.updateLoop(deltaTime);
    engine.SetPixels(x, y, 16, 16);
    x, y++;

    game.updateLoop(engine);
}

代码运行良好,serial.println 仍在打印,但我的显示器上没有任何奇怪的东西。当然,我记得在setup() 中调用display.begin()。如果我只是删除SnakeGame game 行,它将正常工作。即使我没有调用该变量或对该变量做任何事情,但如果它在那里,它仍然会:

  1. 不断重启arduino
  2. 未在显示屏上绘制任何像素。

这是为什么呢?这是我完整的script

【问题讨论】:

  • 删除Serial.println("Starting");时会发生什么
  • 正常打印出来的
  • 所以如果println 正在破坏您的 LCD 代码,那么就会有一些障碍......他们使用同一行或任何资源......
  • 我认为问题不在于 println 而在于指针。因为如果我直接调用该函数并删除指针它会正常工作。
  • @Spektre 我终于知道我的代码出了什么问题。在SnakeGame.h 中,我声明了 2 个 char 数组,每个数组的大小约为 512MB,因此总数为 1024MB。 arduino 的内存只有大约 2KB,所以只有一半。因此,它会在运行代码时崩溃,因为它试图访问比它拥有的更多的内存。我对 c++ 和 arduino 真的很陌生,所以我以前没有任何内存管理经验。

标签: c++ pointers arduino


【解决方案1】:

我的代码的问题是我有 2 个 char 数组,每个数组的大小约为 512MB,因此总数为 1024MB。我使用的内存比 Arduino 多得多,所以它会冻结并停止工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-13
    • 1970-01-01
    • 2013-08-17
    • 1970-01-01
    • 2017-11-29
    • 2020-04-25
    相关资源
    最近更新 更多