Arduino text LCD animation (6 / 9 steg)
Steg 6: Skiftande tank bitar
Med tecken nu på skärmen, kan du ändra deras bitar. I slutändan måste du anropa funktionen createChar (index, byteArray) för att få bitarna att LCD-skärmen, och det innebär att du måste ha en åtta byte array per tecken. Jag använder fyra anpassade tecken, så jag använde fyra byte matriser.byte sprite0 [8],
byte sprite1 [8],
byte sprite2 [8],
byte sprite3 [8],
Inom loop() tog jag bitvis modulo position att komma med en offset. Sedan gick jag en rad i taget genom tanken. Här, kommer den långa ints effektivitet in. Jag skulle först kopiera den långa int från statiska tanken ritning till en lokal variabel. Sedan skulle jag flytta den hela långa int tillbaka av antalet bitar jag behöver.
int shiftbits = (tankx % BITS_PER_CHAR); om (shiftbits < 0) {shiftbits += BITS_PER_CHAR;}
för (int y = 0; y < 8; y ++)
{
lång lval = tankImg [y];
...
lång lshifted = lval << (BITS_PER_CHAR-shiftbits);
sprite0 [y] = (byte) ((lshifted >> (3 * BITS_PER_CHAR)) & B011111);
sprite1 [y] = (byte) ((lshifted >> (2 * BITS_PER_CHAR)) & B011111);
sprite2 [y] = (byte) ((lshifted >> (1 * BITS_PER_CHAR)) & B011111);
sprite3 [y] = (byte) ((lshifted >> (0 * BITS_PER_CHAR)) & B011111);
}
Slutligen, när alla byte matriser hade beräknats, jag skulle driva dem över till LCD-skärmen.
lcd.createChar (0, sprite0);
lcd.createChar (1, sprite1);
lcd.createChar (2, sprite2).
lcd.createChar (3, sprite3).
Om du computing detta genom att flytta byte, skulle du behöva se till att du skulle "bära" sista biten till den nästa byten horisontellt, men eftersom jag bor i 32-bitars lång int med varje runda, processorn gör det lite för mig.
I slutet av slingan, jag flytta tanken och sedan slinga runt till början efter tanken fick utanför skärmen.
++ tankx;
om (tankx > = 50) {tankx = -15;}
...
Delay(100);
Slutligen, du se förseningen. Det är viktigt att använda en fördröjning som är lämplig för din LCD. Min hobby LCD är blå med vit belysning och det bleknar ganska långsamt, så en kort fördröjning skulle sluta med en hel del suddighet.