Arduino text LCD animation (5 / 9 steg)
Steg 5: Flytta tecken över sidan
För att flytta tanken, definierade jag ett pixel-wise x-position för att rita. Eftersom jag hade att göra med tecken som var fem bildpunkter, jag kunde göra en heltalsdivision av tanken x position att räkna ut där jag vill göra varje karaktär.Jag skulle också bara ta en modulo av tankens x position (tankx % 5) att räkna ut hur man flytta bitar runt. Om den modulo var noll, jag skulle Rita tecken och definiera bitarna av tecken. Men om den modulo var icke-noll, det betydde tecken var redan på skärmen, och jag kunde bara omdefiniera bitarna. Jag skulle också göra en inledande blanksteg tomt ut alla tidigare ritningar av anpassade tecken 0 (längst till vänster en) när jag "flytta" tecken.
Så, för att starta, jag skulle initiera tankx ställning till vissa värde som skulle dela renlig av fem.
int tankx = -15;
int tankcharx;
int tankchary = 1;
Sedan, inom funktionen loop(), jag skulle göra uppdelningen och den modulo att räkna ut vad att dra, och hur man drar. (Se upp för hur den modulo av negativa tal fungerar.)
Ett annat sätt att göra detta, i efterhand, skulle vara att göra tankx alltid negativt, och flytta den x teckenpositionen av -3 innan rendering.
Detta är del av den loop() kod som blir de anpassade tecken på skärmen. I en bättre återgivning av den här koden räknade jag ut ritning funktioner till en safeDrawCharAt funktion som gör den position checken. Men här ser du den äldre återgivningen där jag gjorde den ståndpunkten kontrollera inline. Sedan när som helst kunde tecknen vara utanför skärmen, jag var tvungen att göra en position kontroll innan några setCursor() eller anropa samtal.
tankcharx = tankx / BITS_PER_CHAR; Inledande rendering, ingen rotation av slitbanor
om ((tankx % BITS_PER_CHAR) == 0) {
Fullständig SKIFT är på, behöver man drar ett tomt där tanken senast var
om (tankcharx > = 1) {
lcd.setCursor (tankcharx-1, tankchary);
LCD.write(' ');
}
om (tankcharx > = 0 & & tankcharx < = 7) {
lcd.setCursor (tankcharx, tankchary);
LCD.write((byte)0);
}
om (tankcharx + 1 > = 0 & & tankcharx + 1 < = 7) {
lcd.setCursor (tankcharx + 1, tankchary);
LCD.write((byte)1);
}
om (tankcharx + 2 > = 0 & & tankcharx + 2 < = 7) {
lcd.setCursor (tankcharx + 2, tankchary);
LCD.write((byte)2);
}
om (tankcharx + 3 > = 0 & & tankcharx + 3 < = 7) {
lcd.setCursor (tankcharx + 3, tankchary);
LCD.write((byte)3);
}
}