Cum să controlezi afișajul nokia 5110

Mai devreme în acest blog, au fost abordate mai multe afișaje/indicatoare LCD și utilizarea lor de la Arduino. Dezavantajul lor semnificativ este dimensiunea și greutatea lor destul de mare. Adesea, aceasta nu este o problemă. De exemplu, dacă asamblați o stație de lipit DIY într-o carcasă de casă, nu contează cumva dimensiunea afișajului. Pe de altă parte, dacă aveți nevoie de un afișaj pe, de exemplu, un quadcopter, atunci greutatea și dimensiunea devin critice. Prin urmare, astăzi vom învăța cum să lucrăm cu un ecran foarte mic și ușor de la telefonul Nokia 5110.

Nota: Alte postări pe tema ecranelor - Învățat să afișați text pe un indicator LCD de la Arduino, Despre utilizarea ecranelor 1602 cu un adaptor I2C, Lucrul cu LCD bazat pe HD44780 fără biblioteci și Termometru digital dintr-o matrice LCD, TMP36 și Arduino.

Nu vă faceți griji, nu va trebui să cumpărați Nokia 5110, care efectiv nu există astăzi, să alegeți ecranul din el și să aruncați toate celelalte părți. Ecranul Nokia 5110 este un modul de sine stătător foarte comun pentru radioamatorii și costă între 2 și 5 USD, în funcție de magazin. În Rusia, modulul poate fi achiziționat, de exemplu, pe tpai.ru, arduino-kit.ru, amperkot.ru, compacttool.ru, chipster.ru sau electromicro.ru. Și, bineînțeles, ecranele se vând la cel mai mic preț pe AliExpress, dar va trebui să așteptați o lună sau două până ajung din China.

Așa cum se întâmplă adesea în lumea Arduino, există deja biblioteci gata făcute pentru modul și mai multe. Mi-a plăcut biblioteca LCD5110 postată pe site-ul rinkydinkelectronics.com. Această bibliotecă are două versiuni. Primul se numește LCD5110_Basic. Este mai simplu și poate afișa text doar în fonturi de diferite dimensiuni. Este posibil să vă creați propriile fonturi. A doua versiune se numește LCD5110_Graph. Are toate capacitățile primei biblioteci și, pe lângă acestea, poate desena segmente, dreptunghiuri, cercuri și așa mai departe.

În scopul acestei postări, va fi utilizat LCD5110_Basic. Ambele biblioteci sunt bine documentate și au multe exemple de utilizare, așa că dacă aveți nevoie de LCD5110_Graph, vă puteți da seama cu ușurință singur. De remarcat, totuși, pentru ca LCD5110_Basic să se compileze fără avertismente, a trebuit să fac câteva mici modificări codului său.

Deci, un exemplu de utilizare a bibliotecii:

#include

extern uint8_t BigNumbers ;
extern uint8_t MediumNumbers ;
extern uint8_t SmallFont ;

/* SCK / CLK, MOSI / DIN, DC, RST, CS */
LCD5110 lcd(2, 3, 4, 6, 5);

void setup()
{
lcd.InitLCD();
}

int ctr = 0 ;
buclă goală ()
{
lcd.clrScr();

Lcd.setFont(BigNumbers) ;
lcd.printNumI(ctr, DREAPTA, 0);

Lcd.setFont(MediumNumbers) ;
lcd.printNumF(12,34, 2, DREAPTA, 24);

Lcd.setFont(SmallFont) ;
lcd.print ("Linia 1" , 0 , 8 * 0 ) ;
lcd.print("Linia 2", 0, 8 * 1);
lcd.print ("Linia 3" , 0 , 8 * 2 ) ;
lcd.print ("L 4" , 0 , 8 * 3 );
lcd.print ("L 5" , 0 , 8 * 4 );
lcd.print ("0123456789ABCD" , 0 , 8 * 5 );

Ctr + = 5;
dacă (ctr >= 1000)
ctr = 0 ;

Întârziere (500);
}

Cum arată în acțiune:

Sper că nu este nevoie să mesteci codul. Vă rugăm să rețineți că modulul este alimentat de 3,3 V, dar înțelege comenzile de la Arduino în mod normal, fără convertoare de nivel logic. În consecință, conectăm pinii VCC (putere) și BL (iluminare de fundal) la 3,3 V, conectăm GND la masă și conectăm cei cinci pini rămași la pinii digitali Arduino. Trecem numerele PIN către constructorul clasei LCD5110 în conformitate cu comentariile din codul dat.

Simplu, nu-i așa? Puteți găsi codul sursă complet pentru această postare în acest depozit GitHub. Adăugările și întrebările, ca întotdeauna, sunt binevenite.

Plus: Autorul bibliotecii pentru lucrul cu ecranul Nokia 5110 este și autorul bibliotecii OLED_I2C, concepută să funcționeze cu ecrane OLED la fel de populare cu interfață I2C. Puteți găsi un exemplu de utilizare a OLED_I2C în postarea Utilizarea unui joystick Sega Genesis în proiectele Arduino. După cum vă puteți aștepta, cele două biblioteci au o interfață similară.

Philips PCD8544.
Pentru a conecta modulul la alte dispozitive, placa conține un conector și găuri pentru firele de lipit. Există, de asemenea, 4 găuri de montare situate la colțurile plăcii.
Ecranul monocromatic al LCD-ului Nokia 5110 (ecran albastru) este iluminat din spate cu LED-uri albastre. De-a lungul anilor de producție, Nokia 5110 a fost folosit și este folosit într-o gamă largă de aplicații. Modulul de afișare facilitează conectarea și instalarea Nokia în dispozitiv. Datorită modulului, se simplifică prima cunoaștere a unui inginer electronic sau programator cu afișajul LCD Nokia 5110. Folosit inițial ca indicator pentru telefonul mobil, afișajul s-a extins la alte categorii de dispozitive. Este convenabil de utilizat în instrumente de măsură: voltmetre, ampermetre, ohmmetre și altele. Afișajul este util și pentru afișarea citirilor de pe dispozitivele mobile medicale. Este interesant să îl utilizați pentru scara unui receptor radio sau a unui indicator de nivel de semnal în echipamentele de reproducere a sunetului. Ecranul cu o rezoluție de 84x48 pixeli vă permite să afișați informații simbolice și grafice.
Dacă aveți experiență cu Nokia 3310 LCD, va fi ușor să stăpâniți Nokia 5110 LCD, deoarece acești indicatori sunt construiti pe același controler PCD8544.

Specificații modulului LCD Nokia 5110

Nutriţie
tensiune 2,7…3,3 V
actual
lumina de fundal oprită 5 mA
iluminare de fundal la 20 mA

Temperatura aerului în timpul funcționării 0…50
Temperatura de depozitare -10…70

Indicator LCD Nokia 5110

Caracteristici principale

Componenta principală a modulului LCD Nokia 5110 este indicatorul LCD. Are generatoare încorporate de tensiune de alimentare și polarizare a elementelor LCD și există iluminare din spate cu LED. Interfață SPI pentru introducerea informațiilor. Nokia 5110 poate funcționa în patru moduri: normal, inversare a imaginii, ecran gol și „toate punctele activate”. De asemenea, utilizatorul poate controla temperatura, tensiunea de alimentare și polarizarea.

Nutriţie
tensiune 2,7…3,3 V
curent de până la 320 µA
Frecvența ceasului de până la 4 MHz
Timp de resetare cel puțin 100 ns

