Stap 2: Hoe het werkt
In deze demo weergegeven we deze tekenreeks:
. . Tekst schuiven met Adafruit TFT schild... (47 karakters?)
De tekst wordt weergegeven in de lichtkrant mode, in grote letters, met 18 tekens op het scherm scrollen.
U kunt de tekst vervangen door uw eigen bericht dat u wilt om te scrollen over het scherm.
De werking van de schets
-het merendeel van de werkzaamheden bij het monteren van de snaren van tekens dat wordt weergegeven in deze regel wordt gedaan:
{
t += text.charAt ((offset + i) % text.length());
}
Als je die lijn begrijpt, hoeft u niet enige verdere uitleg; stoppen met lezen.
-voort
U moet begrijpen hoe deze routine werkt voor iedereen anders, of het zal niet interessant, dus blijven lezen.
In deze uitleg zullen we een eenvoudiger voorbeeld, met een kortere tekst gebruikt.
String tekst = "Hello" (dat is 5 tekens).
En we zullen een kortere lichtkrant weergavebreedte bepalen.
Const int breedte = 10;
Ons doel is om deze tekenreeksen opeenvolgend worden weergegeven in het venster Eigenschappen voor beeldscherm:
HelloHello
elloHelloH
lloHelloHe
enz.
Om bij te houden waar we elke opeenvolgende tekstreeks beginnen we de variabele 'offset' gebruiken.
offset wordt verhoogd in de volgende regel om het beginpunt van de weergegeven tekenreeks.
voor (int offset = 0; offset < text.length(); offset ++)
in het volgende voorbeeld:
HelloHello offset == 0
elloHelloH offset == 1
lloHelloHe offset == 2
en zo verder totdat offset gelijk aan 5 is
Zoals hierboven vermeld, offset houdt spoor van het beginpunt van de tekenreeks.
We gebruiken een lus met de teller string i bij het monteren van de rest van de tekst telkens wordt de tekst weergegeven.
for (int i = 0; ik < breedte; i ++)
breedte is 10. Door het doorlopen van deze lus zullen 10 maal wij assembleren een tekenreeks die gelijk is aan de breedte van het marquee-weergavevenster, die 10 tekens is. We doen dit alles vóór het afdrukken de tekst naar het scherm.
Volgende halte is de regel dat bovengenoemde assembleert de tekenreeks één teken tegelijk als wij stapsgewijs door de i lus:
t += text.charAt ((offset + i) % text.length());
De eerste keer via deze lus t houdt de tekenreeks H. De tweede keer hij- en enzovoort, voor de 10 herhalingen van de lus, op welk punt t HelloHello houdt.
Wanneer de lus is voltooid, wordt de tekenreeks naar het scherm afgedrukt in de schets.
TFT.Print(t);
Op de eerste iteratie-offset == 0 en ik == 0. Text.length() == 5, dat is de lengte van onze string.
Dit geeft het resultaat t += text.charAt(0 % 5);
0% 5 gebruik de modulo operator %
Restbepaling bij deling is de rest wanneer twee gehele getallen zijn verdeeld.
0 gedeeld door 5 produceert rest 0.
Dus het resultaat van 0% 5 (vervangen door 0 mod 5) 0
En text.charAt(0) is het eerste teken van de tekenreeks: H.
De tweede keer door deze lus wordt ik verhoogd naar 1.
Het resultaat van 1% 5 (of 1 mod 5) is 1.
Dit voegt het tweede teken, e, aan de tekenreeks t. t nu is hij
Na 10 iteraties houdt t de tekens HelloHello.
Vervolgens drukken we t
TFT.Print(t);
En dan de offset variabele wordt verhoogd, gaan we via de i nieuwe lus starten, en wij assembleren de tekenreeks elloHelloH. De weergave wordt geschoven!