Arduino text LCD animation (7 / 9 steg)
Steg 7: Animera tanken slitbanor
Efter att jag fick den första rörelsen av tanken kommer, gick jag på att göra slitbanor beter sig som jag ville. I det första överlämnandet av koden hade jag en varje-andra pixel miljö för slitbanor--en pixel på en off. Men med några experiment, fann jag att en tre-pixel slitbanan (två på, en off) såg bättre.Ritningen av tanken var tvungen att använda den här konfigurationen för att starta, men riktigt vad det innebar var att jag kunde vända alla pixlarna i slitbanan på först (inom lång int matrisen), och sedan vända bort varje tredje pixel. Beroende på tankx, modulo 3, skulle jag stänga av en annan uppsättning pixlar.
Start kravet, var dock att det totala antalet pixlar i däckmönstret vara en multipel av tre. Annars slog animeringen skip poäng.
Så definierade jag ett separat treadx läge (egentligen inte en x-position, mer som en räknare som skulle slinga 0, 1, 2, 0, 1, 2,...) och utifrån sina värderingar, jag skulle räkna ut som trampa bitar att stänga av. I min ritning, skulle detta endast ske i de understa fyra linjer som motsvarar "y" värdena 4, 5, 6 och 7.
Eftersom bitarna i tank slitbanan var alla på att börja, kunde jag använda C XOR funktionen för att stänga av dem. Jag skulle tillämpa ändringen till den långa ints innan det skulle skiftas till sin 0..4 bitvisa SKIFT position, och det skulle hända, naturligtvis, innan de långa ints var uppdelade i byte.
int treadx = 0; void loop() { Detta avsnitt behandlar slitbanan animeringen
...
för (int y = 0; y < 8; y ++)
{
... göra andra bearbetning av tornet upp här
växel (treadx) {
fall 0:
Växla (y) {
fall 4:
lval ^ = 0x2cb0; bryta;
fall 7:
lval ^ = 0x2490; bryta;
}
bryta;
fall 1:
Växla (y) {
fall 4:
lval ^ = 0x1240; bryta;
lval ^ = 0x36d0; bryta;
fall 5:
lval ^ = 0x0008; bryta;
fall 6:
lval ^ = 0x4000; bryta;
fall 7:
lval ^ = 0x0920; bryta;
}
bryta;
fall 2:
Växla (y) {
fall 4:
lval ^ = 0x0920; bryta;
lval ^ = 0x1b60; bryta;
fall 5:
lval ^ = 0x4000; bryta;
fall 6:
lval ^ = 0x0008; bryta;
fall 7:
lval ^ = 0x1240; bryta;
}
bryta;
}
... göra skifta av longs ints och byte fördelning här
} / / end för varje av de åtta linjerna
... göra lcd.write och lcd.createChar samtal här
++ treadx;
om (treadx == 3) {treadx = 0;}
} / / end loop funktion