Stap 2: Gebruik van een schermbuffer
Gewoon initialiseren een array van 4 door 17:
char screen1[4][17] = { " ", " ", " ", " " };
Waarom 17 in plaats van 16? Omdat de char-aray een zogenaamde terminator moet.
Wees voorzichtig om te veranderen van een char binnen het scherm zoals dit:
screen1[0][c2] = '?';//this between ''is a char //and not like this: screen1[0][c2] = "?";//wrong: this between "" is a string, not a char
Want dit een char-matrix is. De laatste lijn probeert te passen een tekenreeks binnen deze char, wat resulteert in een fout. (Een string is een karakter met een terminator char, dus ten minste 2 c hars lang.)
Vullen van de buffer gebeurt met een aangepaste stringCopy functie:
We willen vullen de buffer regels op specifieke posities, zodat we geen gebruik van de strCopy maken konden.
unsigned char myStrCopy( unsigned char startAddress, char *arraySource, char *arrayDest, unsigned char arrayLength){ unsigned char counter = 0; while ( counter < arrayLength){ arrayDest[ startAddress + counter ] = arraySource [ counter ]; counter++; } return startAddress + counter; }
Deze code"kopiëren" meer C op zoek met behulp van verwijzingen kan worden gemaakt, maar dan u hebt om te begrijpen meer over pointers en tekens. U moet u de aanwijzer in de parameters voor de arraySource, en arrayDest. Dit werkt dan zonder het maken van kopieën van de arays en hebben om terug te keren de gewijzigde arrays. Het is een beetje als het werken met globals.
Om een mooie overgangseffect wordt de inhoud van de buffer overgebracht naar het scherm op een willekeurige manier, maken een beetje van nieuwsgierigheid naar het publiek. Het bericht is geopenbaard, in plaats van gegooid op het scherm.
void bufferToScreen(){ int cc = 0; //255 times random writing of the characters of the buffer while ( cc< 255 ){ int hx = random(4); int hy = random (16); int hpx = 0;//there is a function for this later on int hpy = 0; if ( hx == 1 || hx == 3) hpx = 1; if ( hx > 1 ) hpy = 16; lcd.setCursor(hy+hpy, hpx); lcd.print( screen1[hx][hy] ); delay(10); cc++; } delay(100); //copy all to be sure all is shown 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] ); }
Met uw tekst in de buffer, kunt u veel meer effecten verzinnen.
Op dit moment bevat de buffer geen speciale tekens.