Освободить 290 байт Arduino Nano
- Войдите на сайт для отправки комментариев
Вс, 24/02/2019 - 15:36
#include <OLED_I2C.h>
#include <DS1307.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#include "uRTCLib.h"
#include <SD.h>
#define SEALEVELPRESSURE_HPA (1013.25);
Adafruit_BME280 bme;
OLED display(A4, A5, 8);
extern uint8_t MediumNumbers[];
uRTCLib rtc;
File myFile;
void setup() {
if (!bme.begin()) {
Serial.println("Could not find a valid BME280 sensor, check wiring!");
while (1);
}
if (!SD.begin(4)) {
Serial.println("initialization failed!");
while (1);
}
myFile = SD.open("data.txt", FILE_WRITE);
display.begin();
display.setFont(MediumNumbers);
rtc.set_rtc_address(0x68);
display.clrScr();
delay(1000);
}
void loop() {
display.clrScr();
display.setFont(MediumNumbers);
display.drawLine(0,0,0,63);
display.drawLine(2,0,73,0);
display.print((String)bme.readTemperature(),1, 1);
display.drawLine(2,19,73,19);
display.print((String)(bme.readPressure()*0.0075),1, 20);
display.drawLine(2,39,73,39);
display.print((String)bme.readHumidity(),1, 40);
display.drawLine(2,63,73,63);
display.drawLine(73,0,73,63);
rtc.refresh();
for (int i=0; i<25; i++){
delay(20);
display.drawCircle(100,32,i);
display.update();
}
if (myFile) {
Serial.print("Writing to test.txt...");
myFile.print(rtc.hour());
myFile.print(":");
myFile.print(rtc.minute());
myFile.print(":");
myFile.print(rtc.second());
myFile.print(bme.readTemperature());
myFile.print("");
myFile.print(bme.readPressure()*0.0075);
myFile.print("");
myFile.print(bme.readHumidity());
myFile.println("");
myFile.close();
} else {
// if the file didn't open, print an error:
Serial.println("error opening test.txt");
}
display.update();
}
Уменшил до -168 удалив Serial.
Вот Вы сами по Вашей ссылке идите и пытайтесь там что-то прочитать. Здесь Ваши проблемы будут обсуждать, когда Вы сообщение компилятора текстом сюда вставите.
Скетч использует 24914 байт (81%) памяти устройства. Всего доступно 30720 байт. Глобальные переменные используют 2216 байт (108%) динамической памяти, оставляя -168 байт для локальных переменных. Максимум: 2048 байт.
Недостаточно памяти; прочитайте http://www.arduino.cc/en/Guide/Troubleshooting#size Ошибка компиляции для платы Arduino Nano.
для стольких жрущих память библиотек, только мега подойдёт. Или ищи другие
OLED_I2C точно можно заменить на ASOLED, если графика ненужна.
OLED_I2C точно можно заменить на ASOLED, если графика ненужна.
Она есть в Arduino Libraries?
Мне графики не нужно. Мне нужно просто вывести на екран Oled 128x64 3 показания датчика и часы. Потом записать на SD.
Выкинуть класс String, избавиться от прожорливых библиотек. В разделе Проекты есть тема посвященная компактной библиотеке дисплея. Для SD карты есть разные библиотеки. Конкретную не посоветую, но надо пробовать, может какая экономнее окажется.
А памяти надо не 168 байт освободить, а больше. Должно остаться свободное место.
Мне графики не нужно. Мне нужно просто вывести на екран Oled 128x64 3 показания датчика и часы. Потом записать на SD.
Графика - это имеется ввиду линии, кружочки. Возможно этим придётся пожертвовать, оставить только текст.
Хорошо. Но у меня есть другая идея, что если считывать показания датчика вручную? Через Wire?
У тебя OLED_I2C отжирает 1024 байт под экранный буфер.
512 байт отжирает SD под свой буфер из 2048 имеющихся байт.
На этом фоне переписывание чтения BMP - пустая трата времени.
У меня вопрос. Можно както на SD карту перенести код?
У тебя OLED_I2C отжирает 1024 байт под экранный буфер.
512 байт отжирает SD под свой буфер из 2048 имеющихся байт.
На этом фоне переписывание чтения BMP - пустая трата времени.
Что мне делать тогда?
Взять другую библиотеку для OLED дисплея.
Всем спасибо. https://github.com/greiman/SSD1306Ascii
Нашол замену OLED_I2S. Отличный вариант. Теперь есть 40% свободной памяти.
Но - графика(. Ну что поделаешь.
OLED_I2C точно можно заменить на ASOLED, если графика ненужна.
Она есть в Arduino Libraries?
Это она