Structura afișajului

Display-ul este o matrice de elemente LCD si un microcircuit PCD8544 pentru controlul acestora, situat intr-o carcasa montata pe placa. De asemenea, găzduiește patru LED-uri pentru iluminarea din spate a ecranului. Informațiile despre starea punctelor de afișare sunt stocate în memoria RAM a controlerului PCD8544, fiecare punct corespunde unui bit de memorie. Există, de asemenea, un contor de adrese încorporat, care crește automat atunci când următorul octet de informații este scris în memorie.

Controlul afișajului

Realizat prin interfața SPI, afișajul este un dispozitiv slave. Cu toate acestea, în loc de cele patru linii de control obișnuite, există doar trei. Acestea sunt ceasul CLK, selectarea cipului SCE și liniile de date de intrare MOSI. Nu există linie de ieșire MISO. Acest lucru duce la necesitatea folosirii unor metode speciale de management, mai multe despre aceasta mai jos. Interfața funcționează în modurile SPI-0 sau SPI-3. Nokia 5110 are, de asemenea, o linie suplimentară de control Informații/Comandă - D/C̅. Fiecare octet trimis pe display poate fi interpretat ca o comandă sau un octet de informare, în funcție de nivelul de pe linia D/C̅.
Transferul de informații este unidirecțional, iar datele nu pot fi citite din memorie și din registrele de afișare. Prin urmare, programul trebuie să ofere capacitatea de a controla stările de afișare. Cu toate acestea, mai există o caracteristică care complică managementul. Această caracteristică este legată de organizarea memoriei.

Memoria este formată din șase bănci, fiecare dintre ele conține 84 de celule cu o capacitate de 1 octet.

Adresarea fiecărui pixel indicator. În total avem 84x48 pixeli, organizați în 6 bănci orizontale (de la zero la cinci) și 84 de coloane.

Fiecare bancă conține 8 pixeli aranjați vertical, care în suma a șase bănci dau 48 de linii. Figura arată cum va fi afișat un anumit pixel din RAM pe afișaj, fiecare linie din figură reprezintă o bancă.
Informațiile sunt scrise în memorie octet cu octet, nu bit cu bit și nu există nicio modalitate de a controla fiecare punct, ci doar grupuri de opt puncte. Acest lucru, combinat cu faptul că informațiile din memoria LCD a Nokia 5110 nu pot fi citite, înseamnă că înainte de a trimite este necesar să ne amintim ce date sunt stocate în ce celulă. În caz contrar, informațiile se pot pierde atunci când sunt trimise date noi pe afișaj. Această caracteristică este ilustrată de o imagine care arată înlocuirea unui simbol. La scrierea unui program de control, este necesar să se prevadă posibilitatea de stocare a datelor.

Înlocuirea simbolului L cu simbolul A.

Display-ul are o dimensiune de 84x48 pixeli. Informațiile sunt transmise în blocuri verticale de 8 pixeli înălțime, ale căror valori sunt determinate de valorile biților din octetul de ieșire. Bitul cel mai puțin semnificativ codifică pixelul superior.
Privind înainte la descrierile comenzilor, să spunem. Comenzile 1xxxxxxx și 01000yyy definesc coordonatele cursorului - linia și poziția în care vor fi afișați următorii 8 biți de date. După ce octetul este scos, cursorul este mutat automat în poziția adiacentă.
Dacă se selectează modul de adresare orizontal V=0 cu comanda 00100PDVH, cursorul se deplasează la dreapta și următorul octet de date va fi afișat în poziția adiacentă din dreapta. Când se ajunge la marginea dreaptă a ecranului, cursorul se deplasează la începutul liniei următoare. Dacă este selectată adresarea verticală V=1, atunci cursorul se deplasează în jos pe linia următoare, iar după ultima linie cursorul se deplasează cu o poziție orizontală la dreapta și este plasat pe linia de sus.
Ca memorie intermediară, puteți utiliza memoria controlerului de control, care va stoca o copie a datelor pe afișaj. Inainte de trimitere este necesara ajustarea datelor, in functie de ce informatii sunt stocate in memoria intermediara.

Comenzi de control pentru Nokia 5110

Afișajul este controlat prin trimiterea unui cuvânt de comandă prin interfața SPI. Dimensiunea cuvântului este de 1 octet. Comenzile de control sunt împărțite în 3 categorii.

Funcțiile supreme ale managementului

Set function type - indică tipul de funcții cu care va funcționa modulul, de bază sau avansate.
Set power mode - pornește sau oprește alimentarea.
Set addressing mode - determină tipul de adresare a memoriei: verticală sau orizontală. În primul caz, după scrierea unui octet de date, contorul de adresă Y va fi mărit, adică înregistrarea se va desfășura în coloane. În al doilea - contorul de adrese X, înregistrarea va merge linie cu linie.
Funcțiile sunt transferate pe ecranul LCD Nokia 5110 când linia D/C̅ este scăzută. Ele sunt definite printr-un singur cuvânt de comandă. Acest cuvânt trebuie trimis pe afișaj la începutul funcționării. Format:

0 0 1 0 0 PD V H

Bitul PD determină modul de alimentare, setat la PD înseamnă modul de oprire.
Mod de adresare bit V: 1 - vertical, 0 - orizontal.
Bitul H este tipul de funcții care vor fi folosite pentru lucrări ulterioare: 0 - normal, 1 - extins.
După cum puteți vedea, este necesar să vă amintiți starea curentă a afișajului, astfel încât atunci când setați o nouă valoare a parametrului să nu pierdeți informații despre valorile altora. Comanda 00100PDVH este prezentă în ambele seturi de comenzi.

Funcții de bază

Setați modul de afișare la 00001D0E. Definește modul de afișare: ecran gol, toate punctele activate, afișare normală, afișare inversă. E - semn de inversare a imaginii, D - ieșire a imaginii. Dacă D=0, atunci ecranul este fie complet clar E=0, fie complet negru E=1.
Setați comanda X-address 1xxxxxxx sau 0x80 + x selectarea unei poziții orizontale în linia curentă în care va fi afișată imaginea. Unde x=0 este poziția cea mai din stânga, 83 este cea mai din dreapta.
Comanda SetY-address 01000yyy setează adresa Y a celulei în care va fi scris următorul octet. Comanda sau 0x40+y selectați numărul liniei (paginii) pe care este afișată imaginea. Y=0 este linia de sus, 5 este linia de jos. Linia are 8 puncte înălțime.

Caracteristici avansate

