Освободить 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?
Это она