Si të konfiguroni telefonat inteligjentë dhe PC. Portali informativ
  • në shtëpi
  • OS
  • LCD 1602 që lidhet me arduino nano. Lidhja LCD me tabelën Arduino (Arduino)

LCD 1602 që lidhet me arduino nano. Lidhja LCD me tabelën Arduino (Arduino)

Arduino Nano mbërriti, mbërriti një balenë, në të cilën një tabelë (dërrasë) dhe një ekran LCD. Ekrani në tabelë lexon - 1602A, më poshtë - QAPASS. Fillova të skalitja pajisjen e parë, dhe natyrisht, doja të shfaqja informacione në ekran, dhe jo LED flash.

Google ndihmoi, tha se ky është një shfaqje karakteresh; nëse nuk janë të çoroditura, atëherë ka shumë të ngjarë që karakteret ASCII janë të disponueshme - numra, latinisht, diçka nga karakteret bazë.

Materialet e mëposhtme ndihmuan në fillimin e ekranit: Drejtimi i një LCD të tipit karakter nga një port printeri PC; Si të lidhni Arduino me një LCD me karakter; Pwm Servo Driver Kontrolli i motorit PDF.

Ekrani është mjaft i zakonshëm, dhe mburojat tashmë janë shpikur për të - ka opsione me si SPI, dhe / ose me I2C, dhe interneti është plot me receta për këto raste. Por unë kisha vetëm ekranin origjinal 16x2 dhe arduinka në të cilën doja ta bashkoja.

Ekrani ka një mënyrë funksionimi dhe transmetimi të të dhënave në grimca, nga 4 bit secila, ndërsa pjesët më pak të rëndësishme të autobusit nuk përdoren. Lidhja e vetëm gjysmës së autobusit të të dhënave përshkruhet në shumë vende, dhe unë nuk fillova të kuptoj se si ta lidh ekranin dhe të punoj me të përmes 8 linjave. Unë isha mjaft i kënaqur që tashmë funksionon.

Kam gjetur një përshkrim të mirë të këtij lloji të ekraneve këtu - http://greathard.ucoz.com/44780_rus.pdf. Dhe këtu (http://arduino.ru/forum/programmirovanie/lcd-i2c-partizanit#comment-40748) është një shembull i vendosjes së një gjeneruesi të karaktereve.

Lidhje

Ekrani im erdhi me kontakte të pa salduara. Që në fillim kam dashur të lidh kabllon, të pres 16 tela me dupon, ta pastroj. Dhe pastaj gërmova në balenë dhe gjeta një krehër duponash për bashkim në dërrasë. Prej aty shkëputa 16 kontakte dhe i bashkova.
Ekrani im dukej (para bashkimit të kontakteve) diçka si kjo:

Së pari lidha pinin 15 (A) në + 5 V, 16 (K) me tokëzimin dhe u sigurova që drita e prapme të funksiononte. Në përgjithësi, është e saktë të lidhni katodën me tokëzimin përmes një rezistence 220Ω, të cilën e bëra më vonë.

Pastaj lidha tokën (1) dhe fuqinë (2). Arduino mund të mundësohet nga USB, nga tensioni i stabilizuar 5V dhe nga tensioni i parregulluar 6-12V, zgjidhet automatikisht tensioni më i lartë. Tani arduinka mundësohet nga USB, dhe unë po mendoja se ku të tërhiqja 5 volt. Doli se 5V është në kontaktin arduino, ku është lidhur 5V i stabilizuar i jashtëm. Përkundrazi, doli të ishte 4.7 V, por ishte e mjaftueshme për mua.

Pas lidhjes së furnizimit me energji elektrike, nëse gjithçka është në rregull, rreshti i sipërm ndizet me drejtkëndësha të fortë familjariteti.

Më pas lidhim potenciometrin e kontrastit (pin 3 V0). Ne hedhim një nga terminalet ekstreme të potenciometrit në tokë, i dyti - në + 5 V, ai i mesëm - në pinin 3 të ekranit. Rekomandohet potenciometër 10K. Unë kisha 50 mijë nga balena, në fillim e përdora. Rregullimi ishte vetëm në një skaj, ishte shumë delikate për të kapur kontrastin e dëshiruar. Pastaj në një balenë tjetër gjeta një të ngjashme në 5K dhe e vendosa. Vendosja shtrihej nga një skaj në gjysmë kthese. Me sa duket, ju mund të merrni një potenciometër edhe më pak. 10K ndoshta rekomandojnë që qarku të konsumojë më pak. Po, më duhej të lidhja pak, lidha instalimet elektrike me dupon në kapakët e potenciometrave.

Skicë testuese

Ne marrim një skicë provë në shembuj nga studio Arduino - "C: \ Program Files (x86) \ Arduino \ libraries \ LiquidCrystal \ ex amples \ HelloWorld \ HelloWorld.ino", vetëm ju duhet të ndryshoni kontaktet në tonat - LiquidCrystal lcd ( 7, 6, 5, 4, 3, 2);