Setul de comenzi extins este selectat după ce comanda 00100PDV1 este trimisă.
Setați modul de temperatură. Comanda 000001tt sau 0x04 + t selectează unul dintre cele patru moduri de corecție a temperaturii. În funcție de mod, tensiunea de afișare se va schimba diferit pe măsură ce se schimbă temperatura.
Setați tensiunea de polarizare a elementelor afișajului LCD. Comanda 00010bbb sau 0x10 + b selectează unul dintre cele opt moduri pentru calcularea decalajelor de nivel pentru controlul LCD. Pentru ecranele Nokia obișnuite, modul recomandat este 0001011 sau 0x13.
Setați tensiunea de alimentare pentru elementele afișajului LCD. Comanda 1vvvvvvv sau 0x80 + v selectați tensiunea de pe generatorul de tensiune de amplificare pentru LCD. Când v=0 generatorul este oprit. Tensiunea de ieșire este calculată folosind formula VLCD = 3,06 V + v * 0,06 V. În funcție de alegerea metodei de corecție a tensiunii, această valoare se modifică în funcție de temperatură. Pentru a evita deteriorarea afișajului la temperaturi scăzute, se recomandă ca această valoare să fie mai mică de 8,5 V, adică v<=90. Для обычных дисплеев Nokia это нормальное рабочее значение этого параметра примерно равно 56, т. е. команда принимает вид 10111000, или 0xB8.
Lucrul cu funcțiile de bază și avansate este mai ușor, deoarece fiecare are propriul cuvânt de comandă.
Trebuie reținut că pentru a funcționa cu un anumit tip de funcție, trebuie să setați afișajul să funcționeze cu aceste funcții. În caz contrar, trimiterea cuvântului de comandă va duce la executarea incorectă a acestei comenzi. Mai multe detalii despre comenzile de control pot fi găsite în documentația de la pagina 11.

Inițializarea afișajului

Trebuie să fie executat în 30 ms după ce alimentarea apare în următoarea secvență:
resetați prin conducerea intrării corespunzătoare la nivel scăzut timp de 100 ns sau mai mult,
porniți afișajul și selectați un set extins de comenzi trimițând 0x21,
trimite comanda de compensare a tensiunii 0x13,
setați corecția temperaturii cu comanda 0x04,
porniți generatorul de înaltă tensiune la nivelul de 6,42 V folosind comanda 0xB8,
reveniți la setul de comandă standard prin trimiterea 0x20,
activați modul grafic cu comanda 0x0C.
După acești pași, Nokia 5110 LCD este gata de utilizare.

Conectarea modulului LCD Nokia 5110

Ieșirea semnalelor către contactele modulului este afișată în imaginea din partea de sus a paginii. De asemenea, poate exista un aranjament diferit de contacte prezentate în figură.

Una dintre opțiunile de localizare a contactelor.

Semnale și linii ale modulelor

Putere VCC 3,3 V
GND Cablu comun
Activare SCE, activ scăzut
Resetare Resetare, activ scăzut
D/C̅ Date/comandă: 0 - date, 1 - comandă
Intrare interfață SDIN
SCLC Semnal ceas
Iluminare LED de fundal. Pentru modulele de pe placa roșie, conectați-vă la comun, pentru modulele albastre, conectați-vă la alimentare. Utilizați un rezistor de 330 ohmi în circuitul de iluminare de fundal. Unele modificări au deja instalată o rezistență, altele nu. Pentru a determina prezența unui rezistor și pentru a selecta modul optim de iluminare de fundal, ar trebui să monitorizați curentul modulului și curentul de iluminare de fundal. Nu trebuie să depășească 20 mA.

Dacă nu sunt conectate alte dispozitive la interfața SPI a microcontrolerului, atunci pentru a salva contactele modulului de control principal al dispozitivului și pentru a reduce numărul de linii de comunicație, pinul de selecție a dispozitivului activ SCE ar trebui să fie conectat la pinul GND de pe modul. bord. Dar există un dezavantaj. Dacă controlerul Nokia a pierdut sincronizarea cu MK, acum este imposibil de detectat.
O conexiune mai fiabilă ar trebui făcută astfel. Trageți această linie la un nivel ridicat cu un rezistor de 100-500 kOhm pentru a preveni interferențele să afecteze controlerul în timp ce MK este în starea de resetare.
Când lucrați cu microcontrolere AVR, este convenabil să utilizați interfața USART în modul SPI master. Modul SPI-3 (CPHA=1, CPOL=1). Aceasta înseamnă că, deși nu există schimb, linia SCLK este ridicată, iar controlerul citește datele de pe linia SDIN pe o margine ascendentă pe linia SCLK pentru 100 ns. În acest caz, acestea trebuie setate cu cel puțin 100 ns înainte de marginea ascendentă. Transmisia se realizează pe 8 biți, cei mai semnificativi mai întâi.
Nivelul de pe linia D/C̅ determină modul de interpretare a datelor primite. Un nivel înalt înseamnă că datele transmise ar trebui să fie afișate, un nivel scăzut înseamnă că este transmisă o comandă. Controlerul citește valoarea de pe această linie împreună cu ultimul (cel mai mic) bit al fiecărui octet de date transferat. Acest lucru poate fi dificil atunci când utilizați transferul hardware asincron. Trebuie să așteptați ca octetul anterior să finalizeze transmisia înainte de a seta nivelul.

Conectarea modulului LCD Nokia 5110 și Arduino UNO.

Semnalele de intrare ale modulului trebuie să corespundă nivelurilor logice ale circuitului alimentat cu o tensiune de 3,3 V. Când se lucrează cu un microcontroler cu o sursă de alimentare de 5 V, trebuie utilizate circuite de potrivire a nivelului.

Grafică

La începutul pregătirii unei imagini grafice, ar trebui să pregătiți o imagine alb-negru în format *.bmp cu o rezoluție de 84x48 pixeli în orice editor grafic. Am pregătit o astfel de imagine în Paint, iată-o:

Numele fișierului imagine trebuie salvat cu litere latine. Folosind programul

Îți amintești acele vremuri când telefoanele mobile erau „de stejar”, ​​aveau o tastatură separată cu buton și un mic afișaj monocrom cu cristale lichide?

Acum această piață aparține de tot felul de iPhone, Galaxy etc., dar display-urile își găsesc o nouă utilizare: proiectele de bricolaj!

Ecranul alb-negru de 84x48 pixeli pe care îl vom considera a fost folosit în telefoanele Nokia 3310. Principalul lor avantaj este ușurința în utilizare. Un astfel de afișaj se va potrivi perfect în proiectul dvs. pentru schimbul interactiv de informații cu utilizatorul.

În acest articol ne vom uita la controlul acestui afișaj grafic folosind Arduino. Sunt luate în considerare toate caracteristicile de conectare, caracteristicile tehnice ale afișajului și programul pentru Arduino.

Materiale necesare

  • Arduino sau clona sa.
  • Conectori.
  • Placa de circuite.

Specificațiile afișajului Nokia 5110

Înainte de a conecta afișajul și de a programa Arduino, să ne uităm la câteva informații generale despre acesta.

Pinout

Pentru a conecta și transmite date pe afișaj, sunt utilizate două rânduri paralele de 8 conectori. Fiecare pin este marcat pe spatele ecranului.


După cum sa menționat deja, pinii sunt conectați în paralel unul cu celălalt. Mai jos sunt oferite informații despre scopul fiecărui conector.


Nutriţie

Ați observat deja că afișajul LCD 5110 are doi conectori de alimentare. Primul este cel mai important - alimentarea logicii afișajului. Fișa de date precizează că ar trebui să fie selectată în intervalul 2,7 - 3,3 V. În funcționare normală, afișajul va consuma de la 6 la 7 mA.

Al doilea conector de alimentare este pentru iluminarea de fundal a afișajului. Dacă scoateți afișajul în sine de pe placă (acest lucru nu este necesar, puteți doar să vă uitați la figura de mai jos), veți vedea că iluminarea de fundal este implementată foarte simplu: patru LED-uri albe, care sunt situate în colțurile plăcii. Vă rugăm să rețineți că nu există rezistențe de limitare a curentului.


