Долго не притрагивался к готовой прошивке, все работало успешно, но тут зашел в скетч и обновились библиотеки, далее вылезает ошибка, если указать недостающте аргументы, то плата esp8266 уходит в бесконечный цикл ошибки
Ошибка кода
Ниже прикреплю сам код
Помогите люди добрые)
Дополню:
С мониторинга порта
Ошибка кода
Ошибка:
Documents\Arduino\libraries\OneBitDisplay\src/OneBitDisplay.h:685:5: note: declared here
685 | int obdDumpBuffer(OBDISP *pOBD, uint8_t *pBuffer, int bRefresh, int bWait, int bFast);
| ^~~~~~~~~~~~~
exit status 1
Compilation error: too few arguments to function 'int obdDumpBuffer(OBDISP*, uint8_t*, int, int, int)'
Ниже прикреплю сам код
Код прошивки:
#include <SPI.h>
#include <Wire.h>
#include <BitBang_I2C.h>
#include <OneBitDisplay.h>
#include <AnimatedGIF.h>
#include "animation.h"
//███████████████████████████
//█─▄▄▄─█─▄▄▄▄█─▄─▄─█▄─▀█▄─▄█
//█─███▀█▄▄▄▄─███─████─█▄▀─██
//▀▄▄▄▄▄▀▄▄▄▄▄▀▀▄▄▄▀▀▄▄▄▀▀▄▄▀
OBDISP obd;
AnimatedGIF gif;
static uint8_t ucOLED[4096]; // holds current frame for 128x64 OLED
// M5Atom Matrix ESP32
#define RESET_PIN -1
#define SDA_PIN -1
#define SCL_PIN -1
#define OLED_ADDR -1
#define MY_OLED OLED_128x64
#define USE_HW_I2C 1
#define FLIP180 0
#define INVERT 0
#define DISPLAY_WIDTH 128
#define DISPLAY_HEIGHT 64
//
// Это не обязательно должно быть суперэффективным
//
void DrawPixel(int x, int y, uint8_t ucColor)
{
uint8_t ucMask;
int index;
if (x >= DISPLAY_WIDTH || y >= DISPLAY_HEIGHT)
return;
ucMask = 1 << (y & 7);
index = x + ((y >> 3) << 7);
if (ucColor)
ucOLED[index] |= ucMask;
else
ucOLED[index] &= ~ucMask;
}
// Рисует линию изображения прямо на ЖК-дисплее
void GIFDraw(GIFDRAW* pDraw)
{
uint8_t* s;
int x, y, iWidth;
static uint8_t ucPalette[4096]; // thresholded palette
if (pDraw->y == 0) // first line, convert palette to 0/1
{
for (x = 0; x < 256; x++)
{
uint16_t usColor = pDraw->pPalette[x];
int gray = (usColor & 0xf800) >> 8; // red
gray += ((usColor & 0x7e0) >> 2); // plus green*2
gray += ((usColor & 0x1f) << 3); // plus blue
//ucPalette[x] = (gray >> 9); // 0->511 = 0, 512->1023 = 1
if (gray>800) ucPalette[x]=1; else ucPalette[x]=0;
}
}
y = pDraw->iY + pDraw->y; // current line
iWidth = pDraw->iWidth;
if (iWidth > DISPLAY_WIDTH)
iWidth = DISPLAY_WIDTH;
s = pDraw->pPixels;
if (pDraw->ucDisposalMethod == 2) // restore to background color
{
for (x = 0; x < iWidth; x++)
{
if (s[x] == pDraw->ucTransparent)
s[x] = pDraw->ucBackground;
}
pDraw->ucHasTransparency = 0;
}
// Apply the new pixels to the main image
if (pDraw->ucHasTransparency) // if transparency used
{
uint8_t c, ucTransparent = pDraw->ucTransparent;
int x;
for (x = 0; x < iWidth; x++)
{
c = *s++;
if (c != ucTransparent)
DrawPixel(pDraw->iX + x, y, ucPalette[c]);
}
}
else
{
s = pDraw->pPixels;
// Translate the 8-bit pixels through the RGB565 palette (already byte reversed)
for (x = 0; x < pDraw->iWidth; x++)
DrawPixel(pDraw->iX + x, y, ucPalette[*s++]);
}
if (pDraw->y == pDraw->iHeight - 1) // last line, render it to the display
obdDumpBuffer(&obd, ucOLED);
} /* GIFDraw() */
uint8_t last_animation = 0; // to prevent 2 animation loop after idle. just make it feels , more "random"??
void playWrapper(uint8_t* gifinput, int size)
{
if (gif.open(gifinput, size, GIFDraw))
{
// Serial.printf("Successfully opened GIF; Canvas size = %d x %d\n", gif.getCanvasWidth(), gif.getCanvasHeight());
while (gif.playFrame(true, NULL))
{
}
gif.close();
}
}
struct Anime {
uint8_t* ptr;
int size;
};
#define NUMBEROFANIMATION 47
Anime anime;
int n = NUMBEROFANIMATION;
int r;
int debugRandom = 0; //choose between random or i++ animation (0 = random / 1 = i++)
int counter = 99;
void setup() {
//
//↓ Этот фрагмент кода инициализирует коммуникационные порты и отображаемый дисплей, а также настраивает объект GIF-анимации для работы с изображением на OLED-дисплее
//
Serial.begin(115200);
int rc = obdI2CInit(&obd, MY_OLED, OLED_ADDR, FLIP180, INVERT, USE_HW_I2C, SDA_PIN, SCL_PIN, RESET_PIN, 800000L); // use standard I2C bus at 400Khz
Serial.print(rc);
obdFill(&obd, 0, 1);
gif.begin(LITTLE_ENDIAN_PIXELS);
// obdWriteString(&obd,0,0,0,(char *)"GIF Demo", FONT_NORMAL, 0, 1);
//delay(1000);
if (gif.open((uint8_t*)_intro, sizeof(_intro), GIFDraw)) //***Интро файл под номером intro.h, туда загружаем новый код интро
{
Serial.printf("Successfully opened GIF; Canvas size = %d x %d\n", gif.getCanvasWidth(), gif.getCanvasHeight());
while (gif.playFrame(true, NULL))
{
}
gif.close();
}
}
//
//↓ В представленном коде функция loop() выполняется бесконечно, образуя основной цикл программы. В этом цикле происходят следующие действия:
//
void loop() {
r = random(1, 3) * 8200;
Serial.println(r);
delay(r);
if (debugRandom == 0)
{
//randomSeed(esp_random());
r = random(0, n)+1;
Serial.println(r);
while (r == last_animation) {
delay(10);
//randomSeed(esp_random());
r = random(0, n)+1;
if (r != last_animation)
{
last_animation = r;
break;
}
}
Serial.println(r);
}
else
{
counter++;
if (counter > NUMBEROFANIMATION)
{
counter = 1;
}
r = counter;
}
Serial.println(r);
switch (r)
{
case 1:
playWrapper((uint8_t*)_1, sizeof(_1));
break;
case 2:
playWrapper((uint8_t*)_2, sizeof(_2));
break;
case 3:
playWrapper((uint8_t*)_3, sizeof(_3));
break;
case 4:
playWrapper((uint8_t*)_4, sizeof(_4));
break;
case 5:
playWrapper((uint8_t*)_5, sizeof(_5));
break;
case 6:
playWrapper((uint8_t*)_6, sizeof(_6));
break;
case 7:
playWrapper((uint8_t*)_7, sizeof(_7));
break;
case 8:
playWrapper((uint8_t*)_8, sizeof(_8));
break;
case 9:
playWrapper((uint8_t*)_9, sizeof(_9));
break;
case 10:
playWrapper((uint8_t*)_10, sizeof(_10));
break;
case 11:
playWrapper((uint8_t*)_11, sizeof(_11));
break;
case 12:
playWrapper((uint8_t*)_12, sizeof(_12));
break;
case 13:
playWrapper((uint8_t*)_13, sizeof(_13));
break;
case 14:
playWrapper((uint8_t*)_14, sizeof(_14));
break;
case 15:
playWrapper((uint8_t*)_15, sizeof(_15));
break;
case 16:
playWrapper((uint8_t*)_16, sizeof(_16));
break;
case 17:
playWrapper((uint8_t*)_17, sizeof(_17));
break;
case 18:
playWrapper((uint8_t*)_18, sizeof(_18));
break;
case 19:
playWrapper((uint8_t*)_19, sizeof(_19));
break;
case 20:
playWrapper((uint8_t*)_20, sizeof(_20));
break;
case 21:
playWrapper((uint8_t*)_21, sizeof(_21));
break;
case 23:
playWrapper((uint8_t*)_23, sizeof(_23));
break;
case 24:
playWrapper((uint8_t*)_24, sizeof(_24));
break;
case 25:
playWrapper((uint8_t*)_25, sizeof(_25));
break;
case 26:
playWrapper((uint8_t*)_26, sizeof(_26));
break;
case 27:
playWrapper((uint8_t*)_27, sizeof(_27));
break;
case 28:
playWrapper((uint8_t*)_28, sizeof(_28));
break;
case 30:
playWrapper((uint8_t*)_30, sizeof(_30));
break;
case 31:
playWrapper((uint8_t*)_31, sizeof(_31));
break;
case 33:
playWrapper((uint8_t*)_33, sizeof(_33));
break;
case 34:
playWrapper((uint8_t*)_34, sizeof(_34));
break;
case 35:
playWrapper((uint8_t*)_35, sizeof(_35));
break;
case 36:
playWrapper((uint8_t*)_36, sizeof(_36));
break;
case 37:
playWrapper((uint8_t*)_37, sizeof(_37));
break;
case 38:
playWrapper((uint8_t*)_38, sizeof(_38));
break;
case 39:
playWrapper((uint8_t*)_39, sizeof(_39));
break;
case 40:
playWrapper((uint8_t*)_40, sizeof(_40));
break;
case 41:
playWrapper((uint8_t*)_41, sizeof(_41));
break;
case 42:
playWrapper((uint8_t*)_42, sizeof(_42));
break;
case 43:
playWrapper((uint8_t*)_43, sizeof(_43));
break;
case 44:
playWrapper((uint8_t*)_44, sizeof(_44));
break;
case 45:
playWrapper((uint8_t*)_45, sizeof(_45));
break;
case 46:
playWrapper((uint8_t*)_46, sizeof(_46));
break;
case 47:
playWrapper((uint8_t*)_47, sizeof(_47));
break;
}
}
Помогите люди добрые)
Дополню:
С мониторинга порта
мониторинг порта:
3fffffb0: 3fffdad0 00000000 3fff6758 40206420
3fffffc0: feefeffe feefeffe 3fffdab0 4010104d
<<<stack<<<
--------------- CUT HERE FOR EXCEPTION DECODER ---------------
ets Jan 8 2013,rst cause:2, boot mode:(3,6)
load 0x4010f000, len 3424, room 16
tail 0
chksum 0x2e
load 0x3fff20b8, len 40, room 8
tail 0
chksum 0x2b
csum 0x2b
v001071d0
~ld
����n�{��g|�l�d`#��|{�l�g��n�d`��r�l�d� �-1
--------------- CUT HERE FOR EXCEPTION DECODER ---------------
Exception (3):
epc1=0x4000e140 epc2=0x00000000 epc3=0x00000000 excvaddr=0x4023dfb9 depc=0x00000000
[QUOTE]>>stack>>>[/QUOTE]
ctx: cont
sp: 3ffffdf0 end: 3fffffd0 offset: 0150
3fffff40: 3fff7500 3fff05d4 00000000 402048c0
3fffff50: 00000009 3fff0618 00000001 3fff6784
3fffff60: 00000000 00000001 3fff6700 0000000a
3fffff70: 3fff6700 00000001 00000001 3fff6784
3fffff80: 3fffdad0 00000000 3fff05d4 40204df8
Изменено: