Помогите отимизировать код, не влазит в память.

AndryGladky
Offline
Зарегистрирован: 09.10.2014

Здравствуйте форумчане, прошу помощи как уменьшить данный код, просто первый раз работаю с OLED дисплеем, и очень много памяти занимает картинка которую хочу загрузить при начальном старте программы. Может как то можно сделать это компактнее или с помощью других библиотек. А хотелку еще не всю дописал. Может кому будет интересно, это будет дисплей встроенный в приборку ВАЗ 2106 с показания уровня газа в баллоне, температурой редуктора и окружающего воздуха, с значком ваз при включении зажигания ну или при старте процессора.

Выпадает ошибка: скетч использует 25422 байт (82%) памяти устройства. Всего доступно 30720 байт.Глобальные переменные используют 2628 байт (128%) динамической памяти, оставляя -580 байт для локальных переменных. Максимум: 2048 байт.

#include <U8g2lib.h>
#include <OneWire.h>
#include <DallasTemperature.h>
U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE);   // All Boards without Reset of the Display

#define ONE_WIRE_BUS_1 A1
#define ONE_WIRE_BUS_2 A2

OneWire oneWire_1(ONE_WIRE_BUS_1);
OneWire oneWire_2(ONE_WIRE_BUS_2);

DallasTemperature sensor_1(&oneWire_1);
DallasTemperature sensor_2(&oneWire_2);



void setup()
{
 u8g2.begin();
}

void loop() 
{
static const uint8_t VAZ [] = {
0x00,0x80,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0xE0,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0xFC,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0xFE,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x80,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,
0xC0,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,
0xC0,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,
0xE0,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,
0xE0,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,
0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,
0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,
0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,
0xF0,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x3F,
0xF0,0xFF,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x3F,
0xF8,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x3F,
0xF8,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x3F,
0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x3F,
0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x3F,
0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0xF8,0xFF,0x3F,
0xFC,0xFF,0xF7,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0x00,0xFC,0xFF,0xFF,0x3F,
0xFC,0xFF,0xE7,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,
0xFC,0xFF,0xC7,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,
0xFC,0xFF,0x87,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,
0xFC,0xFF,0x07,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,
0xFC,0xFF,0x07,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,
0xFC,0xFF,0x0F,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,
0xFE,0xFF,0x0F,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,
0xFE,0xFF,0x0F,0xC0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,
0xFE,0xFF,0x0F,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,
0xFE,0xFF,0x0F,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,
0xFE,0xFF,0x1F,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,
0xFE,0xFF,0x1F,0x00,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,
0xFE,0xFF,0x1F,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,
0xFE,0xFF,0x1F,0x00,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,
0xFE,0xFF,0x1F,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,
0xFE,0xFF,0x3F,0x00,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,
0xFE,0xFF,0x3F,0x00,0x00,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,
0xFE,0xFF,0x7F,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,
0xFE,0xFF,0x7F,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,
0xFE,0xFF,0xFF,0x00,0x00,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,
0xFE,0xFF,0xFF,0x00,0x00,0x00,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,
0xFE,0xFF,0xFF,0x01,0x00,0x00,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,
0xFE,0xFF,0xFF,0x03,0x00,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,
0xFE,0xFF,0xFF,0x0F,0x00,0x00,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,
0xFE,0xFF,0xFF,0x3F,0x00,0x00,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,
0xFC,0xFF,0xFF,0xFF,0x03,0xC0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,
0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,
0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,
0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,
0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,
0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0x3F,
0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0xFE,0x00,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,0x3F,
0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0xFF,0x00,0x00,0x00,0xFC,0xFF,0xFF,0xFF,0x3F,
0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0x81,0xFF,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x3F,
0xF0,0xFF,0xFF,0xFF,0xFF,0x7F,0xC0,0xFF,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0x3F,
0xE0,0xFF,0xFF,0xFF,0xFF,0x0F,0xE0,0xFF,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0x3F,
0xE0,0xFF,0xFF,0xFF,0xFF,0x03,0xF0,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x3F,
0x00,0xFF,0xFF,0xFF,0xFF,0x00,0xFC,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x3F,
0x00,0xFC,0xFF,0xFF,0x3F,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0xF0,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0xFC,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0xE0,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};  
u8g2.drawXBMP (0, 0, 128, 64, VAZ);
delay(5000);
YrovenGAZA();
delay(5000);
TempGAZA ();
delay(5000);
TempOUT();
delay(5000);
}

void TempGAZA() {
  sensor_1.requestTemperatures();// читаем температуру 1 датчик
  int temp1 = sensor_1.getTempCByIndex(0); //считывание температуры 1 датчика
    u8g2.firstPage();
  do {
    u8g2.setFontDirection(1);
    u8g2.setFont(u8g2_font_osb26_tn);
    u8g2.setCursor(102, 0);        // set position
    u8g2.print(temp1);
    u8g2.drawCircle(120,50,5);
    u8g2.drawFrame(0,0,100,64);
    u8g2.drawFrame(1,1,98,62);
    if (temp1>=28)
    {u8g2.drawBox(4,6,10,52);
    u8g2.drawBox(15,6,10,52);
    u8g2.drawBox(26,6,10,52);
    }
    else if (temp1>=27)
    {
     u8g2.drawBox(4,6,10,52);
     u8g2.drawBox(15,6,10,52);
    }
    else if (temp1>=26)
    {
     u8g2.drawBox(4,6,10,52);
     }
    } while (u8g2.nextPage());
  delay(500);
}