Așa că trebuie să fii mai atent cu dieta ta. Puteți folosi un rezistor limitator de curent atunci când conectați pinul „LED”, sau utilizați o tensiune de alimentare maximă de 3,3 V. Nu uitați că LED-urile pot absorbi curenți mari! Fără limitare, vor absorbi aproximativ 100 mA la o tensiune de alimentare de 3,3 V.

Interfață de control

Ecranul are un controler încorporat: Philips PCD8544, care convertește interfața paralelă masivă într-una serială mai convenabilă. PCD8544 este controlat folosind un protocol serial sincron, care este similar cu SPI. Rețineți că există pini de contor de timp (SCLK) și de intrare de date seriale (DN), precum și selectare a cipului activ-low (SCE).

Deasupra conectorilor seriali considerați, este instalat un alt conector - D / C, prin care se primesc informații despre dacă datele care sunt transmise pot fi afișate.

Pentru o listă de comenzi, consultați secțiunea „Instrucțiuni” din fișa de date PCD8544 (pagina 11). Există comenzi care șterg afișajul, inversează pixelii, oprește alimentarea etc.

Asamblarea și conectarea afișajului 5110

Înainte de a încărca schița și de a transfera date pe afișaj, trebuie să înțelegeți conexiunea. Pentru a face acest lucru, trebuie să rezolvați problema asamblarii și conectării acestuia la Arduino.

Asamblare

Pentru a „asambla” afișajul, este posibil să aveți nevoie de conectori. 8 bucăți vor fi suficiente. Puteți folosi picioare drepte sau cele de 90 de grade. Depinde de utilizarea ulterioară. Dacă intenționați să utilizați o placă de circuit, o șină cu conectori drepti va fi probabil cea mai bună alegere.

Display LCD de la Nokia 5110 montat pe o placă de circuit mini:


De asemenea, puteți lipi direct adaptoarele pe afișaj.

Conectarea unui display 5110 la Arduino

În acest exemplu vom conecta un afișaj LCD la un Arduino. O tehnică similară poate fi adaptată cu ușurință la alte plăci și microcontrolere. Pentru a conecta pinii de transfer de date - SCLK și DN(MOSI) - folosim pinii Arduino SPI, care asigură un transfer rapid de date. Pinii de selectare a cipului (SCE), de resetare (RST) și de date/control (D/C) pot fi conectați la orice pin digital. Ieșirea de la LED este conectată la un pin de pe Arduino, care acceptă modularea PWM. Datorită acestui lucru, este posibilă reglarea flexibilă a luminozității luminii de fundal.

Din păcate, tensiunea maximă de alimentare a display-ului 5110 poate ajunge la 3,6 volți, deci nu poate fi conectată direct la ieșirea standard de 5 V de pe Arduino. Tensiunea trebuie ajustată. În consecință, apar mai multe opțiuni de conectare.

Conexiune directă la Arduino

Cea mai ușoară opțiune este să vă conectați direct la Arduino. În acest caz, trebuie să utilizați plăci Arduino Pro Mini 3,3V/8MHz sau 3,3V Arduino Pro Mini.


Opțiunea propusă mai jos funcționează cu plăci Arduino 5V. Aceasta este o opțiune funcțională, dar durata de viață a afișajului poate fi ușor redusă.


O opțiune bună și ieftină pentru a oferi protecție suplimentară este să instalați rezistențe între pinii de date de la Arduino la LCD 5110. Dacă utilizați o placă Arduino Uno (sau o placă similară de 5V), puteți utiliza rezistențe de 10k și 1k. Schema de conectare a afișajului folosind rezistențe este prezentată în figura de mai jos:


Conexiunea este aceeași ca în primul exemplu, dar în fiecare circuit de semnal este instalat un rezistor. Rezistoarele de 10 kOhm sunt instalate între pinii SCLK, DN, D/C și RST. Un rezistor de 1 kOhm este între pinii SCE și pinul 7. Ei bine, 330 ohmi rămân între pinul 9 și pinul cu LED-ul. și pinul 7.

Convertoare de nivel

A treia opțiune de conectare este utilizarea convertoarelor de nivel pentru a comuta între 5 și 3,3 V. În aceste scopuri, puteți utiliza Bi-Directional Logic Level Converter sau module TXB0104.


Din păcate, există cinci intrări pentru un semnal de 3,3 V pe afișaj și patru pe convertoarele de nivel. Puteți lăsa ieșirea RTS ridicată (prin conectarea cu ajutorul unui rezistor de 10k ohmi). Ca urmare, nu veți mai putea controla modul în care se repornește afișajul, dar toate celelalte funcții vor fi disponibile.

Primul exemplu de schiță Arduino: LCD Demo

După o conexiune reușită, puteți continua cu descărcarea schiței și afișarea datelor pe afișaj!

Program pentru Arduino

Comentariile din codul de mai sus ar trebui să vă ajute să înțelegeți programul. Cea mai mare parte a acțiunii are loc în cadrul funcției lcdFunTime().

Schiță în acțiune

După încărcarea în Arduino, schița va începe să funcționeze și va lansa un demo - un set de animații standard și testarea funcțiilor grafice. Mai întâi, să afișăm câțiva pixeli. După aceea, vom trece la afișarea liniilor, dreptunghiurilor și cercurilor, încărcarea unui bitmap etc.


După finalizarea schiței, monitorul va trece în modul de transfer de date prin protocolul serial. Deschideți monitorul serial (cu o viteză de transmisie de 9600 bps). Ceea ce imprimați pe monitorul serial va apărea pe monitorul LCD.

Dacă sunteți interesat de capacitățile de afișare ale imaginilor raster, citiți mai departe. Vom analiza exact cum vă puteți importa propria imagine bitmap 84x48 și să o afișați pe ecran.

Al doilea exemplu de schiță Arduino: încărcarea și afișarea bitmaps-urilor

În acest exemplu, vom crea un nou bitmap 84x48, îl vom integra în codul Arduino și îl vom trimite pe monitorul LCD.


Găsiți/Creați/Modificați o hartă de bit

Mai întâi, găsiți imaginea pe care doriți să o afișați pe ecranul LCD 5110. Nu o veți putea extinde prea mult la 84x48 pixeli, dar este posibil. Iată câteva exemple:

După selectarea unei imagini, trebuie să o corectați: faceți-o monocromă (culoare pe 2 biți); păstrați dimensiunea 84x48 pixeli. Puteți utiliza majoritatea editorilor de imagini pentru aceasta. Inclusiv Paint, dacă aveți Windows. Salvați imaginea rezultată.

Conversia unui bitmap într-o matrice

Următorul pas este convertirea acestui fișier într-o matrice de caractere de 504 octeți. Pentru a face acest lucru, puteți utiliza diverse programe. De exemplu, LCD Assistant.

Pentru a încărca o imagine în LCD Assistant, accesați Fișier > Încărcare imagine. Ar trebui să se deschidă o fereastră cu o imagine de previzualizare. Asigurați-vă că imaginea are dimensiunea corectă - 84 pixeli lățime, 48 pixeli înălțime, iar orientarea octeților este setată la Vertical, Size endianness la Mică. Restul setărilor implicite ar trebui să fie setate corect (8 pixeli/octet)

După aceasta, accesați fila Fișier > Salvare ieșire pentru a genera un fișier text temporar. Deschideți acest fișier text pentru a vizualiza noua dvs. matrice minunată. Schimbați tipul matricei în char (nu nesemnat sau const). De asemenea, asigurați-vă că matricea este denumită corect (fără liniuță, nu începe cu un număr etc.).