Në thelb, kjo skicë përmban gjithashtu një përshkrim se me çfarë të lidhet. Mund të lidheni, siç tregohet atje, atëherë asgjë nuk duhet të ndryshohet fare.

// përfshini kodin e bibliotekës: #include // inicializoni bibliotekën me numrat e kunjave të ndërfaqes LiquidCrystal lcd (7, 6, 5, 4, 3, 2); konfigurimi void () (// konfiguroni numrin e kolonave dhe rreshtave të LCD "s: lcd.begin (16, 2); // Printoni një mesazh në LCD.lcd.print (" përshëndetje, botë! ");) void loop () (// vendos kursorin në kolonën 0, rreshti 1 // (shënim: rreshti 1 është rreshti i dytë, pasi numërimi fillon me 0): lcd.setCursor (0, 1); // printoni numrin e sekonda që nga rivendosja: lcd.print (millis () / 1000);)

Rezulton diçka si kjo:

Nga rruga, ekrani që më erdhi në duart e mia nuk funksionon pa ndriçim. Dua të them, funksionon, por praktikisht asgjë nuk është e dukshme.

Shfaq kontaktet 1602A

#kontakt Emri Si të lidheni
1 VSS GND
2 VDD + 5 V
3 V0 Kontrasti - në kutinë e mesme të potenciometrit
4 RS (Regjistrohu i zgjedhur) D7 Arduino
5 R / W (Lexoni ose shkruani) GND
6 E (Aktivizo sinjalin) D6 Arduino
7-14 D0-D7 D0-D3 - nuk është i lidhur; D4-D7 - i lidhur me kunjat D5-D2 të Arduino
15 A Anoda e dritës së prapme, lidhuni me + 5V
16 K Katodë e dritës së prapme, e lidhur me tokëzimin përmes një rezistence 220Ω

Gjatë gjithë kohës që isha i magjepsur nga elektronika, pata mundësinë të përdor LCD nga disa prodhues - DataVision, WINSTAR, Uniworld Technology Corp... Ata ndryshonin në llojin e kontrolluesit, numrin e kunjave dhe gjatësinë e linjave, por në të njëjtën kohë të gjithë kishin të njëjtin diagram instalime elektrike, sistem komandimi dhe shërbyen nga i njëjti program nga mikrokontrolluesi. Prandaj, megjithëse tani po flasim për ekranin WH0802A nga WINSTAR, të gjitha sa vijon zbatohen për LCD me karaktere dhe kompani të tjera.

Pra, ne lidhim ekranin WH0802A-YGH-CT me mikrokontrolluesin

WH0802A - ekran me karaktere me dy rreshta për 8 vende me kontrolluesin e integruar KS0066.
Ne analizojmë qëllimin e kunjave të ekranit.

Disa ekrane kanë dy kunja shtesë - kunjat e dritës së prapme + LED dhe –LED. Për më tepër, nëse ka përfundime, kjo nuk do të thotë se ka edhe një dritë prapa. Si dhe anasjelltas. Ekrani im ka një dritë prapa, por nuk ka kunja kontrolli.

Si parazgjedhje, drita e prapme e ekranit WH0802A-YGH-CT është e fikur. Për ta ndezur atë, duhet të bëni disa manipulime të thjeshta, përkatësisht, të instaloni dy kërcyes dhe të lidhni rezistencën kufizuese të rrymës (shiko foton për RK, JF dhe RA, përkatësisht).

Shfaq diagramin e lidhjes

Ky është një diagram tipik i lidhjeve për LCD me karakter. Ne nuk do të përdorim qarkun e kontrollit të dritës së prapme të ekranit, por unë e vizatova atë për çdo rast.

Kodi i fillimit

Pasi të keni aplikuar fuqinë në qark, duhet të rrotulloni rregullatorin e kontrastit (rezistenca R1). Nëse vija e sipërme shfaqet në ekran, kjo do të thotë se është gjallë dhe është koha të filloni të shkruani kodin. Në fazën fillestare, ne do të përdorim një autobus 8-bit. Për të marrë rezultatet e para, duhet të shkruajmë dy funksione - një funksion për shkrimin e të dhënave dhe një funksion për shkrimin e komandave. Ato ndryshojnë vetëm në një rresht - kur shkruhen të dhënat, sinjali RS duhet të jetë 1, kur shkruhet komanda, RS duhet të jetë 0. Ne nuk do të përdorim ende funksionet e leximit, kështu që sinjali R / W do të jetë gjithmonë 0.

Cikli i shkrimit për një autobus 8-bit duket si ky:
1. Vendos RS (0 - komanda, 1 - të dhëna)
2. Nxjerr vlerën e bajtit të të dhënave në autobusin DB7 ... DB0
3. Set E = 1
4. Vonesa e programit 1
5. Set E = 0
6. Vonesa e programit 2

