Skip to content

Commit 9557b69

Browse files
authored
Added GIF example
based on the Sketch from https://www.youtube.com/watch?v=qNVWZY3WbhU Thanks!!
1 parent 39bf20e commit 9557b69

File tree

2 files changed

+1507
-0
lines changed

2 files changed

+1507
-0
lines changed
Lines changed: 141 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,141 @@
1+
// Base sketch from Fil Connesso, https://www.youtube.com/watch?v=qNVWZY3WbhU
2+
// Using AnimatedGIF from @bitbank2
3+
// Thanks!!
4+
5+
#include <AnimatedGIF.h>
6+
#include <Arduino_MKRIoTCarrier.h>
7+
8+
#include "Adafruit_GFX.h"
9+
10+
#include "gifs.h"
11+
12+
MKRIoTCarrier carrier;
13+
14+
// AnimatedGIF library needed, https://github.com/bitbank2/AnimatedGIF
15+
AnimatedGIF gif;
16+
17+
void setup() {
18+
Serial.begin(9600);
19+
while (!Serial);
20+
21+
CARRIER_CASE = false;
22+
23+
carrier.begin();
24+
carrier.display.setRotation(4);
25+
carrier.display.fillScreen(ST77XX_BLACK);
26+
27+
gif.begin(LITTLE_ENDIAN_PIXELS);
28+
29+
carrier.leds.fill(0xFFFFFF, 0, 5);
30+
31+
}
32+
33+
void loop() {
34+
int c = 0;
35+
if (gif.open((uint8_t *)LOGO_Arduino, sizeof(LOGO_Arduino), GIFDraw))
36+
{
37+
38+
while (gif.playFrame(false, NULL))
39+
{
40+
carrier.leds.setBrightness(c );
41+
c++;
42+
carrier.leds.show();
43+
}
44+
c = 0;
45+
carrier.leds.setBrightness(0);
46+
carrier.leds.show();
47+
gif.close();
48+
}
49+
delay(1500);
50+
}
51+
52+
void GIFDraw(GIFDRAW *pDraw)
53+
{
54+
uint8_t *s;
55+
uint16_t *d, *usPalette, usTemp[320];
56+
int x, y, dWidth, vardX, vardY, varY;
57+
int DX = carrier.display.width();
58+
int DY = carrier.display.height();
59+
60+
dWidth = pDraw->iWidth;
61+
vardX = pDraw->iX;
62+
vardY = pDraw->iY;
63+
varY = pDraw->y;
64+
65+
if (dWidth + vardX > dWidth)
66+
dWidth = DX - pDraw->iX;
67+
usPalette = pDraw->pPalette;
68+
y = varY + vardY;
69+
if (y >= DY || vardX >= DX || dWidth < 1)
70+
return;
71+
s = pDraw->pPixels;
72+
if (pDraw->ucDisposalMethod == 2)
73+
{
74+
for (x = 0; x < dWidth; x++)
75+
{
76+
if (s[x] == pDraw->ucTransparent)
77+
s[x] = pDraw->ucBackground;
78+
}
79+
pDraw->ucHasTransparency = 0;
80+
}
81+
if (pDraw->ucHasTransparency)
82+
{
83+
uint8_t *pEnd, c, ucTransparent = pDraw->ucTransparent;
84+
int x, iCount;
85+
pEnd = s + dWidth;
86+
x = 10; //offset
87+
y += 10;
88+
iCount = 0;
89+
while (x < dWidth)
90+
{
91+
c = ucTransparent - 1;
92+
d = usTemp;
93+
while (c != ucTransparent && s < pEnd)
94+
{
95+
c = *s++;
96+
if (c == ucTransparent)
97+
{
98+
s--;
99+
}
100+
else
101+
{
102+
*d++ = usPalette[c];
103+
iCount++;
104+
}
105+
}
106+
if (iCount)
107+
{
108+
carrier.display.startWrite();
109+
carrier.display.setAddrWindow(pDraw->iX + x, y, iCount, 1);
110+
carrier.display.writePixels(usTemp, iCount, true, false);
111+
carrier.display.endWrite();
112+
x += iCount;
113+
iCount = 0;
114+
}
115+
c = ucTransparent;
116+
while (c == ucTransparent && s < pEnd)
117+
{
118+
c = *s++;
119+
if (c == ucTransparent)
120+
iCount++;
121+
else
122+
s--;
123+
}
124+
if (iCount)
125+
{
126+
x += iCount;
127+
iCount = 0;
128+
}
129+
}
130+
}
131+
else
132+
{
133+
s = pDraw->pPixels;
134+
for (x = 0; x < dWidth; x++)
135+
usTemp[x] = usPalette[*s++];
136+
carrier.display.startWrite();
137+
carrier.display.setAddrWindow(pDraw->iX + 50, y, dWidth, 1);
138+
carrier.display.writePixels(usTemp, dWidth, true, false);
139+
carrier.display.endWrite();
140+
}
141+
}

0 commit comments

Comments
 (0)