Improve LCD1602 demo animations
This commit is contained in:
parent
6620458e46
commit
8645278350
2 changed files with 102 additions and 13 deletions
|
|
@ -5,8 +5,10 @@ PCF8574/PCF8574A I²C-backpack. Demoen viser:
|
||||||
|
|
||||||
- animeret opstart og blink med baggrundsbelysningen;
|
- animeret opstart og blink med baggrundsbelysningen;
|
||||||
- brugerdefinerede hjerte-, smiley- og rakettegn;
|
- brugerdefinerede hjerte-, smiley- og rakettegn;
|
||||||
- vandret løbetekst;
|
- tekstkort, der skifter på stedet uden vandret scrolling;
|
||||||
- en animeret 16-kanals "BYTE BEATS"-equalizer;
|
- en animeret 16-kanals "BYTE BEATS"-equalizer;
|
||||||
|
- en hoppende pixel, der udnytter displayets 80×16 individuelle pixelpositioner;
|
||||||
|
- animeret digital "PIXEL RAIN" med dynamiske brugerdefinerede tegn;
|
||||||
- oppetid og spinner.
|
- oppetid og spinner.
|
||||||
|
|
||||||
Sketchen bruger kun `Wire`, som følger med Arduino-kernen. Den scanner selv
|
Sketchen bruger kun `Wire`, som følger med Arduino-kernen. Den scanner selv
|
||||||
|
|
|
||||||
|
|
@ -144,22 +144,24 @@ void bootSequence() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void marqueeDemo() {
|
void messageCardsDemo() {
|
||||||
const char message[] = " Arduino UNO R4 WiFi + LCD1602 = AWESOME! ";
|
const char *cards[][2] = {
|
||||||
const int length = sizeof(message) - 1;
|
{" ARDUINO UNO R4", " WIFI POWERED"},
|
||||||
|
{" LCD1602+I2C", " PIXELS AT WORK"},
|
||||||
|
{" CODE. MAKE.", " REPEAT!"}
|
||||||
|
};
|
||||||
|
|
||||||
lcdClear();
|
lcdClear();
|
||||||
lcdSetCursor(0, 0);
|
lcdSetCursor(0, 0);
|
||||||
lcdWrite(0);
|
printPadded(" MAKER MODE");
|
||||||
lcdPrint(" MAKER MODE ");
|
delay(900);
|
||||||
lcdWrite(0);
|
|
||||||
|
|
||||||
for (int offset = 0; offset <= length - LCD_COLUMNS; ++offset) {
|
for (const auto &card : cards) {
|
||||||
|
lcdSetCursor(0, 0);
|
||||||
|
printPadded(card[0]);
|
||||||
lcdSetCursor(0, 1);
|
lcdSetCursor(0, 1);
|
||||||
for (uint8_t column = 0; column < LCD_COLUMNS; ++column) {
|
printPadded(card[1]);
|
||||||
lcdWrite(message[offset + column]);
|
delay(1350);
|
||||||
}
|
|
||||||
delay(145);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -192,6 +194,89 @@ void equalizerDemo() {
|
||||||
lcdCreateChar(2, rocket);
|
lcdCreateChar(2, rocket);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void bouncingPixelDemo() {
|
||||||
|
lcdClear();
|
||||||
|
lcdSetCursor(0, 0);
|
||||||
|
printPadded(" BOUNCING PIXEL");
|
||||||
|
lcdSetCursor(0, 1);
|
||||||
|
printPadded(" 80x16");
|
||||||
|
delay(900);
|
||||||
|
lcdClear();
|
||||||
|
|
||||||
|
int x = 2;
|
||||||
|
int y = 2;
|
||||||
|
int dx = 2;
|
||||||
|
int dy = 1;
|
||||||
|
int previousColumn = -1;
|
||||||
|
int previousRow = -1;
|
||||||
|
|
||||||
|
for (uint8_t frame = 0; frame < 150; ++frame) {
|
||||||
|
if (previousColumn >= 0) {
|
||||||
|
lcdSetCursor(previousColumn, previousRow);
|
||||||
|
lcdWrite(' ');
|
||||||
|
}
|
||||||
|
|
||||||
|
byte pixel[8] = {0, 0, 0, 0, 0, 0, 0, 0};
|
||||||
|
pixel[y % 8] = 1 << (4 - (x % 5));
|
||||||
|
lcdCreateChar(4, pixel);
|
||||||
|
|
||||||
|
int column = x / 5;
|
||||||
|
int row = y / 8;
|
||||||
|
lcdSetCursor(column, row);
|
||||||
|
lcdWrite(4);
|
||||||
|
previousColumn = column;
|
||||||
|
previousRow = row;
|
||||||
|
|
||||||
|
x += dx;
|
||||||
|
y += dy;
|
||||||
|
if (x <= 0 || x >= 79) {
|
||||||
|
x = constrain(x, 0, 79);
|
||||||
|
dx = -dx;
|
||||||
|
}
|
||||||
|
if (y <= 0 || y >= 15) {
|
||||||
|
y = constrain(y, 0, 15);
|
||||||
|
dy = -dy;
|
||||||
|
}
|
||||||
|
delay(35);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void pixelRainDemo() {
|
||||||
|
lcdClear();
|
||||||
|
lcdSetCursor(0, 0);
|
||||||
|
printPadded(" PIXEL RAIN");
|
||||||
|
lcdSetCursor(0, 1);
|
||||||
|
printPadded(" //////\\\\\\");
|
||||||
|
delay(900);
|
||||||
|
|
||||||
|
lcdClear();
|
||||||
|
for (uint8_t row = 0; row < LCD_ROWS; ++row) {
|
||||||
|
lcdSetCursor(0, row);
|
||||||
|
for (uint8_t column = 0; column < LCD_COLUMNS; ++column) {
|
||||||
|
lcdWrite((column + row * 3) % 8);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (uint8_t frame = 0; frame < 55; ++frame) {
|
||||||
|
for (uint8_t slot = 0; slot < 8; ++slot) {
|
||||||
|
byte rain[8] = {0, 0, 0, 0, 0, 0, 0, 0};
|
||||||
|
for (uint8_t pixelColumn = 0; pixelColumn < 5; ++pixelColumn) {
|
||||||
|
uint8_t head = (frame + slot * 3 + pixelColumn * 5) % 13;
|
||||||
|
if (head < 8) rain[head] |= 1 << (4 - pixelColumn);
|
||||||
|
if (head > 0 && head - 1 < 8 && ((slot + pixelColumn) & 1)) {
|
||||||
|
rain[head - 1] |= 1 << (4 - pixelColumn);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
lcdCreateChar(slot, rain);
|
||||||
|
}
|
||||||
|
delay(80);
|
||||||
|
}
|
||||||
|
|
||||||
|
lcdCreateChar(0, heart);
|
||||||
|
lcdCreateChar(1, smile);
|
||||||
|
lcdCreateChar(2, rocket);
|
||||||
|
}
|
||||||
|
|
||||||
void uptimeDemo() {
|
void uptimeDemo() {
|
||||||
lcdClear();
|
lcdClear();
|
||||||
lcdSetCursor(0, 0);
|
lcdSetCursor(0, 0);
|
||||||
|
|
@ -239,7 +324,9 @@ void loop() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
marqueeDemo();
|
messageCardsDemo();
|
||||||
equalizerDemo();
|
equalizerDemo();
|
||||||
|
bouncingPixelDemo();
|
||||||
|
pixelRainDemo();
|
||||||
uptimeDemo();
|
uptimeDemo();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue