ARDUINO Помогите оптимизировать код

paiintrok

✩✩✩✩✩✩✩
14 Дек 2025
15
0
Помогите пожалуйста оптимизировать код, а то Arduino IDE уже жалуется что не хватает памяти. В кратце это небольшой бортовой компьютер для моей машины, код ещё немного не дописан. В основе Arduino NANO. Из других компонентов это резисторы, OLED экран на 1,3 дюйма, датчик температуры и влажности DHT22, датчик уровня топлива от ВАЗ 21213 и датчик давления масла от той же машины. На первой странице выводиться оставшийся бензин и напряжение, а на второй температура на улице и давление масла. Используются следующие библиотеки: DHT, GyverButton, SPI, Wire, GyverOLED.
 

Вложения

Старик Похабыч

★★★★★★★
14 Авг 2019
4,348
1,327
Москва
Использование дисплея с буферм отнимает сразу половину всей свободной памяти. Есть варианты в примерах когда буфер не используется. Если нет графики, то только текстовый вариант должен тратить меньше памяти.
 

bort707

★★★★★★✩
21 Сен 2020
3,429
985
хочется уменьшить объём используемой динамической памяти
Там весь код всего 100 строк, тут пока особо нечего оптимизировать, кроме библиотек.
При рассчетах уровня топлива и напряжения откажитесь от Float - выиграете байт 20... а может и больше.
Тем более что флоат в этих рассчетах нафик не нужны

Мы сожалеем...
Если вы рассчитываете на более сушественную помощь, пишите о проблемах более информативно
 

bort707

★★★★★★✩
21 Сен 2020
3,429
985
В таких случаях в первую очередь надо показывать код
 

paiintrok

✩✩✩✩✩✩✩
14 Дек 2025
15
0
@bort707,От них не получится отказаться, без них ардуина виснет и ни на что не реагирует

@bort707, файл с кодом прикреплен
 

bort707

★★★★★★✩
21 Сен 2020
3,429
985
От них не получится отказаться, без них ардуина виснет и ни на что не реагирует
без флоат? значит неправильно отказываетесь
файл с кодом прикреплен
Это который в первом сообщении?
Насколько я понимаю, это старый код, с которым у вас все работало.
А потом вы что-то изменили и экран стал покрываться артефактами
Так что показывайте новый код.
 

paiintrok

✩✩✩✩✩✩✩
14 Дек 2025
15
0
1773085164786.png

изменения идут только в строке инициализации
 

bort707

★★★★★★✩
21 Сен 2020
3,429
985
Что это? Зачем? Что я тут должен увидеть?

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

Вместо того, чтобы четко задать вопрос и предоставить все материалы, вы ждете какого-то сервиса "все включено" - кто-то мало того что проблему решит - он ее сначала за вас найдет и сформулирует.
Это так работает только в платных заказах.
 

paiintrok

✩✩✩✩✩✩✩
14 Дек 2025
15
0
@Старик Похабыч, 1,3 дюйма

По поводу дисплея, я только что вычитал, что он используется только с буфером, по этому при отключении буфера появляются артефакты
 

bort707

★★★★★★✩
21 Сен 2020
3,429
985
я только что вычитал, что он используется только с буфером,
точно не скажу, но скорее всего это не так.
Более вероятно, что без буфера методы работы с дисплеем должны быть другими, то есть код надо переписывать, а не только строчку инициализации менять.
 

paiintrok

✩✩✩✩✩✩✩
14 Дек 2025
15
0
Вот пример из библиотеки которую я использую, в ней и прописано что моя модель дисплея работает только с буфером
 

Вложения

Старик Похабыч