Importă în schiță și desenează!

Copiați matricea creată în schița Arduino. Puteți folosi schița din primul exemplu. Lipiți matricea dvs. oriunde. Acum, pentru a vă afișa schița, înlocuiți setup() și loop() din schiță cu liniile de mai jos (păstrați celelalte funcții și variabile la fel):

// ...variabilele, constantele și matricea bitmap sunt definite mai sus

lcdBegin(); // Configurarea pinii și inițializarea afișajului LCD

setContrast(60); // Reglați contrastul (intervalul preferat este de la 40 la 60)

setBitmap(flameBitmap); // flameBitmap ar trebui să fie înlocuit cu numele matricei dvs

updateDisplay(); //Actualizează afișajul pentru a afișa matricea

// Funcțiile pentru control și grafică pe afișajul LCD sunt definite mai jos...

Serios, s-a dovedit cool? Printre altele, puteți importa mai multe imagini și puteți crea mici animații! Încearcă, sunt sigur că o să-ți placă!

Link-uri pentru descărcarea de programe suplimentare, biblioteci și foi de date

Fișe de date pentru afișaj LCD și drivere
  • Fișă de date LCD - Nu este exact aceeași cu 5110, dar foarte asemănătoare ca specificații
Biblioteci și schițe Arduino
  • PCD8544 Arduino Library – Biblioteca pentru lucrul Arduino cu driverul LCD PCD8544
Programe pentru crearea de imagini raster
  • TheDotFactory – Instrument excelent pentru crearea de matrice de fonturi personalizate

Lasă-ți comentariile, întrebările și împărtășește-ți experiențele personale mai jos. Noi idei și proiecte se nasc adesea în discuții!

Când asamblam dispozitive pe Arduino, ne confruntăm adesea cu nevoia de ieșire autonomă a informațiilor. Și, ca întotdeauna, vreau ca soluția să fie ieftină. Și aici se dovedește că alegerea dispozitivelor ieftine nu este foarte bogată.

Dacă există puține informații afișate, este convenabil să utilizați indicatori cu șapte segmente. Sunt foarte luminoase și contrastante. Astfel de rigle de 4 cifre cu o înălțime de 0,36 inci pe TM1637 se vând cu 70 de cenți și sunt controlate de doar 2 pini. După cum ați putea ghici, acestea sunt concepute în principal pentru afișarea timpului, deși pot afișa cu ușurință, de exemplu, temperatura, presiunea și alți parametri, pentru care sunt suficiente 4 cifre.

Dar dacă există o mulțime de informații de ieșire, acestea nu vor funcționa. În astfel de cazuri, sunt folosite cel mai des afișajele LCD 1602 „folk”, care au capacitatea de a afișa 2 rânduri de 16 caractere pentru un preț de un dolar și jumătate. În acest fel, puteți afișa mult mai multe informații.

Fratele său mai avansat de 4 linii va afișa și mai multe informații, dar este deja vizibil mai scump, aproximativ 5 dolari, iar dimensiunea sa este deja destul de mare.

Toate aceste dispozitive au avantajele și dezavantajele lor. Principalele dezavantaje includ lipsa suportului pentru limba rusă, deoarece tabelul de coduri este strâns conectat la cip și incapacitatea de a afișa grafică. Strict vorbind, este posibil să aveți firmware chirilic în astfel de dispozitive, dar acestea sunt vândute în principal în Rusia și la prețuri nerezonabile.
Dacă aceste dezavantaje sunt decisive pentru utilizarea în dispozitivul care se creează și ți se potrivește rezoluția de 84x48 pixeli în grafică alb-negru, atunci ar trebui să fii atent la display-ul Nokia 5110 a fost odată unul, dar era foarte incomplet iar pe alocuri învechite. În special, acolo s-a afirmat că era imposibil să se afișeze alfabetul chirilic. Astăzi nu există o astfel de problemă.

Eroul recenziei noastre, la un preț mai mic de câțiva dolari, a venit la mine într-o cutie de carton rezistentă, cu o folie de protecție pe ecran, pentru care multe mulțumiri vânzătorului. Dispozitivul are o dimensiune a plăcii de circuit imprimat de 45x45 mm de PCB roșu și un ecran LCD cu o rezoluție de 84x48 pixeli și o dimensiune de 40x25 mm. Aparatul cântărește 15 g Are o lumină de fundal albastră care poate fi oprită. Pentru Arduino, acest afișaj va mușca 5 pini digitali, fără a număra sursa de alimentare. Placa are 2 rânduri de știfturi care sunt paralele, astfel încât să puteți folosi doar un rând. Dintre acestea, 5 sunt pentru control, 2 pentru alimentare și unul pentru aprinderea luminii de fundal. Pentru a porni lumina de fundal, trebuie să scurtcircuitați pinul LIGHT la masă (există o altă versiune a acestui afișaj, după cum se spune - pe placa albastră, unde acest pin este conectat la sursa de alimentare). Placa vine nesudata, in kit sunt incluse doi piepteni.
Deci, conectăm pinii SCLK, DIN, DC, CE și RTS la pinii Arduino, de exemplu, 3, 4, 5, 6, 7. Pinul VCC la 3.3V (exact 3.3, nu 5!), conectați pământ și descărcați biblioteca.
Funcțiile din această bibliotecă vă permit să afișați primitive grafice (linie, cerc, dreptunghi etc.), imagini raster și text. Biblioteca conține un exemplu care arată capabilitățile sale, vă sfătuiesc să o priviți. Dar pentru ca textul să fie afișat în limba rusă, va trebui să modificați fontul. Dar, din fericire, oamenii buni au făcut deja totul pentru noi și fișierul de înlocuire poate fi descărcat.
Voi da un exemplu de schiță mai jos, iar rezultatul textului în limba rusă poate fi văzut mai sus. Este ușor de calculat că la cea mai mică dimensiune de font (nr. 1), puteți afișa 84 de caractere (14 în 6 rânduri), ceea ce este suficient pentru a afișa, de exemplu, mesaje de diagnosticare extinse. Fontul #2 este de două ori mai mare.
Rezoluția ecranului vă permite să afișați imagini raster în două culori destul de bune, care pot fi folosite ca pictograme în program.

Crearea unor astfel de pictograme este foarte simplă. Sub spoiler vă voi arăta cum se face acest lucru.

Cum să creați rapid o imagine raster folosind exemplul siglei site-ului MYSKU

Mai întâi, să facem o captură de ecran a ecranului cu logo (tasta Print Screen).
Lansați Paint din programele standard și apăsați Ctrl+V. Întregul ecran cu sigla este la dispoziția noastră.


Selectați fragmentul dorit și apăsați butonul TRIM. Să luăm fragmentul nostru.

Acum trebuie să transformăm acest fragment în două culori. Vopseaua în sine poate face față acestui lucru. Faceți clic pe „Salvare ca” și selectați tipul „Imagine monocromă (*.bmp)”. Ignorăm avertismentul editorului și facem clic pe OK și vedem următoarea imagine:

