Skip to main content

4.1 Ispis poruke

Svaki primjer do sada javljao se natrag preko Serial Monitora, što znači da pločica ima nešto reći samo dok je privezana na računalo. Ovaj to mijenja: 16x2 LCD iz kita daje pločici vlastiti ekran, a poruka ispisana tamo ostaje na njemu bez obzira gleda li računalo ili ne.

Spajanje je najlakše u cijelom kitu. LCD je Qwiic modul, pa jedan kabel obavlja sve.

U ovoj dokumentaciji naučit ćeš:

  • Kako spojiti 16x2 LCD jednim Qwiic kabelom.
  • Za što služi ljubičasti I2C LCD adapter na pozadini ekrana.
  • Kako inicijalizirati ekran i upaliti njegovo pozadinsko svjetlo.
  • Kako staviti tekst gdje želiš pomoću setCursor(), i zašto je brojanje od nule važno.
  • Zašto u jedan red ulazi samo 16 znakova, i što se dogodi sa sedamnaestim.
  • Što učiniti kada ekran svijetli ali ostaje prazan, jedina greška koja uhvati svakoga.

Potreban hardver:

  • 1x Soldered NULA MINI pločica
  • 1x Breadboard
  • 1x 16x2 LCD ekran s I2C adapterom
  • 1x Qwiic kabel
  • 1x USB-C kabel
ℹ️
Nema otpornika ni jumper žica. Kao u primjeru 3.1, ovo je Qwiic modul, pa jedan kabel nosi napajanje i podatke zajedno i ulazi samo na jedan način. Breadboard je tu samo da drži pločicu stabilno.

Spajanje komponenti

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.

NULA MINI pločica postavljena na breadboard
Korak 1: pločica postavljena na breadboard

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.

Qwiic kabel utisnut u NULA MINI pločicu, s drugim krajem još slobodnim
Korak 2: kabel u Qwiic konektoru pločice, drugi kraj još slobodan
⚠️
Ne pomiješaj ga s manjim konektorom s dva kontakta na suprotnom rubu pločice, označenim s - i +. To je konektor za bateriju, i Qwiic kabel u njega ne ulazi.

Ako želiš vidjeti točno o kojem se konektoru radi na goloj pločici, ovdje je istaknut:

NULA MINI pločica s istaknutim Qwiic konektorom
Qwiic konektor na NULA MINI, istaknut plavim

3. Utisni drugi kraj u ekran

Okreni ekran i naći ćeš ljubičastu pločicu pričvršćenu na njegovu pozadinu, sa silkscreenom I2C LCD ADAPTER. Ona nosi dva Qwiic konektora, po jedan na svakom kraju. Utisni slobodni kraj kabela u bilo koji od njih. Spojeni su međusobno, a rezervni postoji da možeš dalje nalančati još jedan modul.

Ekran okrenut da se vidi njegova ljubičasta adapterska pločica, s Qwiic kabelom koji ide s nje na NULA MINI na breadboardu
Korak 3: ekran okrenut, kabel u jednom od dva Qwiic konektora adaptera
ℹ️
Duž ruba adaptera možeš vidjeti i rupice označene s SCL, SDA, 5V i GND. To je ista veza izvedena na pinove za lemljenje, za pločice koje nemaju Qwiic utičnicu. Ovdje ti ne treba. Kabel obavlja isti posao.

4. Utisni USB-C kabel

Spoji pločicu na računalo. Ljubičasto PWR svjetlo se upali i pozadinsko svjetlo ekrana zasvijetli plavo, ali sam ekran ostaje prazan, jer još ništa nisi prenio na pločicu.

Gotov sklop sa spojenim USB-C: pozadinsko svjetlo ekrana svijetli plavo ali ekran ne prikazuje znakove
Korak 4: napojeno, prije prijenosa. Pozadinsko svjetlo upaljeno, ekran još prazan
ℹ️
Ovo vrijedi dobro pogledati, jer točno tako izgleda i greška. Upaljeno pozadinsko svjetlo znači samo da ekran ima napajanje. Ne govori ništa o tome razgovara li pločica s njim. Trenutno je ekran prazan iz običnog razloga što skice nema. Ako i dalje izgleda ovako nakon prijenosa, vidi Ako je pozadinsko svjetlo upaljeno a ekran prazan ispod.

Za što služi adapterska pločica