★★★★★★★
14 Авг 2019
4,348
1,327
Москва
@paiintrok,
Именно так. Можно попробовать перевезти на другую библиотеку типа u8g2, там есть страничный буфер, потребуется изменить код. Или взять дисплей 0.96"
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,348
1,327
Москва
Я ж написал название...
Но все же ниже описание библиотеки, там есть примеры с page_buffer и u8x8
Код:
name=U8g2
version=2.35.30
author=oliver <[email protected]>
maintainer=oliver <[email protected]>
sentence=Monochrome LCD, OLED and eInk Library. Display controller: SSD1305, SSD1306, SSD1309, SSD1312, SSD1316, SSD1318, SSD1320, SSD1322, SSD1325, SSD1327, SSD1329, SSD1362, SSD1363, SSD1606, SSD1607, SH1106, SH1107, SH1108, SH1122, T6963, RA8835, LC7981, PCD8544, PCF8812, HX1230, UC1601, UC1604, UC1608, UC1610, UC1611, UC1617, UC1628, UC1638, UC1701, ST7302, ST7511, ST7528, ST7539, ST7565, ST7567, ST7571, ST7586, ST7588, ST75160, ST75161, ST75256, ST75320, NT7534, ST7920, IST3020, IST3088, IST7920, LD7032, KS0108, KS0713, HD44102, T7932, SSD1312, SED1330, SED1520, SBN1661, IL3820, MAX7219, GP1287, GP1247, GP1294, GU800. Interfaces: I2C, SPI, Parallel.
paragraph=Monochrome LCD, OLED and eInk Library. Display controller: SSD1305, SSD1306, SSD1309, SSD1312, SSD1316, SSD1318, SSD1320, SSD1322, SSD1325, SSD1327, SSD1329, SSD1362, SSD1363, SSD1606, SSD1607, SH1106, SH1107, SH1108, SH1122, T6963, RA8835, LC7981, PCD8544, PCF8812, HX1230, UC1601, UC1604, UC1608, UC1610, UC1611, UC1617, UC1628, UC1638, UC1701, ST7302, ST7511, ST7528, ST7539, ST7565, ST7567, ST7571, ST7586, ST7588, ST75160, ST75161, ST75256, ST75320, NT7534, ST7920, IST3020, IST3088, IST7920, LD7032, KS0108, KS0713, HD44102, T7932, SSD1312, SED1330, SED1520, SBN1661, IL3820, MAX7219, GP1287, GP1247, GP1294, GU800. Interfaces: I2C, SPI, Parallel. Features: UTF8, >700 fonts, U8x8 char output.
category=Display
url=https://github.com/olikraus/u8g2
architectures=*
license=BSD-2-Clause
 

bort707

★★★★★★✩
21 Сен 2020
3,429
985
Кстати. несмотря на то, что мы на сайте Гайвера, это не значит что других либ для этого дисплея не существует.
Ищите в Гугле по строке - "ssh1106 arduino"
Этих библиотек не одна и не две, а наверно с полтора десятка.
Вот, например тут обещают работу без буфера:
правда сам я ее не пробовал
 

paiintrok

✩✩✩✩✩✩✩
14 Дек 2025
15
0
@bort707, Я прекрасно понимаю что библиотек огромное количество, но мне было проще всего освоить эту
 

paiintrok

✩✩✩✩✩✩✩
14 Дек 2025
15
0
А в чём разница между SSD1306 и SSH1106? Только в протоколах или в чём то ещё?
 

Proteus

✩✩✩✩✩✩✩
3 Янв 2023
13
1
@paiintrok, команды для инициализации чуть разные. строки в буфере чуть по другому выровняны.. а так ничем, кроме цены

@Старик Похабыч, в этих тупых либах, и код сокращать можно и шрифт довольно неэффективен, его чуть не по битам в памяти сжать можно. Ещё хуже, они часто 8 битовый шрифт, в 16 битах хранят. Уменьшить можно, но сильно попыхтеть придётся

тут от setup loop избавиться можно, перейти на main, пару байт сыкономит.

@bort707, у меня ардуина сама по себе багует, когда программа в память не помешается.. стек там может куда-то наезжать начинает или ещё что-то. Часто это как раз артефакты на экране, не критичные.
 

Proteus

✩✩✩✩✩✩✩
3 Янв 2023
13
1
Хотя, тут по шрифту всё красиво сделали. Буквы русские выкинь из шрифта, они всё равно не эстетичные, пол килобайта сразу сыкономишь