Acum trebuie să transformăm acest set de pixeli într-o serie de coduri pentru Arduino. Am găsit unul care face față acestei sarcini.
El trebuie să trimită un fișier bmp ca intrare, dar trebuie să fie de 256 de culori! Deci vom face clic din nou pe „Salvare ca” și vom selecta tipul „256 color bmp art”. Acum să ne amintim dimensiunile laturilor fișierului rezultat, va trebui să le indicați în schiță (căutați fie în Paint în partea de jos în bara de stare, fie deschizând File Properties -> Fila Detalii) și mergeți la convertorul online .


Să selectăm fișierul nostru, să verificăm numerele hexazecimale și să facem clic pe CONVERT.
Să obținem matricea de care avem nevoie:


Copiem această matrice în schiță, o compilăm și vedem ce se întâmplă.


Acum să oprim lumina de fundal și să vedem cum vor arăta imaginile fără ea.


După cum puteți vedea, atât textul, cât și pictogramele sunt lizibile. Mai mult, cu cât lumina era mai puternică, cu atât lizibilitatea era mai bună (oh, îmi amintesc cât de plăcut era să folosești Nokia 1100 într-o zi însorită, în timp ce oamenii își ascundeau telefoanele cu matrice de culoare la umbră pentru a forma un număr). În general, puteți utiliza afișajul în acest mod dacă există suficientă lumină sau lumina de fundal interferează sau pentru a economisi energia bateriei. Dacă ecranul cuiva este greu de văzut, joacă-te cu contrastul din schiță. Cel mai bun contrast cu și fără lumină de fundal se obține la valori diferite, acest lucru trebuie luat în considerare.

Un exemplu de schiță pentru afișarea textului și a imaginilor

#include #include // pin 3 - Ieșire serial ceas (SCLK) // pin 4 - Ieșire date seriale (DIN) // pin 5 - Selectare date/comandă (D/C) // pin 6 - Selectare cip LCD (CS) // pin 7 - LCD resetare (RST) Adafruit_PCD8544 display = Adafruit_PCD8544(3, 4, 5, 6, 7); const static unsigned char PROGMEM ku59x39 = ( 0xc3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff ff, 0xff, 0xff, 0xff, 0xf0, 0xe0, 0x1f, 0xff, 0xff, 0xe0, 0x0, 0x3, 0xf0, 0xfc, 0xf, 0xff, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfc, 0xfc, 0xff 0x0, 0x0, 0x7f, 0xc0, 0xff, 0xe3, 0xff, 0x0, 0x0, 0x7f, 0xff, 0x90, 0xff, 0xf1, 0xfc, 0x0, 0x7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 0xff, 0xfe, 0x30, 0xff, 0xfc, 0x40, 0x3, 0xff, 0xff, 0xfc, 0x70, 0xff, 0xfe, 0x0, 0xf, 0xff, 0xff, 0xf8, 0xf0, xff, 0xff, 0xff, 0xff, 0xff , 0xf0, 0xff, 0xff, 0x81, 0xff, 0xff, 0xff, 0xe1, 0xf0, 0xff, 0xff, 0xc7, 0xff, 0xff, 0xff, 0xe3, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff xff, 0xe3, 0xff, 0xff, 0xff, 0x83, 0xf0, 0xff, 0xff, 0xe1, 0xff, 0xff, 0xff, 0x87, 0xf0, 0xff, 0xff, 0xf0, 0xff, 0xff,, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff , 0xff, 0xff , 0xff, 0x87, 0xf0, 0xff, 0xff, 0xf8, 0x7f, 0xff, 0x1f, 0x87, 0xf0, 0xff, 0xff, 0xf8, 0x7f, 0x0, 0x7f, 0x0, xff 0x38, 0x0, 0x0, 0x1, 0xf0, 0xff, 0xff, 0xfc, 0x20, 0x0, 0x0, 0xbf, 0xf0, 0xff, 0xff, 0xfe, 0x0, 0x3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff x3f, 0xe1, 0xff, 0xf0, 0xff, 0xff, 0xfe, 0x3, 0xf0, 0x0, 0x1, 0xf0, 0xff, 0xff, 0xfe, 0xf, 0x80, 0x0, 0x0, 0xf0, 0xf0, 0xf0, 0xffxe f, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xc, 0x3, 0xff, 0xe1, 0xf0, 0xff, 0xff, 0xff, 0x0, 0x1f, 0xff, 0xc0, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 0xf0, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0x9c, 0xf0, 0xff, 0xff, 0xff, 0x83, 0xff, 0xff, 0x38, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff xff, 0xff, 0xff , 0xf0, 0xff, 0xff, 0x3, 0xf0, 0xff, 0xff, 0xff, 0xe0, 0x7f, 0xff, 0x87, 0xf0, 0xff, 0xff, 0xff, 0xce, 0xff, 0xf0, 0xf0, 0xff ff, 0xce, 0x7f , 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0x9e, 0x7f, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0x8c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff , 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xc1, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xe3, 0xff, 0xff, 0xff, 0xf0); void setup() ( display.begin(); display.setContrast(50); display.setTextSize(1); display.setTextColor(BLACK); // setează culoarea textului) void loop() ( display.clearDisplay(); display .drawBitmap(10, 5, ku59x39, 59, 39, BLACK); display.clearDisplay(); ; display.display();


Ei bine, și din moment ce Arduino (Procesor+RAM+Bootloader-BIOS)+unitate (EEPROM) + sistem de intrare/ieșire (IRDA Remote și Nokia 5110) este, de fapt, un computer cu drepturi depline, atunci de ce să nu scrieți un computer cu drepturi depline joc pentru el? Desigur, computerul nostru Arduino nu va putea face față unui joc precum GTA, dar se poate descurca cu ușurință cu o jucărie simplă! Să scriem un joc din toate timpurile - Tetris.
Pentru orice programator, acesta este ca un exercițiu de dimineață, un exercițiu ușor pentru creier, așa că mergeți mai departe! Și este ca și cum acest lucru nu s-a mai întâmplat până acum pe muska. Și jocul va dezvălui potențialul subiectului.
Ca sistem de intrare, am decis să folosesc telecomanda IRDA de pe ORICE dispozitiv. Cu această soluție, avem nevoie doar de una, la un cost de 4 ruble bucata. Și o telecomandă IR poate fi găsită în orice apartament. Pentru actorie vocală, vom folosi și un tweeter piezo de pe o placă de bază veche - acesta va fi analogul nostru bugetar al multimedia)). Unul mai tare îmi vine acum, dar asta deja crește prețul supercomputerului nostru cu un dolar întreg! O să ne descurcăm deocamdată. Va fi deja cu el.
Pe placa de breadboard conectăm dispozitivele de ieșire și de intrare și „multimedia”. A ieșit așa:


Am folosit Arduino Uno, deoarece are deja 3.3V de care avem nevoie, dar dacă folosiți Mini, va trebui să obțineți 3.3 necesar din cei 5 volți pentru ecran. Cea mai ușoară cale de pe internet este să puneți două diode de siliciu în serie (selectați).
Pentru a nu desena o schemă electrică, voi indica pur și simplu pinii Arduino pe care i-am folosit.
Conectarea ecranului Nokia 5110:
pin 3 - Ieșire serial ceas (SCLK)
pin 4 - Ieșire de date seriale (DIN)
pin 5 - Selectare date/comandă (D/C)
pin 6 - Selectare cip LCD (CS)
pin 7 - resetare LCD (RST)
Pentru a ilumina pinul LIGHT al afișajului, îl aruncăm la GND al Arduino. (Numai pentru tabla rosie!). Plus alimentare la 3.3V. Pământ la GND.
Conexiune receptor IR:
pin 8 - IR (control). Alimentare la +5V și respectiv GND.
Conectarea tweeter-ului piezo:
pin 9 - difuzor, masă la GND.
După instalare, încărcați schița