Pogledaj pobliže zelenu pločicu ekrana i izbrojat ćeš 16 pinova duž njezinog gornjeg ruba, označenih s VSS, VDD, V0, RS, RW, E, D0 do D7, A i K. To je izvorno sučelje HD44780, kontrolerskog čipa koji pogoni ekrane poput ovog od 1980-ih. Spajanje direktno na njega znači četrnaest ili tako nešto spojeva, i cijeli bi ovaj primjer prošao u utiskivanju jumper žica u breadboard.

Ljubičasta adapterska pločica taj posao odrađuje za tebe. Ona trajno sjedi na tih 16 pinova i s tvojom pločicom razgovara preko samo dvije žice.

Ljubičasta I2C LCD adapterska pločica montirana na pozadini ekrana, s vidljivim silkscreen oznakama
I2C LCD adapter: 16 pinova ekrana s jedne strane, dva Qwiic konektora i I2C adresa s druge

Te dvije žice su I2C sabirnica, ista koju je ultrazvučni senzor koristio u primjeru 3.1: SDA nosi podatke a SCL daje takt koji drži oba kraja u koraku. Nekoliko modula može dijeliti jedan par žica, svaki odgovarajući na svoju adresu, i zato ova pločica ima ispisano I2C ADDR 0X20. 0x20 je broj na koji ovaj ekran odgovara.

ℹ️
Ta adresa je razlog zašto LCD lcd(16, 2); ne treba brojeve pinova, točno kao što ih ni Ultrasonic_Sensor hc; nije trebao u 3.1. Na NULA MINI su I2C linije trajno spojene na IO6 i IO7 i nisu čak ni izvedene na headere, pa nema se što birati. Biblioteka već zna adresu, pa ni begin() ne prima argumente.

Možeš primijetiti i tri mala kontakta označena s A0, A1 i A2 blizu SOLDERED logotipa. Njihovo premoštavanje lemom mijenja adresu, do 0x27. To bi radio samo ako bi želio staviti dva takva ekrana na jedan kabel. Ostavi ih na miru.


Instalacija biblioteke

Ovom primjeru treba biblioteka Soldered LCD. Ako si prošao Postavljanje Arduino okruženja, već je imaš. Ako nisi, otvori Tools → Manage Libraries, potraži Soldered LCD i instaliraj onu koju objavljuje Soldered Electronics.

⚠️
Pazi na sličnu. Library Manager navodi i biblioteku imena 16x2 LCD Library. Ona pobuđuje isti ekran ali koristi drugačije ime headera i drugačiji konstruktor, pa se kod ispod s njom neće prevesti. Ako IDE prijavi fatal error: LCD-SOLDERED.h: No such file or directory, instalirao si pogrešnu od te dvije.

Redovi, stupci i brojanje od nule

Ekran je rešetka: 16 znakova u širinu, 2 reda u visinu. lcd.setCursor(column, row) odabire gdje će sljedeća stvar koju ispišeš sletjeti, a oba broja počinju od nule:

  • lcd.setCursor(0, 0) je prvi znak gornjeg reda.
  • lcd.setCursor(0, 1) je prvi znak donjeg reda.

Dakle, redovi su numerirani 0 i 1, a ne 1 i 2, a stupci idu od 0 do 15. Traženje reda 2 na ekranu s dva reda ne daje ti ništa, umjesto greške, a to je zbunjujući način da izgubiš deset minuta.

Ograničenje od 16 znakova vrijedi uzeti ozbiljno, jer ekran ne prelazi u novi red. Ispiši string od devetnaest znakova i dobit ćeš prvih šesnaest znakova i ništa drugo. Ostatak se jednostavno odbacuje, bez upozorenja. Obje poruke u ovom primjeru dugačke su dvanaest znakova, pa obje ugodno ulaze:

stupac: 0123456789012345
red 0: Hello, NULA!
red 1: Let's start!
ℹ️
Prebroji svoje poruke prije ispisa. Ako je string predugačak, obično rješenje je skratiti tekst, a ne razdvojiti ga na dva reda, jer drugi red normalno nosi nešto drugo.

Sve se događa jednom

Još jedna stvar koju treba primijetiti prije koda: svaka uputa u ovom primjeru sjedi unutar setup(), a loop() je potpuno prazan.

To je namjerno. setup() se izvršava jednom kada se pločica pokrene, a loop() se zatim izvršava unedogled, ali ovdje nema ničega što treba ponavljati. LCD drži ono što mu je posljednje rečeno prikazati, a da ga se ne podsjeća, pa je ispis poruke jednom dovoljan. Ostaje na ekranu dok ne prekineš napajanje ili pritisneš RST, što ponovno pokreće skicu i ponovno je ispisuje.


Kod