Kontrolluesi i karakterit LCD nuk është pafundësisht i shpejtë, kështu që vonesat e softuerit përdoren midis disa operacioneve. E para është e nevojshme për të mbajtur strobin e sinjalit për një kohë, e dyta, në mënyrë që kontrolluesi të ketë kohë për të shkruar të dhëna ose për të ekzekutuar një komandë. Vonesat jepen gjithmonë në përshkrimin për kontrolluesin e ekranit dhe duhet të ruani gjithmonë të paktën vlerën e tyre minimale, përndryshe kontrolluesi do të keqfunksionojë në mënyrë të pashmangshme.

Në përgjithësi, kontrolluesi i ekranit ka një të ashtuquajtur flamur të zënë - BF. Nëse flamuri është 1 - kontrolluesi është i zënë, nëse është 0 - është falas. Në vend të një vonese të dytë të softuerit, mund të lexoni flamurin e zënë dhe të kontrolloni kur kontrolluesi i ekranit është i lirë. Por duke qenë se duam të marrim shpejt rezultatet e para, do të merremi me flamurin e zënë më vonë.

// lidhni LCD me karakter me AVR
#përfshi
#përfshi

// porta në të cilën është lidhur autobusi i të dhënave LCD
#define PORT_DATA PORTD
#define PIN_DATA PIND
#define DDRX_DATA DDRD

// porta në të cilën janë lidhur kunjat e kontrollit
#define PORT_SIG PORTB
#define PIN_SIG PINB
#define DDRX_SIG DDRB

// numrat e pinit të mikrokontrolluesit
// me të cilat janë lidhur kunjat e kontrollit LCD
#përcaktoni RS 5
#përcaktoni RW 6
#define EN 7

// makro për të punuar me bit
#define ClearBit (reg, bit) reg & = (~ (1<<(bit)))
#define SetBit (reg, bit) reg | = (1<<(bit))

#define F_CPU 8000000
#define _delay_na (ne) __ciklet e_vonesës((F_CPU / 1000000) * (ne));
#define _delay_ms (ms) __ciklet e_vonesës((F_CPU / 1000) * (ms));

