4.2 Automatsko pomicanje teksta
U primjeru 4.1 obje poruke bile su odabrane tako da ulaze: po dvanaest znakova, ugodno unutar šesnaest koliko ekran može prikazati. Ovaj primjer to pravilo namjerno lomi. Poruka je dugačka dvadeset i tri znaka, što je sedam više nego što ima mjesta, i umjesto da je skratimo, pomicat ćemo je po jedan znak, iznova i iznova, tako da cijela rečenica prođe pred čitateljem kao na ploči s odlascima.
Sklop se u odnosu na 4.1 ne mijenja uopće. Mijenja se to što ekran radi s porukom koja je za njega predugačka.
U ovoj dokumentaciji naučit ćeš:
- Zašto poruka dulja od 16 znakova nije izgubljena, iako je ne možeš svu vidjeti.
- Da je svaki red ekrana u stvari buffer od 40 znakova s malim prozorom na njega.
- Kako
lcd.scrollDisplayLeft()pomiče taj prozor umjesto da pomiče tekst. - Kako postaviti brzinu pomicanja pomoću
delay(), i zašto cijela petlja traje oko 12 sekundi. - Zašto ekran svaki krug nakratko ostane prazan, i zašto to nije greška.
- Zašto poruci koja se pomiče treba
loop(), kada je 4.1 sve odradio usetup().
Potreban hardver:
- 1x Soldered NULA MINI pločica
- 1x Breadboard
- 1x 16x2 LCD ekran s I2C adapterom
- 1x Qwiic kabel
- 1x USB-C kabel
Spajanje komponenti
Ako ti je pločica još spojena od primjera 4.1, već je ispravna, pa preskoči pravo na kod. Inače su četiri koraka ispod ista ona koja si tamo prošao.
1. Umetni NULA MINI pločicu na breadboard
Utisni pločicu u jedan kraj breadboarda tako da njezina dva reda pinova sjednu s obje strane središnjeg kanala, s čipom okrenutim prema dolje.

2. Utisni Qwiic kabel u pločicu
NULA MINI ima jedan Qwiic konektor, na rubu pločice između tipki USER i RST. To je bijeli konektor označen s qwiic na silkscreenu. Utisni kabel dok ne klikne.

- i +. To je konektor za bateriju, i Qwiic kabel u njega ne ulazi.3. Utisni drugi kraj u ekran
Okreni ekran i utisni slobodni kraj kabela u bilo koji od dva Qwiic konektora na ljubičastoj I2C LCD ADAPTER pločici. Spojeni su međusobno, pa nije važno koji koristiš.

4. Utisni USB-C kabel
Spoji pločicu na računalo. Ljubičasto PWR svjetlo se upali i pozadinsko svjetlo ekrana zasvijetli plavo, a na ekranu još nema ništa.