/**
**************************************************
*
* @file 4.1_Print_Message.ino
* @brief Primjer koji pokazuje kako prikazati poruku na LCD ekranu.
* LCD-om se upravlja pomoću Soldered LCD biblioteke.
* Ovaj primjer pokazuje osnove inicijalizacije ekrana i ispisa teksta.
* 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 brojevi odgovaraju širini i visini ekrana.
*/
LCD lcd(16, 2);

void setup() {
/*
Inicijaliziraj LCD ekran i upali pozadinsko svjetlo (ako ga tvoj modul podržava).
*/
lcd.begin();
lcd.backlight();

/*
Očisti ekran da osiguramo čist početak.
*/
lcd.clear();

/*
Postavi kursor na prvi stupac prvog reda.
Zatim ispiši jednostavnu poruku na LCD ekran.
*/
lcd.setCursor(0, 0);
lcd.print("Hello, NULA!");

/*
Prijeđi u drugu liniju i ispiši još jednu poruku. Imaj na umu da u ovaj ekran ulazi točno 16 znakova po redu,
pa se sve dulje jednostavno odsijeca na rubu. Prebroji znakove svojih poruka prije ispisa.
*/
lcd.setCursor(0, 1);
lcd.print("Let's start!");
}

void loop() {
/*
U ovom primjeru ništa se ne mora izvršavati iznova.
Poruka ostaje vidljiva dok se pločica ne resetira ili ne ugasi.
*/
}
ℹ️
lcd.clear() briše sve što je ostalo od prethodne skice. Bez njega možeš na kraju čitati mješavinu stare i nove poruke, jer je ono što je bilo na ekranu tamo ostalo kroz cijeli prijenos.

Što bi trebao vidjeti

Prenesi skicu. U roku od sekunde nakon što se pločica ponovno pokrene pojavljuju se obje linije, isti sklop kao na fotografiji iznad, sada s nečim na ekranu:

Gotov sklop s 16x2 LCD-om koji prikazuje Hello, NULA! u gornjem redu i Let's start! u donjem redu
`Hello, NULA!` u redu 0 i `Let's start!` u redu 1, svaka počinje od stupca 0

Ovaj put nema ispisa u Serial Monitoru. Skica nikada ne poziva Serial.begin(), jer ekran je izlaz. Pritisni RST i dvije linije bljesnu i vrate se dok se skica izvršava ponovno.

Ako je pozadinsko svjetlo upaljeno a ekran prazan

To je najčešći problem s ovim ekranima, i nije greška u tvom kodu.

Znakovi se ispravno šalju, ali je kontrast ekrana postavljen tako nisko da su nevidljivi na pozadinskom svjetlu. Rješenje je mali trimer potenciometar na adapterskoj pločici, označen s CONTRAST:

I2C LCD adapterska pločica s istaknutim CONTRAST trimer potenciometrom
CONTRAST trimer na adapterskoj pločici, istaknut plavim

Kada je pločica napojena i skica pokrenuta, malim ravnim odvijačem polako okreni taj trimer kroz cijeli njegov opseg. Na jednom kraju dobiješ prazan plavi ekran; na drugom, red punih tamnih blokova. Tvoj tekst je negdje između. Zastani gdje znakovi izgledaju oštro. To moraš napraviti samo jednom.

ℹ️
Ništa u biblioteci ne dira kontrast. Postavlja ga isključivo taj trimer, i zato nikakva količina mijenjanja koda neće vratiti tekst. Ako ti je ekran prazan, posegni za odvijačem, a ne za tipkovnicom.
⚠️
Ako trimer ne radi ništa kroz cijeli svoj opseg, problem je u komunikaciji a ne u kontrastu. Provjeri piše li u Tools → Board Soldered NULA Mini ESP32C6. Biblioteka traži zadane I2C pinove pločice, a drugačiji odabir pločice šalje podatke na pogrešne pinove a pritom se savršeno veselo prevodi i prenosi. Nakon toga ponovno utisni oba kraja Qwiic kabela dok svaki ne klikne.

Probaj sam: promijeni jednu od poruka u nešto dulje od šesnaest znakova i prenesi ponovno. Vidjet ćeš je odsječenu točno na šesnaestom znaku, a to je brži način da se nauči ograničenje nego brojanje.


Cijeli primjer

Pogledaj cijeli kod primjera na linku ispod:

4.1_Print_Message.ino

Primjer koji inicijalizira Qwiic 16x2 LCD i ispisuje statičnu poruku u dva reda pomoću Soldered LCD biblioteke.