// Funksioni i regjistrimit të komandave
i pavlefshëm LcdWriteCom ( karakter i panënshkruar të dhëna)
{
ClearBit (PORT_SIG, RS); // vendosni RS në 0
PORT_DATA = të dhëna; // nxjerr të dhëna në autobus
SetBit (PORT_SIG, EN); // vendos E në 1
_vonesa_ne (2);
ClearBit (PORT_SIG, EN); // vendos E në 0
_vonesa_ne (40);

// funksioni i shkrimit të të dhënave

i pavlefshëm LcdWriteData ( karakter i panënshkruar të dhëna)
{
SetBit (PORT_SIG, RS); // vendosni RS në 1
PORT_DATA = të dhëna; // nxjerr të dhëna në autobus
SetBit (PORT_SIG, EN); // vendos E në 1
_vonesa_ne (2);

ClearBit (PORT_SIG, EN); // vendos E në 0

Vonesa_ne (40);
}

ndër kryesore ( i pavlefshëm )
{
derisa (1);
kthimi 0;
}

Këtu nuk ka vende të vështira, gjithçka duhet të jetë e qartë. Shkoni përpara.

Çdo ekran LCD duhet të inicializohet përpara përdorimit. Procesi i inicializimit zakonisht përshkruhet në fletën e të dhënave për kontrolluesin e ekranit. Por edhe nëse nuk ka informacion atje, sekuenca ka të ngjarë të jetë e tillë.

1. Shërbimi i ushqimit

2. Prisni> 40 ms

3. Paraqisni komandën Function set

DL- bit për vendosjen e gjerësisë së autobusit
Autobus 0 - 4 bit, autobus 1 - 8 bit

N- bit për vendosjen e numrit të linjave të ekranit
0 - modaliteti me një linjë, 1 - modaliteti me dy rreshta

F- pak për vendosjen e shkronjave
0 - formati 5 * 8, 1 - formati 5 * 11

* - nuk ka rëndësi se çfarë do të jetë në këto copa

4. Ne dërgojmë komandën Display ON / OFF

D- ekrani pak i ndezur/fikur
0 - shfaqja e fikur, 1 - shfaqja e ndezur

C- bit i ndezjes/fikjes së kursorit
0 - kursori fikur, 1 - kursori aktiv

B- bit i aktivizimit të dridhjes
0 - ndezur kursorin, 1 - kursori pulsues fikur

5. Dërgojmë komandën Clear Display


6. Prisni> 1,5 ms

7. Jepni komandën Entry Mode Set

Unë / D- renditja e rritjes / zvogëlimit të adresës DDRAM (shfaqja e të dhënave RAM)
0 - kursori lëviz në të majtë, adresa zvogëlohet me 1, 1 - kursori lëviz në të djathtë, adresa rritet me 1

SH- urdhri për të zhvendosur të gjithë ekranin
0 - pa zhvendosje, 1 - zhvendosja ndodh sipas sinjalit I / D - nëse është 0 - ekrani zhvendoset në të djathtë, 1 - ekrani zhvendoset në të majtë

Për shembullin tonë, funksioni i inicializimit do të duket kështu

Ekranet LCD të dimensionit 1602, të bazuara në kontrolluesin HD44780, janë një nga ekranet më të thjeshtë, më të përballueshëm dhe më të kërkuar për zhvillimin e pajisjeve të ndryshme elektronike. Mund të gjendet si në pajisjet e montuara në gju, ashtu edhe në pajisjet industriale, të tilla si, për shembull, makinat e kafesë. Mbi bazën e këtij ekrani, mblidhen modulet dhe mburojat më të njohura në temën Arduino, si dhe.

Në këtë artikull do t'ju tregojmë se si ta lidhni atë me Arduino dhe të shfaqni informacionin.

Komponentët e përdorur (blini në Kinë):

... Bordi i kontrollit

... Lidhja e telave

Këto ekrane janë të disponueshme në dy versione: ndriçim i pasmë i verdhë me shkronja të zeza ose, më shpesh, ndriçim blu me shkronja të bardha.

Dimensionet e ekraneve në kontrolluesin HD44780 mund të jenë të ndryshme, ato do të kontrollohen në të njëjtën mënyrë. Dimensionet më të zakonshme janë 16x02 (d.m.th. 16 karaktere në dy rreshta) ose 20x04. Rezolucioni i vetë simboleve është 5x8 piksele.

Shumica e ekraneve nuk kanë mbështetje për alfabetin cirilik, vetëm ekranet me shënimin CTK e kanë atë. Por ky problem mund të zgjidhet pjesërisht (vazhdon në artikull).

Kunjat e shfaqjes:

Ekrani ka një lidhës 16 pin për lidhje. Kunjat janë të shënuara në anën e pasme të tabelës.

1 (VSS) - Furnizimi me energji i kontrolluesit (-)
2 (VDD) - Furnizimi me energji i kontrolluesit (+)
3 (VO) - Kunja e kontrollit të kontrastit
4 (RS) - Regjistro zgjedhjen
5 (R / W) - Leximi / Shkrimi (modaliteti i shkrimit kur lidhet me tokën)
6 (E) - Aktivizo (porta në prishje)
7-10 (DB0-DB3) - Bit të ulëta të ndërfaqes 8-bit
11-14 (DB4-DB7) - Bitë të rendit të lartë të ndërfaqes
15 (A) - Furnizimi me dritë prapa anodës (+).
16 (K) - Furnizimi me dritë të pasme katodë (-).

Mënyra e vetë-testimit:

Përpara se të përpiqeni të lidhni dhe të nxirrni informacion, do të ishte mirë të njihni ekranin e punës apo jo. Për ta bërë këtë, duhet të aplikoni tension në vetë kontrolluesin ( VSS dhe VDD), aktivizoni dritën e prapme ( A dhe K) dhe gjithashtu rregulloni kontrastin.

Përdorni një potenciometër 10 kΩ për të rregulluar kontrastin. Çfarë forme do të jetë nuk ka rëndësi. + 5V dhe GND aplikohen në këmbët e jashtme, këmba qendrore është e lidhur me daljen VO

Pas aplikimit të energjisë në qark, është e nevojshme të arrihet kontrasti i saktë, nëse nuk është konfiguruar saktë, atëherë asgjë nuk do të shfaqet në ekran. Për të rregulluar kontrastin, luani me potenciometrin.

Me montimin e saktë të qarkut dhe vendosjen e saktë të kontrastit, vija e sipërme në ekran duhet të mbushet me drejtkëndësha.

Dalja e informacionit:

Ekrani përdor bibliotekën LiquidCrystal.h të integruar me Arduino IDE.

Funksionaliteti i bibliotekës

// Punoni me kursorin lcd.setCursor (0, 0); // Vendosni kursorin (numrin e qelizës, rreshtin) lcd.home (); // Vendos kursorin në zero (0, 0) LCD.kursori (); // Aktivizo dukshmërinë e kursorit (nënvizo) lcd.noCursor (); // Fshih dukshmërinë e kursorit (nënvizoni) LCD.blink (); // Aktivizo pulsimin e kursorit (kursori 5x8) LCD.noBlink (); // Çaktivizo kursorin pulsues (kursori 5x8) //Dalja e informacionit lcd.print ("faqe"); // Dalja e informacionit LCD.e qartë (); // Pastro ekranin, (fshi të gjitha të dhënat) vendos kursorin në zero lcd.rightToLeft (); // Shkrimi bëhet nga e djathta në të majtë lcd.leftToDjathtas (); // Shkrimi bëhet nga e majta në të djathtë lcd.scrollDisplayRight (); // Zhvendosni gjithçka në ekran një karakter në të djathtë lcd.scrollDisplayLeft (); // Zhvendosni gjithçka në ekran me një karakter majtas // Informacion i dobishëm për spiunët :) LCD.noDisplay (); // Informacioni në ekran bëhet i padukshëm, të dhënat nuk fshihen // nëse, në momentin kur ky funksion është aktiv, asgjë nuk shfaqet në ekran, atëherë LCD.ekran (); // Kur thërrisni funksionin e ekranit (), ekrani rikthen të gjithë informacionin që ishte

Vetë ekrani mund të funksionojë në dy mënyra:

Modaliteti 8-bit - për këtë përdoren si bitet më pak të rëndësishme ashtu edhe ato më domethënëse (BB0- DB7)

Modaliteti 4-bit - për këtë përdoren vetëm pjesët më pak të rëndësishme (BB4-DB7)

Përdorimi i modalitetit 8-bit në këtë ekran nuk këshillohet. Ajo kërkon 4 këmbë të tjera për të punuar, dhe praktikisht nuk ka asnjë fitim në shpejtësi. Shpejtësia e rifreskimit të këtij ekrani po arrin kufirin< 10раз в секунду.

Për të shfaqur tekstin, lidhni kunjat RS, E, DB4, DB5, DB6, DB7 me kunjat e kontrolluesit. Ato mund të lidhen me çdo kunj të Arduino, gjëja kryesore është të vendosni sekuencën e saktë në kod.

Shembull i kodit të programit:

// Testuar në Arduino IDE 1.0.5#përfshi // Shto bibliotekën e kërkuar LCD Crystal Liquid (7, 6, 5, 4, 3, 2); // (RS, E, DB4, DB5, DB6, DB7) i pavlefshëm konfigurimi() (lcd.fillim (16, 2); // Cakto dimensionin e ekranit lcd.setCursor (0, 0); // Vendosni kursorin në fillim të rreshtit 1 lcd.print ("Përshëndetje, botë!"); // Shfaq tekstin lcd.setCursor (0, 1); // Vendosni kursorin në fillim të rreshtit 2 lcd.print ("faqe"); // Shfaq tekstin) void lak (){ }

Krijimi i simboleve tuaja

Ne kuptuam daljen e tekstit, shkronjat e alfabetit anglez janë të qepura në kujtesën e kontrolluesit brenda ekranit dhe nuk ka probleme me to. Por çfarë të bëni nëse simboli i kërkuar nuk është në kujtesën e kontrolluesit?

udhëzime

Veprimi i diapazonit tejzanor HC-SR04 bazohet në parimin e ekolokimit. Ai lëshon impulse zanore në hapësirë ​​dhe merr një sinjal të reflektuar nga një pengesë. Distanca nga objekti përcaktohet nga koha e përhapjes së valës së zërit në pengesë dhe mbrapa.
Vala e zërit aktivizohet duke aplikuar një impuls pozitiv prej të paktën 10 mikrosekonda në këmbën TRIG të matësit të distancës. Sapo pulsi mbaron, distanca lëshon një shpërthim pulsesh zanore me një frekuencë prej 40 kHz në hapësirën përballë tij. Në të njëjtën kohë, lansohet algoritmi për përcaktimin e kohës së vonesës së sinjalit të reflektuar dhe një njësi logjike shfaqet në këmbën ECHO të diapazonit. Sapo sensori merr sinjalin e reflektuar, një zero logjike shfaqet në pinin ECHO. Kohëzgjatja e këtij sinjali ("vonesa e jehonës" në figurë) përcakton distancën nga objekti.
Gama e matjes së distancës së distancave HC-SR04 - deri në 4 metra me rezolucion prej 0,3 cm Këndi i vëzhgimit - 30 gradë, këndi efektiv - 15 gradë. Rryma e konsumit në modalitetin e gatishmërisë është 2 mA, gjatë funksionimit - 15 mA.

Furnizimi me energji i matësit tejzanor kryhet me një tension prej +5 V. Dy kunjat e tjera janë të lidhura me çdo portë dixhitale të Arduino, ne do të lidhemi me 11 dhe 12.

Tani le të shkruajmë një skicë që përcakton distancën nga pengesa dhe e nxjerr atë në portën serike. Së pari, ne vendosim numrat e kunjave TRIG dhe ECHO - këto janë kunjat 12 dhe 11. Pastaj e deklarojmë këmbëzën si dalje dhe jehonën si hyrje. Inicializoni portën serike në 9600 baud. Në çdo përsëritje të ciklit lak () ne lexojmë distancën dhe e nxjerrim atë në port.
Funksioni getEchoTiming () gjeneron një puls fillimi. Thjesht krijon një rrymë pulsi prej 10 mikrosekondash, e cila është një shkas për fillimin e emetimit të një pakete tingulli nga distanca në hapësirë. Pastaj ajo kujton kohën nga fillimi i transmetimit të valës së zërit deri në mbërritjen e jehonës.
Funksioni getDistance () llogarit distancën nga objekti. Nga kursi i fizikës shkollore, kujtojmë se distanca është e barabartë me shpejtësinë e shumëzuar me kohën: S = V * t. Shpejtësia e zërit në ajër është 340 m/s, koha në mikrosekonda që dimë është "duratuion". Për të marrë kohën në sekonda, pjesëtojeni me 1,000,000. Meqenëse zëri udhëton dyfishin e distancës - në objekt dhe mbrapa - ju duhet ta ndani distancën në gjysmë. Pra, rezulton se distanca me objektin S = 34000 cm / sek * kohëzgjatja / 1.000.000 sek / 2 = 1.7 cm / sek / 100, të cilën e kemi shkruar në skicë. Mikrokontrolluesi kryen shumëzimin më shpejt se pjesëtimi, kështu që unë zëvendësova "/ 100" me ekuivalentin "* 0.01".

Gjithashtu, shumë biblioteka janë shkruar për të punuar me një matës tejzanor. Për shembull, ky: http://robocraft.ru/files/sensors/Ultrasonic/HC-SR04/ultrasonic-HC-SR04.zip. Biblioteka është instaluar në një mënyrë standarde: shkarkoni, zbërthejeni në një drejtori bibliotekat i cili ndodhet në dosjen Arduino IDE. Pas kësaj, biblioteka mund të përdoret.
Pasi të kemi instaluar bibliotekën, le të shkruajmë një skicë të re. Rezultati i punës së tij është i njëjtë - në monitorin e portës serike distanca nga objekti shfaqet në centimetra. Nëse shkruani në skicë float dist_cm = ultratinguj.Ranging (INC);, atëherë distanca do të shfaqet në inç.

Pra, ne lidhëm diapazonin tejzanor HC-SR04 me Arduino dhe morëm të dhëna prej tij në dy mënyra të ndryshme: duke përdorur një bibliotekë të veçantë dhe pa.
Avantazhi i përdorimit të bibliotekës është se sasia e kodit zvogëlohet ndjeshëm dhe lexueshmëria e programit përmirësohet, nuk keni pse të thelloheni në ndërlikimet e pajisjes dhe mund ta përdorni menjëherë. Por ky është edhe disavantazhi: ju e kuptoni më pak mirë se si funksionon pajisja dhe çfarë procesesh ndodhin në të. Në çdo rast, cila metodë të përdorni varet nga ju.

Sot do të përpiqemi të përqendrohemi në daljen në ekranin e tekstit. Më i popullarizuari është çipi HD44780 (ose KS0066 i pajtueshëm me të). Le të rendisim të mirat dhe të këqijat e tyre:

Të mirat:

  1. Çmim të ulët.
  2. Lehtësia e programimit, kodi do të jetë i njëjtë për çdo model.
  3. Shumëllojshmëri modelesh - më të zakonshmet: 8x1, 16x2, 20x4. Mund të gjeni edhe modele mjaft ekzotike 40x4, d.m.th. katër rreshta me 40 karaktere secila.
  4. Aftësia për të lidhur ekrane të shumta me një Arduino.
  5. Aftësia për të përcaktuar simbolet tuaja.

Minuset:

  1. Jo të gjitha ekranet mbështesin karakteret ruse. Më shumë detaje duhet të gjenden në përshkrimin për një ekran specifik.
  2. Lidhja pa përdorur një autobus I2C kërkon 10-16 tela, gjë që është shumë e keqe. me I2C - 4 tela.

Bazuar në sa më sipër, unë do të konsideroj vetëm lidhjen e ekranit përmes I2C.

Le te perpiqemi.

Çfarë na duhet.

  1. Arduino (kam marrë modelin Nano)
  2. Shfaq në çipin HD44780 me ose pa modul I2C (atëherë do t'ju duhet një tabelë e veçantë LC1602 IIC) - në rastin tonë 16x2 pa modul I2C
  3. Rezistencë 10K (nëse nevojitet kontroll manual i dritës së prapme).
  4. Potenciometër (Nëse nevojitet kontroll manual i dritës së prapme).
  5. Bordi i zhvillimit të Breadboard.
  6. Biblioteka LiquidCrystal_I2C. http://www.ansealk.ru/files/LiquidCrystal_V1.2.1.zip

Digresion i vogël # 1: Si të dalloni ndryshimin midis një ekrani dhe një moduli I2C?

Në fakt është shumë e thjeshtë. Nëse, duke e kthyer ekranin, shohim një shirit lidhës të gjatë (zakonisht 16 copë), atëherë nuk ka asnjë modul I2C në ekran:

Dhe kështu duket ekrani me modulin I2C të instaluar tashmë:

Kunjat SCL, SDA, VCC, GND përdoren për të lidhur Arduino. Dy kontakte në të majtë - në foto ato janë të mbyllura me një kërcyes - nevojiten që drita e prapme të funksionojë.

Nëse moduli nuk është i lidhur, do të duhet ta bëni vetë. Gjëja kryesore që duhet t'i kushtoni vëmendje është të lidhni kontaktet në rendin e duhur. Si rregull, shënohen kunjat e para dhe 16. Ndonjëherë ndodh që 15-16 kontaktet përmes të cilave kontrollohet drita e prapme mund të vendosen përpara të parit (në këtë rast ato do të numërohen). Në vetë modulin, kunja e parë gjithashtu mund të përcaktohet jo nga një numër, por nga një katror rreth vetë kunjit.

Skema:

Le të bashkojmë skemën e mëposhtme:

Dëshiroj të tërheq vëmendjen tuaj në pikat e mëposhtme:

  1. Nëse hasni në një ekran me një modul I2C tashmë të bashkuar, atëherë telat e shënuar me gri nuk janë të nevojshme. Përndryshe, asgjë nuk ndryshon.
  2. Nëse nuk duam të ndryshojmë ndriçimin e ekranit, atëherë qarku do të thjeshtohet:

siç e vutë re, dy kunja në modulin I2C të etiketuar LED janë përgjegjëse për dritën e prapme të ekranit. Nëse nuk dëshironi të përdorni kontrollin e ndriçimit, thjesht mund t'i mbyllni ato.

Tani le të zbërthejmë kodin.

Pothuajse gjithçka duhet të jetë e njohur këtu. Në rreshtin 5, ne tregojmë adresën e pajisjes. Rreshtat 16 dhe 17 tregojnë numrin e karaktereve për rresht dhe numrin e rreshtave. Rreshtat 20-22 - Ne krijojmë një objekt për të punuar me ekranin dhe përshkruajmë parametrin për të punuar me të.

Digresion i vogël # 2: Si të gjeni adresën e një pajisjeje I2C?

Në pjesën më të madhe, adresa mund të gjendet në fletën e të dhënave për mikroqarkun mbi të cilin është ndërtuar pajisja I2C. Nëse kjo nuk është e mundur, këtu është një lidhje me arkivin me skicën dhe diagramet - http://www.ansealk.ru/files/Arduino_lcd_i2c.zip e cila përcakton adresat e të gjitha pajisjeve të lidhura përmes autobusit I2C. Thjesht duhet të lidhni pajisjen me Arduino, të ngarkoni skicën, të hapni tastierën dhe të shihni adresën.

Këtu shohim një funksion që, në fakt, do të merret me ekranin. Parimi i tërheqjes është diçka si ky:

Vendosni pozicionin e fillimit të daljes duke përdorur funksionin setCursor ().

Printojmë një varg me funksionin print ().

Pas kësaj, funksioni tjetër i printimit () do të nisë daljen nga pozicioni tjetër pas së cilës mbaroi hyrja e mëparshme. Do të doja gjithashtu të tërhiqja vëmendjen tuaj për faktin se, ndryshe nga dalja në tastierë, funksioni println () nuk përdoret këtu për të përfunduar furnizimin e daljes dhe linjës.

Kështu, në ekranin e rreshtit të parë do të shfaqet mbishkrimi "Test LCD1602", dhe i dyti do të tregojë rezolucionin e ekranit dhe një numërues që tregon se sa cikle ka funksionuar skica jonë.

Por, nëse duhet të shfaqim shumë vlera të ndryshueshme në ekran, kjo metodë nuk është plotësisht e përshtatshme. Fakti është se procedura e shfaqjes konsumon shumë energji dhe e ngadaltë, dhe ne e bëjmë daljen në këtë funksion deri në 7 herë. Do të jetë shumë më e lehtë të para-formoni vargun paraprakisht, dhe më pas ta nxirrni atë në tërësi. Funksioni sprintf () i hyrjes së formatuar do të na ndihmojë me këtë.

Digresion i vogël # 3: Funksioni i hyrjes i formatuar sprintf ().

Në gjuhën C, ekzistojnë disa funksione shumë të përshtatshme për printimin e vargjeve - ato quhen funksione të daljes së formatuar - printf (nga fjalët print dhe format). Në rastin tonë të veçantë, ne jemi të interesuar për funksionin sprintf, i cili nuk shfaq asgjë në ekran, por gjeneron një varg për shfaqjen e mëvonshme. Duket diçka si kjo:

sprintf (str, "String% d për dalje", i);

Funksioni gjeneron një varg (të shënuar me blu) duke përdorur një shabllon (në të verdhë), në të cilin zëvendësohen vlerat e variablave (në të gjelbër). Rezultati që rezulton do të shkruhet në një variabël vargu (me të kuqe).

Mund të ketë disa shabllone dhe variabla. Në këtë rast, variablat shkruhen të ndara me presje. Gjëja kryesore është të siguroheni që numri i shablloneve për rresht të përputhet me numrin e variablave. Variablat për shabllonet merren në mënyrë sekuenciale, d.m.th. shablloni i parë zëvendësohet me vlerën e ndryshores së parë, në të dytin - ndryshorja e dytë, e kështu me radhë.

Cilat janë shabllonet? Çdo model fillon me një karakter "%" dhe përfundon me një nga dhjetë karakteret (në rastin e Arduino - shtatë). Midis tyre mund të ketë shumë informacione se si të shfaqet vlera, ose asgjë tjetër.

Le të hedhim një vështrim se çfarë mund të jetë në shabllon. Në përgjithësi, shablloni duket si ky:

% [flamur] [gjerësi] [. saktësi] lloj

Kllapat katrore tregojnë se elementi i mbyllur në to mund të mungojë. Shiriti vertikal tregon se një nga vlerat e specifikuara duhet të zgjidhet në këtë fushë (në rastin tonë, një nga shkronjat H, I ose L).

Le të merremi së pari me elementin e kërkuar të shabllonit - llojin. Ai tregon se çfarë lloj variabli do të shfaqet dhe mund të marrë një nga vlerat e mëposhtme:

Simboli Kuptimi
c Një personazh
s Varg karakteresh
d, i Dhjetor me numër të plotë të nënshkruar
o Numri i plotë oktal
u Dhjetor me numër të plotë të panënshkruar
x, X Heks i plotë
fq Treguesi (heksadecimal)
f Numri thyesor në format fiks
e, E Numri thyesor në format shkencor
g, G Numri thyesor në format shkencor ose fiks

Ato lloje që nuk janë të zbatueshme kur punoni me Arduino janë shënuar me gri. Kështu, "% s" duhet të specifikohet për të nxjerrë një varg dhe "% d" për të nxjerrë një numër të plotë.

Tjetra, le të shohim kutinë e gjerësisë. Numri në të tregon gjerësinë minimale të fushës në të cilën do të shfaqet shablloni. Nëse madhësia e vlerës në ndryshore është më e vogël - fusha do të përfundojë me hapësira, nëse është më e madhe - rekordi do të shkojë përtej fushës. Kështu, modeli "% 6d" për 385 do të nxjerrë 385 (vini re tre hapësirat përpara numrit).

Specifikimi i saktësisë fillon gjithmonë me një pikë dhe numri i mëposhtëm tregon veprime të ndryshme në varësi të llojit të vlerës. Për llojet "d, o, u, x" do të tregojë numrin minimal të karaktereve që duhet të shfaqen gjatë përpunimit. Për llojin "f" - numri i numrave dhjetorë. Për llojin "s" - numri maksimal i karaktereve të vargut që do të printohen. Për shembull, "% 6.1f" për 34.2345 do të nxjerrë "34.1" (vini re se një pikë konsiderohet gjithashtu një shenjë dhe do të ketë dy hapësira përpara numrit). Ose modeli "% .3s" nga vargu "precision" do të nxjerrë vetëm tre karakteret e para - "exact".

Flamuri ju lejon të ndryshoni shfaqjen e vlerës së shfaqur:

Mund të lexoni më shumë rreth modeleve të funksioneve printf në internet. Këtu kam dhënë një përmbledhje të shkurtër të veçorive më të përdorura.

Kështu, funksioni ynë i daljes, i rishkruar për të përdorur daljen e formatuar, do të duket kështu:

Vini re se në rreshtat 33 dhe 37 formojmë të gjithë rreshtin për dalje, dhe në rreshtat 34 dhe 38 i nxjerrim ato.

Më në fund, funksionet tona të preferuara të konfigurimit dhe ciklit.

Në rreshtin 47 vendosim rezolucionin e ekranit, në rreshtin 48 ndezim dritën e prapme (shkëlqimi i së cilës mund të rregullohet me një potenciometër). Në rreshtin 49, vendosni numëruesin e ciklit në zero. Ne do ta rrisim atë me një në rreshtin e 37-të gjatë daljes (kujtoni numërimin ++ ndërtimin?). Më në fund, në linjën 56, ne e quajmë funksionin e ekranit që diskutuam më parë. Gjithçka.

Çfarë mund të ndryshohet apo përmirësohet?

Për shembull, mund të bëni kontroll automatik të dritës së prapme në varësi të ndriçimit duke përdorur një fotorezistencë ose një sensor drite nga stacioni i motit të diskutuar në disa artikuj më parë. Le të themi në ndriçim të fortë - rrisni ndriçimin e dritës së prapme, dhe gjatë natës - zvogëloni. Ose vidhni sensorin e lëvizjes dhe ndizni dritën e prapme kur një objekt shfaqet përpara ekranit, ose ... Në përgjithësi, mendoj se e keni kuptuar tashmë se nëse dëshironi, zëvendësoni një ose më shumë komponentë dhe shkruani një pjesë kodi mund të përmirësojë ndjeshëm përdorshmërinë e ekranit. Ne gjithashtu mund të përdorim simbole të dizajnuara me dorë për të shfaqur në ekran.

Unë nuk i konsideroj të gjitha këto pyetje këtu, pasi ato janë përtej qëllimit të rishikimit për fillestarët.

Dhe për sot kam gjithçka.

Arduino. Ne lidhim ekranin LCD

26 vlerësime, Vlerësimi mesatar: 5 nga 5

Artikujt kryesorë të lidhur