Библиотека SD - карт мешает работе Adafruit

В настоящее время я работаю над регистратором данных, который использует oled-дисплеи i2c и датчики тока. Оба они используют библиотеки adafruit. Для записи данных я использую sd-библиотеку arduino, но каким-то образом sd-библиотека мешает моим компонентам i2c, так что они не будут работать, пока работают функции SD - карты. добавление любого кода из библиотеки sd полностью приведет к сбою компонентов i2c. Чтобы проверить это, я попытался просмотреть 2 разных текста на 2 разных дисплеях i2c.

Вот текущий код, в котором работают компоненты i2c :

#include <Adafruit_SSD1306.h>
#include "SdFat.h"

#define OLED_RESET 4
Adafruit_SSD1306 Display1(OLED_RESET);
Adafruit_SSD1306 Display2(OLED_RESET);



int i, j;

void setup()   {

  //Serial.begin(9600);

  Display1.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  Display1.clearDisplay();
  Display1.display();

  Display2.begin(SSD1306_SWITCHCAPVCC, 0x3D);
  Display2.clearDisplay();
  Display2.display();

}


void loop() {

  Display1.setTextSize(1);
  Display1.setTextColor(WHITE, BLACK);
  Display1.setCursor(0, 0 );
  Display1.println("Hello");
  Display1.display();
  Display1.clearDisplay();

  Display2.setTextSize(1);
  Display2.setTextColor(WHITE, BLACK);
  Display2.setCursor(0, 0);
  Display2.println("There");
  Display2.display();
  Display2.clearDisplay();

}

А вот код, где компоненты не работают

#include <Adafruit_SSD1306.h>
#include "SdFat.h"

#define OLED_RESET 4
Adafruit_SSD1306 Display1(OLED_RESET);
Adafruit_SSD1306 Display2(OLED_RESET);
SdFat SD;

int i, j;

void setup()   {

  //Serial.begin(9600);

  Display1.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  Display1.clearDisplay();
  Display1.display();

  Display2.begin(SSD1306_SWITCHCAPVCC, 0x3D);
  Display2.clearDisplay();
  Display2.display();

}


void loop() {

  Display1.setTextSize(1);
  Display1.setTextColor(WHITE, BLACK);
  Display1.setCursor(0, 0 );
  Display1.println("Hello");
  Display1.display();
  Display1.clearDisplay();

  Display2.setTextSize(1);
  Display2.setTextColor(WHITE, BLACK);
  Display2.setCursor(0, 0);
  Display2.println("There");
  Display2.display();
  Display2.clearDisplay();

}

Добавление любого кода, который включает в себя библиотеку SD-карт, например добавление файлов или объявление самой команды SD, сделает компоненты i2c непригодными для использования, кто-нибудь знает, как это исправить?

, 👍1

Обсуждение

Я не вижу библиотеки SD в вашем скетче. Вы используете SdFat, @Juraj

То же самое происходит и с библиотекой SdFat, @3MP The Rook

у вас заканчивается память с буферами отображения и SD буфером, @Juraj

как я могу это проверить? когда я попробовал его только с 1 датчиком и 1 дисплеем, он хорошо работает с записью SD-карты. Не говоря уже о том, что нет никаких ошибок в отношении памяти при загрузке кода в nano, @3MP The Rook

память выделяется во время выполнения, поэтому процесс сборки не может ее оценить. библиотека отображения имеет buffer = (uint8_t *)malloc(WIDTH * ((HEIGHT + 7) / 8)), @Juraj

Ошибки компиляции для проблемы с памятью отсутствуют, поскольку компилятор может вычислить только глобальное/статическое использование памяти. Локальные переменные там не учитываются. Вот почему Arduino IDE предупреждает вас о (я думаю) 75% - ном использовании памяти. То, что он работает только с одним дисплеем, поддерживает гипопихсис нехватки памяти, @chrisl

Тогда как это исправить?, @3MP The Rook

Практичное решение, вероятно, состоит в том, чтобы получить Arduino с большим количеством оперативной памяти. Их очень много, но Nano Every (6 КБ, а не 2 КБ), похоже, имеет смысл. Некоторые вещи, о которых я упоминал в ответе к аналогичному вопросу *может быть* стоит прочитать. Но даже с ними вы можете быть на пределе или даже превысить его., @timemage