«Ошибка выделения SSD1306» при #include SD.h
Я использую файл примера ssd1306_128x64_i2c из библиотеки 1306.
Он работает отлично, пока я не добавляю строку #include SD.h, после чего выдает ошибку сбоя выделения.
Пожалуйста, сообщите.
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <SD.h>
Adafruit_SSD1306 display(128, 64, &Wire, 4);
void setup() {
Serial.begin(9600);
// SSD1306_SWITCHCAPVCC = генерировать напряжение дисплея от 3,3 В внутри
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
}
display.clearDisplay();
display.display();
testdrawchar();
}
void loop() {
}
void testdrawchar(void) {
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.cp437(true);
for(int16_t i=0; i<256; i++) {
if(i == '\n') display.write(' ');
else display.write(i);
}
display.display();
}
@cds333, 👍1
Обсуждение2 ответа
И библиотеке SD, и библиотекам SSD1306 нужны большие буферы. Это означает много памяти. У вас мало памяти.
- SD требует не менее 512 байт для секторного буфера (который выделяется во время компиляции).
- SSD1306 требует не менее 1 КБ для буфера дисплея (который выделяется во время выполнения).
- Последовательному интерфейсу требуется не менее 128 байт для буферов TX и RX (которые выделяются во время компиляции).
- Библиотеке Wire требуется 32 байта для буфера TX.
Это 1696 байт из общего числа 2048, и это без учета других переменных и вещей, которые нужны вашей программе, различным библиотекам и самому ядру Arduino, а также стек (и заданный для него минимальный размер зоны безопасности). ).
Вы ничего не можете с этим поделать, кроме как обновить Arduino до версии с большим объемом памяти или разделить проект на несколько плат Arduino.
Есть ли способ точно узнать, сколько памяти у меня осталось во время выполнения?, @cds333
Не на самом деле нет. Все, что вы знаете, это то, что попытка выделить память не удалась., @Majenko
Однако где-то есть пример/библиотека «свободной памяти», которая может сказать вам, сколько свободной памяти имеется, что может помочь., @Majenko
Мне удалось уместить все это с помощью текстовой библиотеки для OLED.
Библиотека SSD1306Ascii
Огромное спасибо Маженко за объяснение проблемы и Грейману за написание библиотеки!
- Прокрутите одну строку текста, пока другая строка остается статической на OLED-дисплее SSD1306.
- Редактирование определенной позиции в файле, хранящемся на SD-карте
- Не могу отключить внутренний интерфейс I2C подтягиваний на ESP32
- Неустранимая ошибка Adafruit_SSD1306.cpp: pgmspace.h: нет такого файла или каталога с использованием SSD1306 на Arduino Nano RP2040
- Arduino SD подсчитывает файлы и открывает их последним, как это сделать?
- Есть ли способ снять ограничение имени файла 8.3 в библиотеке SD.h?
- Помогите настроить вертикальную прокрутку на SSD1306
- Arduino, проблема с прерыванием и SSD1306 OLED
У меня была точно такая же проблема, и я был рад видеть, что кто-то уже задал этот вопрос. Удивительно, что вы не можете использовать SD.h и oled-библиотеку adafruit одновременно., @raddevus