void TempOUT(){
    //sensor_2.requestTemperatures();// читаем температуру 2 датчик
    //int temp2 = sensor_2.getTempCByIndex(0); //считывание температуры 2 датчика
    sensor_1.requestTemperatures();// читаем температуру 1 датчик
    int temp1 = sensor_1.getTempCByIndex(0); //считывание температуры 1 датчика
    u8g2.firstPage();
   do {
    u8g2.setFontDirection(1);
    u8g2.setFont(u8g2_font_osb26_tn);
    u8g2.setCursor(102, 0);        // set position
    u8g2.print(temp1);
    u8g2.setFont(u8g2_font_luBS08_tf);
    u8g2.drawStr(0,0,"-20");
    u8g2.drawStr(24,0,"0");
    u8g2.drawStr(48,0,"20");
    u8g2.drawStr(72,0,"40");
     u8g2.drawTriangle(0,64, 10,64, 10,57);
     u8g2.drawBox(12,57,10,64);
     u8g2.drawTriangle(12,57, 22,57, 22,50);
     u8g2.drawBox(24,50,10,64);
     u8g2.drawTriangle(24,50, 34,50, 34,43);
     //u8g2.drawBox(36,0,10,22);
     //u8g2.drawTriangle(36,22, 46,22, 46,28);
     //u8g2.drawBox(48,0,10,29);
     //u8g2.drawTriangle(48,29, 58,29, 58,35);
     //u8g2.drawBox(60,0,10,36);
     //u8g2.drawTriangle(60,36, 70,36, 70,42);
     //u8g2.drawBox(72,0,10,43);
     //u8g2.drawTriangle(72,43, 82,43, 82,49);
     //u8g2.drawBox(84,0,10,50);
     //u8g2.drawTriangle(84,50, 94,50, 94,56);
  } while (u8g2.nextPage());
  delay(500);
}

void YrovenGAZA() {
  u8g2.firstPage();
  do {
    u8g2.setFontDirection(1);
    u8g2.setFont(u8g2_font_osb26_tn);
    u8g2.drawStr(102,0,"23");
    u8g2.setFont(u8g2_font_osb26_tf);
    u8g2.drawStr(102,45,"L");
    //u8g2.drawCircle(120,50,5);
    //u8g2.drawFrame(0,0,100,64);
    //u8g2.drawFrame(1,1,98,62);
    //u8g2.drawBox(4,6,10,52);
    //u8g2.drawBox(15,6,10,52);
    //u8g2.drawBox(26,6,10,52);
    //u8g2.drawBox(37,6,10,52);
    //u8g2.drawBox(48,6,10,52);
    //u8g2.drawBox(59,6,10,52);
    //u8g2.drawBox(70,6,10,52);
    //u8g2.drawBox(81,6,10,52);
    //u8g2.drawBox(92,6,4,52);
    u8g2.setFontDirection(1);
    u8g2.setFont(u8g2_font_luBS08_tf);
    u8g2.drawStr(0,48,"30");
    u8g2.drawStr(24,48,"50");
    u8g2.drawStr(48,48,"70");
    u8g2.drawStr(72,48,"90");
     u8g2.drawTriangle(0,0, 10,0, 10,7);
     u8g2.drawBox(12,0,10,8);
     u8g2.drawTriangle(12,8, 22,8, 22,14);
     u8g2.drawBox(24,0,10,15);
     u8g2.drawTriangle(24,15, 34,15, 34,21);
     u8g2.drawBox(36,0,10,22);
     u8g2.drawTriangle(36,22, 46,22, 46,28);
     u8g2.drawBox(48,0,10,29);
     u8g2.drawTriangle(48,29, 58,29, 58,35);
     u8g2.drawBox(60,0,10,36);
     u8g2.drawTriangle(60,36, 70,36, 70,42);
     u8g2.drawBox(72,0,10,43);
     u8g2.drawTriangle(72,43, 82,43, 82,49);
     u8g2.drawBox(84,0,10,50);
     u8g2.drawTriangle(84,50, 94,50, 94,56);
   } while ( u8g2.nextPage() );
  //delay(1000);
}

 

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

Кто код писал?

Вытащи для начала свой VAZ из loop и запхай его в PROGMEM

sadman41
Offline
Зарегистрирован: 19.10.2016

http://arduino.ru/forum/apparatnye-voprosy/podklyuchenie-displeya-gmg128...

Аналогичная проблема решена.

+ массив с картинкой следует держать в PROGMEM.

AndryGladky
Offline
Зарегистрирован: 09.10.2014

Спасибо. Я и думал что надо картинку держать в отдельной памяти. Но нечего толкового не нашел. Может плохо искал. Пошол читать, с этой функции ещё не знаком буду изучать. Ещё раз большое спасибо.

AndryGladky
Offline
Зарегистрирован: 09.10.2014

И за библиотеку понял, про разное подключение . Буду пробовать.

lilik
Offline
Зарегистрирован: 19.10.2017

AndryGladky пишет:
Спасибо. Я и думал что надо картинку держать в отдельной памяти. Но нечего толкового не нашел. Может плохо искал. Пошол читать, с этой функции ещё не знаком буду изучать. Ещё раз большое спасибо.

Вот моя тема, как раз про ту функцию :-)

http://arduino.ru/forum/proekty/imitatsiya-razlichnykh-shkal-na-displee-...

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

AndryGladky, отвечая исключительно на название темы, а не на то, что в исходном сообщении:

То, о чем Вы говорите, нецелесообразно, т.к. оптимизация в сотни раз дороже, чем взять контроллер помощнее.

Теперь переходим к самому сообщению, и выясняем, что оно не соответствует заголовку: ни о какой оптимизации в сообщении речи не идет.