LCD-Magic (5 / 9 steg)
Steg 5: Animerade snöflingor
byggstenar i koden:
skapa en matris med 32 byte,
att göra en flaga av 4 byte
rengöring 32 matrisen
att göra en slinga av fallande
att infoga flingan i arrayen 32
bryta upp i denna 32 matris för 4 specialtecken
skriva tecken på skärmen
det verkligen faller ner!
void snow() {
byte snö [32];
byte flake [4] = {
0b01010,
0b11111,
0b11111,
0b01010
};
för (int faller = 0; faller < 32, fallande ++) {//insert flinga, gör det starta vid -4
för (int jag = -4; jag < 36; i ++) //not 0 på grund av lcd.createChar (0,) utfärda
Snow [i] = 0b00000;
för (int j = 0; j < 4; j ++)
om (((falling + j) > -1) & & ((falling + j) < 32))
Snow [fallande + j] = flinga [j];
att göra fyra specialtecken
för (int jag = 1; jag < 5; i ++) //not 0 på grund av lcd.createChar (0,) utfärda
{
byte s1 [8],
för (int j = 0; j < 8; j ++)
S1 [j] = snow [(i-1) * 8 + j];
lcd.createChar (i, s1);
göra snöflingor visas på skärmen
setCursorFor16_4 (i-1, 0);
LCD.write(i);
}
Delay(100);
}
}
Endast den SetCursor funktionen är specifika för denna 16 x 4 LCD: (kan ändras för andra skärmar)
void setCursorFor16_4 (int j, int i) {
om ((j > -1) & &(j<4) & & (i > -1) & &(i<16)) {
int hpx = 0;
int hpy = 0;
om (j == 1 || j == 3)
hpx = 1;
om (j > 1)
HTF = 16.
lcd.setCursor (jag + hpy, hpx);
}
}
Om du vill ha mer flingor, bara kopiera den
med trick av roterande tecken för att få en annan position < br > setCursorFor16_4 (i-1, 0);
LCD.write(i);
setCursorFor16_4 ((i-1 + 4 -3) %4, 3);
LCD.write(i);
setCursorFor16_4 ((i-1 + 4 + 2) %4, 5);
LCD.write(i);
setCursorFor16_4 ((i-1 + 4 + 1) %4, 7);
LCD.write(i);
setCursorFor16_4 ((i-1 + 4 -1) %4, 8);
LCD.write(i);
setCursorFor16_4 ((i-1 + 4 -4) %4, 12);
LCD.write(i);
för andra platser.
Jag använder den modulo vara säker att det kommer att hamna i position 0,1,2,3. Den + 4 är att se till resultatet är positivt.
Flingan infogas från toppen, så för flingor med en annan position, detta skapar ett litet hopp i animeringen.