Вызов функции из одного класса во второй вызывает закодированную ошибку в последовательном C ++ - PullRequest
0 голосов
/ 02 апреля 2020

У меня проблема с моим кодом, я программирую на плате разработчика ESP8266, используя i2 c lcd

Посмотрите на последнюю строку ManageWifi. cpp

#ifndef ALARMCLOCK_ESP_MANAGELCD_H
#include "ManageLcd.h"
ManageLcd lcdManager;
#endif
    server.on("/setAlarm", HTTP_GET, [](AsyncWebServerRequest * request) {
    if(request->hasParam("time")) {
        AsyncWebParameter* p = request->getParam("time");
        Serial.printf("Received %s with value %s from IP: \n", p->name().c_str(), p->value().c_str());
        Serial.println(request->client()->remoteIP());
        request->send(200, "text/plain", "OK");
        timeManager.saveAlarmTime(String(p->value()));
        lcdManager.printTextLcd("New request"); <--- This line causes crash
    }
    });

ManageLCD.h

class ManageLcd {
public:
  void printTextLcd(String text);
};

ManageLcd. cpp

#include "ManageLcd.h"
void ManageLcd::printTextLcd(String text){
    display.clearDisplay();
    display.display();
    display.print(text);
    display.display();
    delay(1000);
}

Ошибка при получении на последовательном мониторе https://pastebin.com/Uftz5ThJ Я понятия не имею, как расшифровать это. Использование этих библиотек https://github.com/me-no-dev/ESPAsyncWebServer и https://github.com/adafruit/Adafruit_SSD1306

1 Ответ

0 голосов
/ 02 апреля 2020

Вы не можете вызвать setupLcd из ManageLcd объекта.

Вот пример его инициализации:

ManageLcd lcdManager;
if(!lcdManager.setupLcd()) {
    while(true){
        Serial.println("LCD allocation failed");
        delay(1000);
    }
}
lcdManager.clearLcd();
lcdManager.printTextLcd("New request");
...