Instalacija biblioteke
Ovaj primjer koristi istu biblioteku Soldered LCD kao 4.1, pa ako je taj primjer radio, već je imaš. Ako nemaš, otvori Tools → Manage Libraries, potraži Soldered LCD i instaliraj onu koju objavljuje Soldered Electronics. Potpunije upute su na stranici Postavljanje Arduino okruženja.
fatal error: LCD-SOLDERED.h: No such file or directory znači da imaš pogrešnu od te dvije.Gdje živi ostatak poruke
Primjer 4.1 rekao je da se poruka dulja od šesnaest znakova odsijeca na rubu ekrana. Tako to izgleda, ali nije baš to ono što se događa, a ta razlika je cijela svrha ovog primjera.
Za svakim redom ekrana u pozadini stoji buffer od 40 znakova unutar kontrolerskog čipa ekrana. Ispis piše u taj buffer. Staklo prikazuje prozor od 16 znakova na njega, a sve izvan prozora je i dalje tamo: spremljeno, zapamćeno, samo nije prikazano.
Naša poruka dugačka je dvadeset i tri znaka, pa u buffer ulazi s mjestom naviše:
pozicija: 0123456789012345678901234567890123456789
buffer: Hello from NULA MINI!
prikazano:^^^^^^^^^^^^^^^^
Šesnaest oznaka ^ je prozor. Kada skica ispiše poruku, pozicije 0 do 15 su ono što vidiš, Hello from NULA, a MINI! sjedi na pozicijama 16 do 21, ispisan i na čekanju.
lcd.scrollDisplayLeft() ne pomiče tekst. Pomiče taj prozor jednu poziciju duž buffera, zbog čega se čini da tekst klizi u drugu stranu. Pozivaj ga ponovljeno i prozor prošeta dužinom buffera, dovodeći skrivene znakove u vidno polje stupac po stupac.
Budući da je buffer dugačak 40 pozicija, prozoru treba 40 pomaka da se vrati odakle je počeo, a nakon svakog pomaka slijedi delay(scrollDelay). To postavlja dužinu jednog kruga:
40 pomaka x 300 ms = 12000 ms = 12 sekundi po krugu
Promijeni scrollDelay i računanje slijedi: na 100 krug traje oko četiri sekunde i tekst se kreće žustro, na 600 traje dvadeset i četiri i čita se ugodnije.
setup().Poruka ima razmak na svakom kraju
Pogledaj pobliže poruku u kodu i vidjet ćeš da počinje i završava razmakom:
String message = " Hello from NULA MINI! ";
Nijedan nije tipfeler. Prozor na kraju obiđe s kraja buffera od 40 znakova natrag na početak, pa se kraj poruke sretne s vlastitim početkom. Bez tih dvaju razmaka dobio bi MINI!Hello stisnuto zajedno na jedan krug u svakoj rotaciji.
Jednom po krugu ekran ostane prazan
Postoji još jedna posljedica tih brojeva, i vrijedi je znati prije nego pokreneš skicu. Poruka zauzima 23 od 40 pozicija buffera, što ostavlja 17 praznih, a prozor od 16 znakova ulazi u prazninu od 17 znakova s jednom pozicijom naviše. Zato prozor kroz dva ili tri koraka svakog kruga gleda u ništa i ekran je stvarno, ispravno prazan.
CONTRAST trimer. Vidi Ako je pozadinsko svjetlo upaljeno a ekran prazan u prethodnom primjeru.Ovaj put se sve ponavlja
U 4.1 svaka uputa sjedila je u setup() a loop() je ostao prazan, jer ekran svoju posljednju poruku drži sam i nije se imalo što ponavljati.
Ovdje se to prevrće. Poruka se i dalje ispisuje jednom u setup(), jer se ponovljenim ispisom ne bi postiglo ništa. Ali kretanje se mora pobuđivati, pa loop() unedogled radi dvije stvari: pomakne prozor jednu poziciju, pa čeka. To sparivanje radnje i delay() je ono što statičan ekran pretvara u animiran.
Kod
/**
**************************************************
*
* @file 4.2_Auto_Scroll_Text.ino
* @brief Primjer koji pokazuje kako automatski pomicati tekst na 16x2 LCD-u.
* LCD-om se upravlja pomoću Soldered LCD biblioteke.
* Ovaj primjer pokazuje kako koristiti lcd.scrollDisplayLeft() i lcd.scrollDisplayRight()
* za glatko pomicanje teksta preko ekrana.
* Za detalje, shemu spajanja i više, pogledaj dokumentaciju primjera na: <link placeholder>
* @author Soldered
***************************************************
*/
#include "LCD-SOLDERED.h" // Uključi Soldered LCD biblioteku
/*
Stvori LCD objekt sa 16 stupaca i 2 reda.
Ti parametri odgovaraju veličini tvog ekrana.
*/
LCD lcd(16, 2);
/*
Stvori poruku koja će se pomicati preko ekrana.
*/
String message = " Hello from NULA MINI! ";
/*
Brzina pomicanja u milisekundama. Veći broj = sporije pomicanje.
*/
const int scrollDelay = 300;
void setup() {
/*
Inicijaliziraj LCD i upali pozadinsko svjetlo.
*/
lcd.begin();
lcd.backlight();
/*
Ispiši poruku jednom. Isprva će se prikazati samo vidljivi dio.
*/
lcd.print(message);
}
void loop() {
/*
Pomakni tekst jednu poziciju lijevo, stvarajući učinak kretanja.
*/
lcd.scrollDisplayLeft();
/*
Počekaj kratko prije sljedećeg pomaka da upravljaš brzinom pomicanja.
*/
delay(scrollDelay);
}
lcd.clear(), i ne treba: lcd.begin() već briše ekran i vraća kursor na početak kao dio svojeg postavljanja. Zato se i lcd.print() može pozvati bez prethodnog setCursor(): kursor je već na poziciji 0.Što bi trebao vidjeti
Prenesi skicu. Poruka se pojavi i odmah počne kliziti preko gornjeg reda, po jedan znak svakih 300 milisekundi, i nikada ne prestaje:
Cijeli primjer
Pogledaj cijeli kod primjera na linku ispod:
4.2_Auto_Scroll_Text.ino
Primjer koji poruku dulju od ekrana pomiče preko Qwiic 16x2 LCD-a pomoću lcd.scrollDisplayLeft().