Schița jocului Tetris

//// © Klop 2017 #include #include #include #include #define rk 4 // lățimea pătratului #define rz 5 // lățimea scaunului #define smeX 1 #define smeY 1 #define MaxX 10 // sticlă numărul de locuri orizontal #define difuzor 9 #define RECV_PIN 8 // picior pe receptorul IRDA // pin 3 - Ieșire ceas serial (SCLK) // pin 4 - Ieșire date seriale (DIN) // pin 5 - Selectare date/comandă (D/C) // pin 6 - Selectare cip LCD (CS) // pin 7 - Resetare LCD (RST) Afișaj Adafruit_PCD8544 = Adafruit_PCD8544(3, 4, 5, 6, 7); IRrecv irrecv(RECV_PIN); decode_results rezultate; byte mstacan; octet Lst, SmeH, centru, NumNext; octet MaxY; // numărul de sticlă de locuri verticale int dxx, dyy, FigX, FigY, Victory, myspeed,tempspeed; nesemnat lung ok, stânga, pravo, vniz, myrecord; unsigned long flfirst=1234; // primul octet de etichetă de lansare fig= (((0,0,0,0), (0,0,0,0), (0,0,0,0), (0,0,0,0)) , ((0,1,0,0), (0,1,0,0), (0,1,0,0), (0,1,0,0)), ((0,0,0) ,0), (0,1,1,0), (0,1,1,0), (0,0,0,0)), ((0,1,0,0), (0,1) ,1,0), (0,0,1,0), (0,0,0,0)), ((0,1,0,0), (0,1,0,0), (0) ,1,1,0), (0,0,0,0)), ((0,1,0,0), (0,1,1,0), (0,1,0,0), (0,0,0,0)), ((0,0,1,0), (0,1,1,0), (0,1,0,0), (0,0,0,0) )), ((0,0,1,0), (0,0,1,0), (0,1,1,0), (0,0,0,0)), ((0,0) ,0,0), //8 (0,0,0,0), (0,0,0,0), (0,0,0,0)) ); //================================================== ============= void mybeep () // sunet (analogWrite(difuzor, 100); întârziere(100); analogWrite(difuzor, 0); ) //======= =============== ======================== void figmove(octetul a, octetul b) (pentru (octetul i=0;i<4;i++) for (byte j=0;j<4;j++) fig[a][i][j]=fig[b][i][j]; } //============================================== void figinit(byte a) { for (byte i=0;i<4;i++) for (byte j=0;j<4;j++) { fig[i][j]=fig[i][j]; if (fig[a][j][i]==1) // покажем след фигуру display.fillRect(i*rz+60, 20+(j)*rz, rk , rk, BLACK); else display.fillRect(i*rz+60, 20+(j)*rz, rk , rk, WHITE); } display.display(); NumNext=a; tempspeed=myspeed-(Victory/30)*50; // через каждые 30 линий увеличим скорость падения; dxx=0; for (byte i=0;i0) display.fillRect(i*rz+1, SmeH+(j-4)*rz, rk , rk, BLACK); else display.fillRect(i*rz+1, SmeH+(j-4)*rz, rk , rk, WHITE);<4;i++) for (j=0;j<4;j++) if (fig[j][i]==1) if (i+FigX+dx<0 || i+FigX+dx>ds(Victorie,1);<4;i++) for (j=0;j<4;j++) if (fig[j][i]==1) {mstacan=1; dxx=0; } } // переместили фигуру на новые координаты else { if (pov) figmove(0,8); for (i=0;i<4;i++) // восстановили фигуру for (j=0;j<4;j++) if (fig[j][i]==1) mstacan=1; } return(flag); } //================================================ void clearstacan() { for (byte i=0;idisplay.display(); ) //================================================= =============== = void ds(int aa, int b) ( display.fillRect(55, 10, 29, 10, WHITE); display.setCursor(55,b*10) ); ========================= bool iffig(int dx , int dy) (int i,j; bool flag=true; bool pov=false; pentru (i=0;i
Și poți lupta. Jocul acceptă legarea la orice telecomandă. Pentru a face acest lucru, la începutul jocului, la întrebarea „Apăsați OK”, apăsați butonul de pe telecomandă care va fi responsabil de rotirea figurii. Dacă telecomanda jocului este deja familiară, jocul va începe imediat. Dacă telecomanda este nouă, atunci codul butonului OK nu se va potrivi cu cel memorat și jocul va cere să apăsați butoanele „Stânga”, „Dreapta” și „Jos” în secvență. Aceste butoane vor fi înregistrate în memoria nevolatilă a Arduino și, ulterior, această telecomandă va fi recunoscută imediat după apăsarea butonului „OK”.


Când „eșuezi” pe linia colectată, se va auzi un scârțâit. Este implementat pe baza mai multor pini Arduino (în cazul nostru 9) pentru a produce PWM la o frecvență dată.
Jocul acceptă toate atributele unui joc normal. Există, de asemenea, un indiciu pentru următoarea cifră și scorul curent. Jocul ține evidența înregistrărilor. Această valoare este stocată în memoria nevolatilă a Arduino. Pentru a reseta înregistrarea, trebuie doar să schimbați valoarea flfirst=1234 din schiță cu orice altă valoare. De asemenea, jocul crește automat viteza de cădere la fiecare 30 de linii eliminate, astfel încât nu veți putea juca la infinit). Schița nu a fost optimizată sau executată cu atenție, ci a fost scrisă pe îndelete pentru distracție. Dacă cineva găsește o eroare, scrie. Despre ©. Aveți voie să editați schița după cum doriți. Numai când vă publicați opțiunile undeva, vă rugăm să indicați un link către sursa originală).
De ce am făcut-o - weekenduri lungi + „din dragoste pentru artă”. Dacă fiica mea ar fi mică, probabil că i-aș face un mini slot machine pentru camera păpușilor ei pentru 8 martie, exact la timp. Aș adăuga câteva jocuri precum Snake și Arkanoid și, probabil, aș tăia corpul din PCB. Doar fiica mea își susține deja doctoratul anul acesta, așa că este o ratare, dar poate că această idee va fi de folos altcuiva).

Să rezumam pentru ecranul Nokia 5110:
Pro
+Posibilitate de afisare grafica;
+Fără probleme cu alfabetul chirilic;
+ Greutate redusă;
+Raport excelent dimensiuni/cantitate de informații afișate;
+Avantajele tehnologiei LCD utilizate sunt consumul redus de energie și lizibilitatea bună în lumină puternică;
+ Iluminare de fundal comutabilă;
+Preț.

Contra
-Ilumina de fundal este neuniformă;
-Imaginea este alb-negru (fara nuante);
-Nevoia de a avea grijă de 3.3V, nu orice Arduino are o astfel de tensiune.

Verdict: Pentru banii săi, pe baza totalității caracteristicilor sale, își ocupă cu încredere nișa, nu este fără motiv că este un ficat atât de lung printre dispozitivele de afișare pentru Arduino.

Plănuiesc să cumpăr +102 Adăugați la favorite Mi-a placut recenzia +148 +269

