Освободить 290 байт Arduino Nano

Frusty
Offline
Зарегистрирован: 24.11.2018

#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();
}

https://imgur.com/0XjYUVX

Frusty
Offline
Зарегистрирован: 24.11.2018

Уменшил до -168 удалив Serial.

kalapanga
Offline
Зарегистрирован: 23.10.2016

Вот Вы сами по Вашей ссылке идите и пытайтесь там что-то прочитать. Здесь Ваши проблемы будут обсуждать, когда Вы сообщение компилятора текстом сюда вставите.

Frusty
Offline
Зарегистрирован: 24.11.2018

Скетч использует 24914 байт (81%) памяти устройства. Всего доступно 30720 байт. Глобальные переменные используют 2216 байт (108%) динамической памяти, оставляя -168 байт для локальных переменных. Максимум: 2048 байт.

Недостаточно памяти; прочитайте http://www.arduino.cc/en/Guide/Troubleshooting#size Ошибка компиляции для платы Arduino Nano.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

для стольких жрущих память библиотек, только мега подойдёт.  Или ищи другие

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

OLED_I2C точно можно заменить на ASOLED, если графика ненужна.  

Frusty
Offline
Зарегистрирован: 24.11.2018

DetSimen пишет:

OLED_I2C точно можно заменить на ASOLED, если графика ненужна.  

Она есть в Arduino Libraries?

 

Frusty
Offline
Зарегистрирован: 24.11.2018

Мне графики не нужно. Мне нужно просто вывести на екран Oled 128x64 3 показания датчика и часы. Потом записать на SD.

kalapanga
Offline
Зарегистрирован: 23.10.2016

Выкинуть класс String, избавиться от прожорливых библиотек. В разделе Проекты есть тема посвященная компактной библиотеке дисплея. Для SD карты есть разные библиотеки. Конкретную не посоветую, но надо пробовать, может какая экономнее окажется. 

А памяти надо не 168 байт освободить, а больше. Должно остаться свободное место.

kalapanga
Offline
Зарегистрирован: 23.10.2016

Frusty пишет:

Мне графики не нужно. Мне нужно просто вывести на екран Oled 128x64 3 показания датчика и часы. Потом записать на SD.

Графика - это имеется ввиду линии, кружочки. Возможно этим придётся пожертвовать, оставить только текст.

Frusty
Offline
Зарегистрирован: 24.11.2018

Хорошо. Но у меня есть другая идея, что если считывать показания датчика вручную? Через Wire?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

У тебя OLED_I2C отжирает 1024 байт под экранный буфер.

512 байт отжирает SD под свой буфер из 2048 имеющихся байт.

На этом фоне переписывание чтения BMP - пустая трата времени. 

Frusty
Offline
Зарегистрирован: 24.11.2018

У меня вопрос. Можно както на SD карту перенести код?

Frusty
Offline
Зарегистрирован: 24.11.2018

DetSimen пишет:

У тебя OLED_I2C отжирает 1024 байт под экранный буфер.

512 байт отжирает SD под свой буфер из 2048 имеющихся байт.

На этом фоне переписывание чтения BMP - пустая трата времени. 

Что мне делать тогда?

negavoid
Offline
Зарегистрирован: 09.07.2016

Frusty пишет:
Что мне делать тогда?

Взять другую библиотеку для OLED дисплея.

Frusty
Offline
Зарегистрирован: 24.11.2018

Всем спасибо. https://github.com/greiman/SSD1306Ascii

Нашол замену OLED_I2S. Отличный вариант. Теперь есть 40% свободной памяти.

Frusty
Offline
Зарегистрирован: 24.11.2018

Но - графика(. Ну что поделаешь.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Frusty пишет:

DetSimen пишет:

OLED_I2C точно можно заменить на ASOLED, если графика ненужна.  

Она есть в Arduino Libraries?

Это она