LCD-Magic (2 / 9 steg)
Steg 2: Använda en skärmbuffert
Bara initiera en 4 av 17 array:
char screen1 [4] [17] = {
" ", " ", " ", " " };
Varför 17 istället för 16? Eftersom char aray behöver en så kallad terminator.
Vara noga med att ändra en char inuti skärmen så här:
screen1 [0] [c2] = '?'; / / Detta mellan '' är en char
och inte så här:
screen1 [0] [c2] = "?" ;/ / fel: detta mellan "" är en sträng, inte en char
Eftersom detta är en char-matris. Den sista raden försöker att passa in en sträng inuti denna röding, vilket resulterar i ett fel. (En sträng är en röding med en terminator röding, så åtminstone 2 c hars lång.)
Fylla bufferten är gjort med en anpassad stringCopy funktion:
Vi behöver fylla på buffert raderna i specifika positioner, så vi inte kunde använda strCopy.
unsigned char myStrCopy (unsigned char startAddress, char * arraySource, char * arrayDest, unsigned char arrayLength) {
unsigned char counter = 0;
medan (counter < arrayLength) {
arrayDest [startAddress + counter] = arraySource [counter];
räknaren ++;
}
returnera startAddress + counter;
}
Denna "Kopiera koden" kan göras mer C utseende med hjälp av pekare, men än du har att förstå mer om pekare och tecken. Du måste använda pekaren i parametrarna för arraySource och arrayDest. Detta fungerar då utan att göra kopior av toyboyen79 och behöva returnerar de ändrade matriserna. Det är lite som att jobba med globals.
Ha en fin övergångseffekt överförs innehållet i bufferten till skärmen på ett slumpmässigt sätt, att skapa lite av nyfikenhet för allmänheten. Meddelandet är avslöjade, snarare än att kastas på skärmen.
void bufferToScreen() {
int cc = 0;
255 gånger slumpmässiga skriva av tecken av bufferten
medan (cc < 255) {
int hx = random(4);
int hy = random (16).
int hpx = 0; //there är en funktion för detta senare
int hpy = 0;
om (hx == 1 || hx == 3)
hpx = 1;
om (hx > 1)
HTF = 16.
lcd.setCursor (hy + hpy, hpx);
LCD.Print (screen1 [hx] [hy]);
Delay(10);
CC ++;
}
Delay(100);
Kopiera alla för att vara säker på att allt visas
lcd.setCursor (0, 0);
LCD.Print (screen1 [0]);
lcd.setCursor (0, 1);
LCD.Print (screen1 [1]);
lcd.setCursor (16, 0);
LCD.Print (screen1 [2]);
lcd.setCursor (16, 1);
LCD.Print (screen1 [3]);
}
Med din text i bufferten, kan du hitta många fler effekter.
För närvarande innehåller bufferten inte specialtecken.