În acest tutorial, vom afișa mai întâi câteva date pe ecranul Nokia 5110 și apoi vom afișa datele senzorului DHT22 pe acesta. Vom interfața Nokia 5110 LCD și Arduino. Veți învăța interfața Nokia 5110 Arduino prin două exemple. În primul rând, vom afișa pur și simplu câteva date pe ecran, iar în al doilea exemplu, vom citi citirile de la senzorul de temperatură și umiditate DHT22 și le vom afișa pe ecranul LCD Nokia 5110.

Nokia 5110 LCD este o alegere excelentă pentru afișarea datelor. Este mai ieftin decât LCD-urile obișnuite și este foarte ușor de utilizat cu microcontrolere. Trebuie doar să conectați câteva fire și sunteți gata de plecare.

Pentru a conecta Nokia 5110 la Arduino, vom avea nevoie de ecranul propriu-zis cu un microcontroler și o serie de alte părți.

  • Nokia 5110 LCD × 1
  • Potențiometru de precizie cu mai multe ture - 1 kΩ (25 de spire) × 1
  • Rezistor 10 kOhm × 4
  • Rezistor 1 kOhm × 1
  • Rezistor 330 ohm × 1
  • Jumpers × 1
  • Aspect (universal) × 1

În plus, vom avea nevoie de software în forma cu care sunteți cel mai probabil familiarizat.

Pinout Nokia 5110

Concluzii Nokia 5110 LCD arată astfel:

RST: resetare pin
S.C.E.: pin selectează cip
D/C: (Date/Comandă): Acesta este pinul de selecție a modului. LOW înseamnă modul de comandă și HIGH înseamnă modul de date.
DN(Pin de date): Intrare de date seriale
SCLK: semnal de ceas serial
VCC: tensiune de intrare 2,7 până la 3,3 V
LED: Acest LED este o lumină de fundal. Tensiune de intrare 3,3 V
GND: Pământ

Exemplul nr. 1

În primul exemplu, vom afișa pur și simplu datele pe afișajul LCD al Nokia 5110. Schema circuitului pentru conectarea Nokia 5110 și Arduino este prezentată mai jos.

Schema de conectare

LCD-ul Nokia 5110 necesită 3,3V pentru a funcționa, așa că va trebui să folosim rezistențe pentru a converti 5V în 3,3V Dacă utilizați Nokia 5110 fără rezistențe, ecranul va funcționa, dar durata de viață a LCD-ului va fi redusă.

  • Conectați pinul 1 (pinul RST) la pinul 6 al Arduino printr-un rezistor de 10k ohmi.
  • Conectați pinul 2 (pinul SCE) la pinul 7 al Arduino printr-un rezistor de 1k ohm.
  • Conectați pinul 3 (pinul D/C) la pinul 5 al Arduino printr-un rezistor de 10k ohmi.
  • Conectați pinul 4 (pinul DIN) la pinul 4 al Arduino printr-un rezistor de 10k ohmi.
  • Conectați pinul 5 (pinul CLK) la pinul 3 al Arduino printr-un rezistor de 10k ohmi.
  • Conectați pinul 6 (pin VCC) la pinul de 3,3 V al Arduino.
  • Conectați pinul 7 (pinul LED) la pinul din mijloc al potențiometrului de 1k ohm printr-un rezistor de 330 ohmi și conectați ceilalți doi pini la VCC și la masă.
  • Conectați pinul 8 (pin GND) la masă Arduino.

Potențiometrul conectat este utilizat pentru a crește sau micșora iluminarea de fundal LCD. Îl puteți conecta la 3,3V dacă doriți ca iluminarea de fundal să fie puternică în orice moment, sau îl puteți conecta la masă dacă nu doriți să aveți iluminare de fundal.

Cod

Descărcați biblioteca Nokia 5110 de mai jos.

Codul primului exemplu în sine:

#include LCD PCD8544; void setup() ( lcd.begin(84, 48); ) void loop() ( lcd.setCursor(0, 0); lcd.print(" WELCOME "); lcd.setCursor(0, 1); lcd.print ("Către"); lcd.setCursor(0,2);

În primul rând, includem biblioteca pentru Nokia 5110 LCD. Biblioteca va include toate comenzile de care vom avea nevoie pentru LCD-ul Nokia 5110 Am declarat apoi o variabilă numită „lcd” de tip PCD8544.
#include LCD PCD8544;

Apoi, în funcția de configurare, setăm rezoluția pentru Nokia 5110 LCD. Ecranul LCD Nokia5110 are o rezoluție de 84x48, așa că am setat rezoluția la 84x48 în Arduino IDE.

lcd.begin(84, 48);

Apoi, în funcția de buclă, am poziționat mai întâi cursorul pe prima linie și am tipărit „Bine ați venit!” (BUN VENIT)..

Lcd.setCursor(0, 0);

lcd.print(" BINE AȚI VENIT ");

lcd.setCursor(0, 1);

Schema de conectare

lcd.print("Către");

  • lcd.setCursor(0,2);
  • lcd.print("site-ul");
  • întârziere (200);

Cod

Exemplul nr. 2

În al doilea exemplu, vom conecta un senzor de temperatură și umiditate DHT22 la Arduino și vom folosi DHT22 pentru a citi temperatura, umiditatea și indicele de căldură. Vom afișa apoi aceste date pe afișajul LCD al Nokia 5110. Schema de circuit a interfeței Nokia 5110, Arduino și DHT22 este prezentată mai jos.

#include #include „DHT.h” #define DHTPIN 8 #define DHTTYPE DHT22 PCD8544 lcd; DHT dht(DHTPIN, DHTTYPE); void setup() ( lcd.begin(84, 48); dht.begin(); ) void loop() ( lcd.clear(); float hum = dht.readHumidity(); float temp = dht.readTemperature(); //Citirea temperaturii în grade float fah = dht.readTemperature(true //Citirea temperaturii în fahrenheit if (isnan(hum) || isnan(temp) || isnan(fah)) ( //Verificarea dacă arduino); au primit sau nu valorile lcd.println(„Eșuat la citirea de la senzorul DHT!” return float heat_index = dht.computeHeatIndex (fah, hum); convertFtoC (heat_index); //Citirea indicelui de căldură în grade lcd.setCursor("Humi: ";: "; lcd.print(fah); lcd.print("*F\t"); (" *C "); lcd.setCursor(0,4;

lcd.println(" *F ");

#include întârziere (2000);

) În primul rând, am inclus biblioteci pentru Nokia 5110 LCD și senzorul de temperatură și umiditate DHT22. După aceasta, am inițializat pinul 8 pentru DHT22 (DHTPIN 8) și am determinat tipul de senzor DHT. Sunt disponibile și alte modele de senzori DHT, dar am folosit DHT22 datorită preciziei sale ridicate. Am declarat apoi o variabilă „lcd” de tip PCD8544 pentru afișajul LCD și o variabilă „dht” de tip DHT pentru senzorul DHT22..

#include „DHT.h” #define DHTPIN 8 #define DHTTYPE DHT22 PCD8544 lcd; DHT dht(DHTPIN, DHTTYPE);

Apoi, în funcția de configurare, setăm rezoluția pentru Nokia 5110 LCD. Ecranul LCD Nokia5110 are o rezoluție de 84x48, așa că am setat rezoluția la 84x48 în Arduino IDE. După aceasta am început să primim date de la senzorul DHT22 folosind comanda

dht.begin()