Помогите отимизировать код, не влазит в память.
- Войдите на сайт для отправки комментариев
Здравствуйте форумчане, прошу помощи как уменьшить данный код, просто первый раз работаю с 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);
}
Кто код писал?
Вытащи для начала свой VAZ из loop и запхай его в PROGMEM
http://arduino.ru/forum/apparatnye-voprosy/podklyuchenie-displeya-gmg128...
Аналогичная проблема решена.
+ массив с картинкой следует держать в PROGMEM.
Спасибо. Я и думал что надо картинку держать в отдельной памяти. Но нечего толкового не нашел. Может плохо искал. Пошол читать, с этой функции ещё не знаком буду изучать. Ещё раз большое спасибо.
И за библиотеку понял, про разное подключение . Буду пробовать.
Вот моя тема, как раз про ту функцию :-)
http://arduino.ru/forum/proekty/imitatsiya-razlichnykh-shkal-na-displee-...
AndryGladky, отвечая исключительно на название темы, а не на то, что в исходном сообщении:
То, о чем Вы говорите, нецелесообразно, т.к. оптимизация в сотни раз дороже, чем взять контроллер помощнее.
Теперь переходим к самому сообщению, и выясняем, что оно не соответствует заголовку: ни о какой оптимизации в сообщении речи не идет.