Библиотека 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 непригодными для использования, кто-нибудь знает, как это исправить?
@3MP The Rook, 👍1
Обсуждение0
- Аппаратный SPI Arduino NANO не работает
- Какие контакты можно использовать для выбора микросхемы (CS, CC) на Arduino Nano Every?
- Есть ли функция Adafruit для инвертирования цветов моего экрана для языка Arduino?
- `.readFileCounts()` не работает в мини-модуле DFPlayer
- Как погасить светодиод за определенное время с помощью FastLED
- Как установить CS-пин на Beetle BLE/Bluno Beetle на Adafruit SD Card Breakout - Ошибка инициализации!
- ЖК-дисплеи мешают работе SD-карты регистратора данных Adafruit
- DFPlayer, воспроизведение звука при высоком значении pin
Я не вижу библиотеки 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