Բովանդակություն:

Funամանց OLED էկրանով և Arduino- ով. 12 քայլ (նկարներով)
Funամանց OLED էկրանով և Arduino- ով. 12 քայլ (նկարներով)

Video: Funամանց OLED էկրանով և Arduino- ով. 12 քայլ (նկարներով)

Video: Funամանց OLED էկրանով և Arduino- ով. 12 քայլ (նկարներով)
Video: Ռադիո - Սերիա 4 / Spearfishing dispot Rock Hole and Spearo Friends Funամանց 2024, Հուլիսի
Anonim
Funամանց OLED էկրանով և Arduino- ով
Funամանց OLED էկրանով և Arduino- ով

Վստահ եմ, որ դուք հաստատ լսել եք OLED ցուցադրման տեխնոլոգիայի մասին: Այն համեմատաբար նոր է և առաջարկում է ավելի լավ որակ, քան հին LCD տեխնոլոգիան: Այս ձեռնարկում մենք ցանկանում ենք վերանայել այն քայլերը, որոնք պահանջվում են շուկայում առկա ամենատարածված մեկ գունավոր OLED ցուցադրման մոդուլներից տվյալների ցուցադրման համար: Ես կփորձեմ բացատրել Adafruit- ի համապատասխան գրադարանի կողմից տրամադրված գործառույթները `այս մոդուլի տվյալները ցուցադրելու համար:

Քայլ 1: Ի՞նչ OLED մոդուլներ ենք պատրաստվում օգտագործել:

Ի՞նչ OLED մոդուլներ ենք պատրաստվում օգտագործել
Ի՞նչ OLED մոդուլներ ենք պատրաստվում օգտագործել
Ի՞նչ OLED մոդուլներ ենք պատրաստվում օգտագործել
Ի՞նչ OLED մոդուլներ ենք պատրաստվում օգտագործել
Ինչ OLED մոդուլներ ենք պատրաստվում օգտագործել
Ինչ OLED մոդուլներ ենք պատրաստվում օգտագործել

OLED մոդուլները հասանելի են չափերի և հնարավորությունների լայն տեսականիով: Այն, ինչ մենք կօգտագործենք այս ձեռնարկում, միագույն 128x64 OLED մոդուլ է: Այս տեսակի մոդուլը հասանելի է հետևյալ չափսերով (այնպես, ինչպես տեսնում եք նկարներում).

  • 128x64
  • 128x32
  • 96x16
  • 64x48
  • 64x32

Քանի որ այս բոլոր մոդուլներն աջակցում են I2C արձանագրությանը ՝ որպես հաղորդակցության միջոց, բոլորի ծածկագիրը և էլեկտրագծերը ճշգրիտ նույնն են: Միակ տարբերությունն այն է, որ դուք պետք է հաշվի առնեք ձեր ծածկագրի ցուցադրման չափը, որպեսզի բովանդակությունը, որը պատրաստվում եք ցուցադրել, ճիշտ տեղավորվի դրա վրա:

Քայլ 2. I2C- ը համառոտ

I2C ՝ ընդհանրապես
I2C ՝ ընդհանրապես

Ինտեգրացված սխեմա (IIC), որը սովորաբար կոչվում է I2C (I քառակուսի C), որը մշակվել է Philips- ի կողմից 80-ականներին `որպես տվյալների փոխանակման ավտոբուս, որն օգտագործվում է տվյալների փոխանցման համար սարքի կենտրոնական մշակման միավորի (CPU) կամ միկրոկոնտրոլերային միավորի (MCU) միջև և ծայրամասային չիպսեր: Այն հիմնականում ուղղված էր հեռուստատեսային ծրագրերի համար: Իր պարզության պատճառով այն այնքան հայտնի դարձավ, որ որոշ ժամանակ անց այն դարձավ CPU- ների և MCU- ների և ծայրամասային սարքերի տվյալների փոխանցման հիմնական մեխանիզմներից մեկը, որոնք նույն PCB- ի տախտակի անբաժանելի մասն են և միացված են դրան մետաղալարով (օրինակ ՝ տվիչներ, ցուցադրման մոդուլներ և այլն):

I2C- ն բաղկացած է երկու մետաղալարից պատրաստված հաղորդակցության ավտոբուսից, որն ապահովում է տվյալների երկկողմանի փոխանցում վարպետի և մի քանի ստրուկ սարքերի միջև: Սովորաբար գլխավոր հանգույցը պատասխանատու է ավտոբուսը վերահսկելու համար, որն իրականում կատարվում է սերիական ժամացույցի գծի (SCL) համաժամացման ազդանշանի ստեղծման միջոցով: Դա ազդանշան է, որը փոխանցման ընթացքում անընդհատ կուղարկվի վարպետի կողմից, և ավտոբուսին միացած մյուս բոլոր հանգույցները կօգտագործեն այն `իրենց հաղորդակցությունը համաժամեցնելու և ավտոբուսի արագությունը հայտնաբերելու համար: Տվյալները փոխանցվում են վարպետի և ստրուկի միջև ՝ սերիական տվյալների (SDA) գծի միջոցով: Փոխանցման արագությունը կարող է լինել մինչև 3.4 Մբիթ / վրկ: Բոլոր սարքերը, որոնք ցանկանում են տվյալներ փոխանցել I2C- ի միջոցով, պետք է ունենան յուրահատուկ հասցե և կարող են գործել որպես հաղորդիչ կամ ընդունիչ `կախված սարքի գործառույթից: Օրինակ, OLED ցուցադրման մոդուլն ընդունիչ է, որն ընդունում է որոշ տվյալներ և ցուցադրում դրանք, մինչդեռ ջերմաստիճանի տվիչը հաղորդիչ է, որը ջերմաստիճանը փոխանցում է I2C ավտոբուսի միջոցով: Սովորաբար հիմնական սարքը այն սարքն է, որը նախաձեռնում է տվյալների փոխանցումը ավտոբուսում և առաջացնում ժամացույցի ազդանշաններ, որոնք թույլ են տալիս փոխանցումը: Այդ փոխանցման ընթացքում այս տիրոջ կողմից հասցեագրված ցանկացած սարք համարվում է ստրուկ և կարդում է այդ տվյալները:

Երբ հանգույցը ցանկանում է ինչ -որ տվյալներ ուղարկել, տվյալների առաջին բայթը պետք է լինի ստացողի հասցեն, որից հետո գալիս են իրական տվյալները: Սա նշանակում է, որ I2C (օրինակ ՝ I2C OLED ցուցադրման մոդուլ) տվյալներ ելքային սարքին ուղարկելու համար մենք նախ պետք է գտնենք դրա I2C հասցեն, և սա այն է, ինչ մենք առաջինը կանենք հաջորդ քայլերում:

Եթե ձեզ հետաքրքրում է ավելին իմանալ I2C ավտոբուսի մանրամասների և տեսությունների մասին, կարող եք օգտագործել հետևյալ հղումները.

www.i2c-bus.org

learn.sparkfun.com/tutorials/i2c

Քայլ 3. Պահանջվող մոդուլներ և բաղադրիչներ

Պահանջվող մոդուլներ և բաղադրիչներ
Պահանջվող մոդուլներ և բաղադրիչներ
Պահանջվող մոդուլներ և բաղադրիչներ
Պահանջվող մոդուլներ և բաղադրիչներ
Պահանջվող մոդուլներ և բաղադրիչներ
Պահանջվող մոդուլներ և բաղադրիչներ

Այստեղ դուք կարող եք գտնել այն բաղադրիչների ցանկը, որոնք ձեզ անհրաժեշտ են այս ձեռնարկը լրացնելու համար.

eBay հղումներ

  • 1 x Arduino Uno ՝
  • 1 x OLED մոդուլ 128x64 ՝
  • 4 x Dupont մալուխ ՝
  • 1 x մինի առանց զոդման տախտակ ՝

Amazon.com- ի հղումներ

  • 1 x Arduino Uno ՝
  • 1 x OLED մոդուլ 128x64 ՝
  • 4 x Dupont մալուխ ՝
  • 1 x մինի առանց զոդման տախտակ ՝

Քայլ 4. OLED ցուցադրման մոդուլի միացում Arduino- ին

OLED ցուցադրման մոդուլի միացում Arduino- ին
OLED ցուցադրման մոդուլի միացում Arduino- ին
OLED ցուցադրման մոդուլի միացում Arduino- ին
OLED ցուցադրման մոդուլի միացում Arduino- ին
OLED ցուցադրման մոդուլի միացում Arduino- ին
OLED ցուցադրման մոդուլի միացում Arduino- ին
OLED ցուցադրման մոդուլի միացում Arduino- ին
OLED ցուցադրման մոդուլի միացում Arduino- ին

I2C միացված սարքերի վերաբերյալ կարևոր նշում է այն, որ դրանք Arduino- ին միացնելու եղանակը միևնույնն է: Դա պայմանավորված է նրանով, որ Arduino- ն իր I2C հաղորդակցությունն իրականացնում է միայն հատուկ կապում: Այս ձեռնարկում ես օգտագործում եմ Arduino Uno- ն: Arduino Uno- ն օգտագործում է A5 կապը որպես SCK և A4 որպես SDA: Այսպիսով, մենք կարող ենք OLED ցուցադրման մոդուլը միացնել Arduino Uno- ին, ինչպես ցույց է տրված սխեմատիկ տեսքով: Ինչպես կարող եք նկատել իմ OLED ցուցադրման մոդուլից վերցված նկարի վրա, VCC- ի և GND- ի միակցիչը տարբերվում է սխեմատիկ տեսքից: Հիշեք, որ ստուգեք ձեր մոդուլների կապերի պիտակները `համոզվելու համար, որ դրանք ճիշտ եք միացնում:

Մեզ պետք է ընդամենը 4 կապում, որոնք պետք է միացված լինեն ստորև.

Arduino VCC -> OLED մոդուլ VCC

Arduino GND -> OLED մոդուլ GND

Arduino 4 -> OLED մոդուլ SDA

Arduino 5 -> OLED մոդուլ SCK

Քայլ 5: Գտեք ցուցադրման մոդուլի հասցեն

Գտնելով ցուցադրման մոդուլի հասցեն
Գտնելով ցուցադրման մոդուլի հասցեն

Որպես I2C միացված սարքին միանալու առաջին քայլ, դուք պետք է ունենաք մոդուլի հասցեն: Դա անելու համար մոդուլը ձեր Arduino- ին միացնելուց հետո դուք պարզապես պետք է վերբեռնեք կցված ծածկագիրը ձեր Arduino- ում: Այս ծածկագիրը ներառում է Wire գրադարանը, որը Arduino IDE- ի հետ ներառված գրադարան է, որը վարում է I2C հաղորդակցությունը: Այն փորձում է սկանավորել միացված I2C սարքերը և դրանց հասցեն սերիական պորտի միջոցով ուղարկում ձեր համակարգիչ: Այսպիսով, դուք կարող եք մուտք գործել դրա ելք Arduino IDE- ի Serial Monitor գործիքի միջոցով: Բնօրինակի տարբերակը հասանելի է Arduino Playground- ում): Նաև այն կարող եք ավելի ընթեռնելի դիտել իմ առցանց Arduino խմբագրիչում: Մի ակնկալեք, որ այս ծածկագրի գործարկման ընթացքում որևէ բան կցուցադրվի էկրանին:

Ինչպես տեսնում եք նկարի վրա, իմ մոդուլը կապված է 0x3C հասցեով: Սովորաբար որոշակի արտադրանքի գծի բոլոր սարքերը (օրինակ ՝ 128x64 OLED մոդուլները) ունեն նույն հասցեն:

I2C սարքերի հասցեատերերը սահմանափակված են 1 -ից 126 -ով: Այս ծածկագիրը պարզապես փորձում է կարգով միանալ յուրաքանչյուր սարքի (առանց որևէ տվյալ փոխանցելու), այնուհետև ստուգել ՝ արդյոք մատնանշված գրադարանի կողմից որևէ սխալ հաղորդվե՞լ է տրամադրված հասցեին: Եթե սխալ չկա, ապա տպում է հասցեն ՝ որպես միացման հասանելի մոդուլ: Նաև հարկ է նշել, որ առաջին 15 հասցեները վերապահված են, այնպես որ այն ցատկում է դրանց վրա և պարզապես տպում է այս միջակայքից վերը նշվածները: Հիշեք, որ այս I2C մոդուլների հասցեն կոշտ կոդավորված է սարքի վրա և այն հնարավոր չէ փոխել: Այսպիսով, լավ գաղափար կլիներ այն գրել ինչ -որ տեղ կամ մոդուլին պիտակ տեղադրել, երբ այն նորից տեղադրեք ձեր լաբորատորիայի դարակում, որպեսզի հաջորդ անգամ սկաների ծածկագիրը գործարկելու կարիք չլինի: Այնուամենայնիվ, դա բարդ ընթացակարգ չէ;)

Քայլ 6. Գրադարանների տեղադրում, որոնք անհրաժեշտ են OLED մոդուլում տվյալները ցուցադրելու համար

OLED մոդուլում տվյալների ցուցադրման համար անհրաժեշտ գրադարանների տեղադրում
OLED մոդուլում տվյալների ցուցադրման համար անհրաժեշտ գրադարանների տեղադրում
OLED մոդուլում տվյալների ցուցադրման համար անհրաժեշտ գրադարանների տեղադրում
OLED մոդուլում տվյալների ցուցադրման համար անհրաժեշտ գրադարանների տեղադրում

Wire գրադարանը կարող է կարգավորել ցածր մակարդակի հաղորդակցություն I2C սարքերի հետ: Երբ ցանկանում եք միանալ որևէ սարքի ՝ տվյալներից/տվյալները կարդալու/գրելու համար, սովորաբար դուք կօգտագործեք այն գրադարանը, որը տրամադրվել է այն ընկերության կողմից, որն ի սկզբանե կառուցել է այդ մոդուլը: Այս գրադարանը վարում է I2C հաղորդակցության բոլոր մանրամասները տվյալ մոդուլով և թույլ է տալիս ավելի շատ կենտրոնանալ մեր բիզնեսի վրա, որն այս դեպքում տվյալները ցուցադրում է մեր ուզած ձևով:

Adafruit ընկերությունը, որը արտադրում է նման ցուցադրման մոդուլների օրիգինալ տարբերակը, տրամադրում է Adafruit SSD1306 անունով գրադարաններ ՝ այդ միագույն էկրանների տվյալները ցուցադրելու համար: Այսպիսով, նախքան կոդավորումը սկսելը, մենք պետք է այս գրադարանը տեղադրենք Գրադարանի մենեջերի միջոցով (հասանելի է Sketch> Include Library> Manage Libraries … menu) միջոցով Arduino IDE- ում: Կա նաև մեկ այլ գրադարան, որը կոչվում է Adafruit GFX Library, որը զբաղվում է ավելի ցածր մակարդակի գրաֆիկական նյութերով և ներքին օգտագործման համար օգտագործվում է Adafruit SSD1306- ի կողմից: Անհրաժեշտ է, որ դրանք երկուսն էլ տեղադրված լինեն ձեր Arduino IDE- ում, ինչպես տեսնում եք նկարներում:

Քայլ 7: theուցադրման մոդուլի նախաստորագրում

Theուցադրման մոդուլի նախաստորագրում
Theուցադրման մոդուլի նախաստորագրում

Displayուցադրվող մոդուլը նկարելը փաթաթված է Adafruit_SSD1306 անունով դասի մեջ: Այս դասի սահմանումը Ադաֆրուտի գրադարանի վրա է, ուստի մենք նախ պետք է ներառենք այդ գրադարանը: Հետո մենք պետք է նախ նշենք այս դասի օրինակ: Այս դասի կոնստրուկտորը վերցնում է նավահանգստի համարը, որի վրա կարող է վերականգնվել ցուցադրումը, որը 4 -րդ կապն է (միացված է SCK- ին): Կոդի այս հատվածը պետք է տեղադրվի ֆայլի սկզբում (setup () և loop () գործառույթներից դուրս):

#ներառում

Adafruit_SSD1306 էկրան (4);

Այժմ setup () ֆունկցիայի ներսում մենք պետք է կանչենք ցուցադրման օբյեկտի մեկնարկի գործառույթը ՝ փոխանցելով մեր I2C հասցեն ստորև (SSD1306_SWITCHCAPVCC- ը գրադարանին էներգիայի աղբյուրի տեսակը հաստատող հաստատուն արժեք է).

void setup () {

display.begin (SSD1306_SWITCHCAPVCC, 0x3C); display.display (); } void loop () {} // loop- ն առայժմ կարող է դատարկ լինել

Այժմ ցուցադրման օբյեկտը պատրաստ է, և մենք կարող ենք կանչել դրա գործառույթները (օրինակ ՝ display.write (), display.drawLine և այլն): Կարևոր նշումն այն է, որ երբ մենք ինչ -որ բան ենք նկարում ՝ մեր ցուցադրման օբյեկտին կանչելով, մենք պետք է կանչենք display.display () գործառույթը, որպեսզի իրական նկարչությունը կատարվի ապարատային մակարդակում: Դա հիմնականում պայմանավորված է այն հանգամանքով, որ գծագրման գործառույթները, որոնք մենք կոչում ենք, պարզապես թարմացնում են ցուցադրման «հիշողության մեջ» ներկայացումը `կատարման պատճառներով: Այն իրականում պահում է հիշողության փոփոխությունները: Այսպիսով, մենք միշտ պետք է հիշենք, որ էկրանին () գործառույթը կանչենք, երբ էկրանին ինչ -որ բան նկարենք:

ցուցադրել. գրել (…); // անընդհատ թարմացվում է հիշողության մեջ

display.drawLine (…); // անընդհատ թարմացվում է հիշողության մեջ: display.display (); // ողողում է ցուցադրման սարքավորման բոլոր փոփոխությունները

Եթե փորձեք վերբեռնել ձեր ծածկագիրը այս քայլում, կնկատեք, որ Adafruit Industries- ի պատկերանշանը կցուցադրվի: Դուք կարող եք մտածել, թե ով է խնդրել դա նկարել: Իրականում սա այն է, ինչ անում է Ադաֆրուտի գրադարանը: Այն նախաստորագրում է մոդուլի հիշողությունը (ցուցադրման սարքավորումների հիշողության մեջ ներկայացումը) այս ընկերության լոգոյով: Եթե դուք չեք ցանկանում դա տեսնել սկզբնավորման ընթացքում, կարող եք փորձել կանչել display.clearDisplay () գործառույթը ՝ նախքան display.display () կարգաբերման գործառույթում զանգելը: Այս գործառույթը, ինչպես ցույց է տալիս անունը, ամբողջովին մաքրում է էկրանը:

#ներառում

Adafruit_SSD1306 էկրան (4); void setup () {display.begin (SSD1306_SWITCHCAPVCC, 0x3C); display.clearDisplay (); display.display (); } void loop () {}

Adafruit_SSD1306 գրադարանի փաստաթղթերի հիման վրա կարող եք օգտագործել այս դասի կողմից տրամադրված տարբեր գործառույթներ `ցուցադրման վրա պատկերելու կամ դրա վրա պիքսելները ուղղակիորեն շահարկելու համար: Հաջորդ բաժիններում մենք կփորձենք օրինակ ներկայացնել դրանցից յուրաքանչյուրի համար, որպեսզի կարողանաք պատկերացում կազմել դրա աշխատանքի մասին: Այս օրինակներից շատերը կցուցադրեն ընդամենը մի պարզ ստատիկ բովանդակություն, այնպես որ մենք կարող ենք դրանք պարզապես տեղադրել մեր setup () գործառույթի ներսում (սկզբնավորման կոդից հետո): Դրանով այն գործարկվելու է միայն մեկ անգամ և մնում է այնտեղ:

Քայլ 8: Displayուցադրել պարզ տեքստ

Displayուցադրել պարզ տեքստ
Displayուցադրել պարզ տեքստ
Displayուցադրել պարզ տեքստ
Displayուցադրել պարզ տեքստ
Displayուցադրել պարզ տեքստ
Displayուցադրել պարզ տեքստ

Տեքստը ցուցադրելու համար մենք կարող ենք օգտագործել գրադարանի պարզ display.println () գործառույթը: Այն տեքստը ընդունում է որպես տող և փորձում է ցուցադրել այն: Կարևոր է իմանալ, որ մենք պետք է գրադարանին ասենք, թե ցուցադրության որ հատվածում ենք մենք ներկայացնում տեքստը: Pixուցադրման յուրաքանչյուր պիքսել ունի կոորդինատ, որը նշվում է X և Y. X- ով ավելանում է ձախից աջ, իսկ Y- ը ՝ վերևից ներքև: Էկրանի վերին ձախ անկյունն է (X = 0, Y = 0), իսկ ներքևի աջ անկյունը `(X = 127, Y = 63): Առաջին նկարի վրա նշեցի անկյունների կոորդինատները: Մենք կարող ենք օգտագործել display.setCursor () գործառույթը `նշելու, թե էկրանին որտեղ ենք ցուցադրելու տեքստը:

Տեքստի մեկ այլ հատկություն է դրա գույնը: Մենք կարող ենք սահմանել գույնը ՝ օգտագործելով display.setTextColor (), ինչպես ցույց է տրված հետևյալ նմուշում:

display.clearDisplay ();

display.setTextColor (ՍՊԻՏԱԿ); display.setCursor (35, 30); display.println («Բարև աշխարհ»); display.display ();

Մենք կարող ենք նաև օգտագործել display.write () գործառույթը ՝ մեկ նիշ ցուցադրելու համար: Այն ընդունում է բնույթի ծածկագիր ՝ որպես uint8_t տիպ և տողում ցուցադրում է այդ կոդի համապատասխան բնույթը: Որպես օրինակ, եթե ցանկանում ենք ցուցադրել միևնույն տողը ՝ օգտագործելով այս գործառույթը, կարող ենք օգտագործել հետևյալ հատվածը.

display.clearDisplay ();

display.setTextColor (ՍՊԻՏԱԿ); display.setCursor (35, 30); ցուցադրել. գրել (72); ցուցադրել. գրել (101); ցուցադրել. գրել (108); ցուցադրել. գրել (108); ցուցադրել. գրել (111); ցուցադրել. գրել (32); ցուցադրել. գրել (87); ցուցադրել. գրել (111); ցուցադրել. գրել (114); ցուցադրել. գրել (108); ցուցադրել. գրել (100); ցուցադրել. գրել (33); display.display ();

Հնարավոր է նաև նկարել սև գույնով տեքստեր ՝ սպիտակ ֆոնով: Դա անելու համար դուք պետք է զանգահարեք display.setTextColor գործառույթը, ինչպես ստորև.

display.clearDisplay ();

// Գույնը սահմանում է սև ՝ սպիտակ ֆոնի ցուցադրմամբ: setTextColor (ՍԵՎ, Սպիտակ); display.setCursor (25, 30); display.println («Շրջված տեքստ»); display.display ();

Դուք նաև հնարավորություն ունեք տեքստի չափը սահմանել ՝ օգտագործելով display.setTextSize () գործառույթը: Այն որպես ամբողջություն ընդունում է մի ամբողջ թիվ: Որքան մեծ լինի թիվը, այնքան մեծ կլինի տեքստը: Ամենափոքր չափը 1 է, որը տեքստերի կանխադրված չափն է: Հետևյալ ծածկագիրը փորձում է գրել «Ա» տառը 6 տարբեր չափսերով.

display.clearDisplay ();

display.setTextColor (ՍՊԻՏԱԿ); display.setCursor (0, 0); display.setTextSize (1); display.print («A»); display.setTextSize (2); display.print («A»); display.setTextSize (3); display.print («A»); display.setTextSize (4); display.print («A»); display.setTextSize (5); display.print («A»); display.setTextSize (6); display.print («A»); display.display ();

Քայլ 9: Հիմնական ձևերի նկարում

Հիմնական ձևերի նկարում
Հիմնական ձևերի նկարում
Հիմնական ձևերի նկարում
Հիմնական ձևերի նկարում
Հիմնական ձևերի նկարում
Հիմնական ձևերի նկարում

Ուղղանկյուն, շրջան, եռանկյուն, ուղիղ կամ կետ նկարելը շատ հեշտ է, և յուրաքանչյուրի համար կա հատուկ գործառույթ:

Գծագրական գիծ

Գիծ գծելու համար կարող եք զանգահարել display.drawLine (startX, startY, endX, endY, գույն): Օրինակ ՝ հետևյալ ծածկագիրը էկրանի վրա գծեր է գծում այնպես, որ դրանք մեծ X են ձևավորում.

display.clearDisplay ();

display.drawLine (0, 0, display.width () - 1, display.height () - 1, WHITE); display.drawLine (display.width () - 1, 0, 0, display.height () - 1, WHITE); display.display ();

Դուք կարող եք մուտք գործել ցուցադրման լայնություն և բարձրություն ՝ օգտագործելով display.width () և display.height () գործառույթները: Դրանով ձեր կոդը անկախ կլինի էկրանի չափից:

Ուղղանկյուն նկարելը

Ուղղանկյուն նկարելու գործառույթը ցուցադրում է display.drawRect (upperLeftX, upperLeftY, լայնություն, բարձրություն, գույն): Ահա այն կոդը, որը երեք ուղղանկյուն է գծում որոշ պատահական վայրերի վրա.

display.clearDisplay ();

display.drawRect (100, 10, 20, 20, ՍՊԻՏԱԿ); display.fillRect (10, 10, 45, 15, ՍՊԻՏԱԿ); display.drawRoundRect (60, 20, 35, 35, 8, ՍՊԻՏԱԿ); display.display ();

. Անգահարելով display.fillRect (upperLeftX, upperLeftY, լայնություն, բարձրություն, ՍՊԻՏԱԿ) կարող եք գծել նշված գույնով լցված ուղղանկյուն: Նաև այս օրինակի երրորդ գործառույթը ցուցադրումն է: Այն ընդունում է լրացուցիչ պարամետր գույնից առաջ, որը անկյունային շառավիղը նշող ամբողջ թիվ է: Որքան մեծ է արժեքը, այնքան կլորացվում է անկյունը: Այն ունի նաև display.drawFillRoundRect անունով լրացնելու համապատասխան գործառույթ, որը, կարծում եմ, կարող եք կռահել, թե ինչ է դա անում:

Գծագրական շրջան

Ֆունկցիան display.drawCircle է (centerX, centerY, շառավիղ, գույն): Ահա մի օրինակ, որը գծում է ժպիտի նմանվող ձև.

display.drawCircle (60, 30, 30, WHITE);

display.fillCircle (50, 20, 5, WHITE); display.fillCircle (70, 20, 5, WHITE);

Ինչպես ուղղանկյունները, այնպես էլ կարող եք օգտագործել display.fillCircle գործառույթը ՝ տվյալ գույնով լցված շրջան նկարելու համար:

Գծագրական եռանկյունի

Ահ, նորից գործառույթ, որը կոչվում է display.drawTriangle (poin1X, point1Y, point2X, point2Y, point3X, point3Y, գույն) և համապատասխան display.fillTriangle, որը գծում է լցված եռանկյունի:

display.drawTriangle (24, 1, 3, 55, 45, 55, ՍՊԻՏԱԿ);

display.fillTriangle (104, 62, 125, 9, 83, 9, WHITE);

Նկարեք մի կետ

Կարող եք նաև էկրանին գունավորել որոշակի կետ (որը կոչվում է պիքսել) display.drawPixel (pixelX, pixelY, գույն) գործառույթի միջոցով:

display.drawPixel (20, 35, WHITE);

display.drawPixel (45, 12, ՍՊԻՏԱԿ); display.drawPixel (120, 59, WHITE); display.drawPixel (97, 20, ՍՊԻՏԱԿ); display.drawPixel (35, 36, WHITE); display.drawPixel (72, 19, ՍՊԻՏԱԿ); display.drawPixel (90, 7, ՍՊԻՏԱԿ); display.drawPixel (11, 29, ՍՊԻՏԱԿ); display.drawPixel (57, 42, ՍՊԻՏԱԿ); display.drawPixel (69, 34, ՍՊԻՏԱԿ); display.drawPixel (108, 12, ՍՊԻՏԱԿ);

Քայլ 10: Պատկերի նկարում

Պատկերի նկարում
Պատկերի նկարում
Պատկերի նկարում
Պատկերի նկարում

Պատկեր նկարելը տարբեր է և մի փոքր բարդ: Քանի որ ցուցադրման մոդուլը միագույն է, մենք պետք է նախ փոխակերպենք մեր պատկերը մի ձևաչափ, որը կոչվում է մոնո գույնի բիթմապ (նաև սև և սպիտակ): Նման ձևաչափով պատկերի յուրաքանչյուր պիքսել ներկայացված է կամ 0 -ով կամ 1 -ով: 1 -երը ներկայացնում են գույնի գոյությունը, իսկ 0 -երը նշանակում է դատարկ տարածք: Այս հատվածի վերևում կարող եք տեսնել Arduino- ի տարբերանշանի օրինակ այս ձևաչափով: Բիթմապ պատկեր նկարելու գործառույթը ցուցադրում է display.drawBitmap (topLeftX, topLeftY, imageData, լայնություն, բարձրություն, գույն): ImageData պարամետրը թվերի զանգված է բայթերով: Յուրաքանչյուր բայթ ունի 8 բիթ, ուստի յուրաքանչյուր բայթ պարունակում է պատկերի 8 պիքսել տվյալներ: Նշելով պատկերի լայնությունը և բարձրությունը, drawBitmap գործառույթը կիմանա, թե որ բիթից է սկսվում պիքսելների հաջորդ շարքը:

Իմ պատկերն այս ձևաչափին փոխարկելու լուծումն այն էր, որ առաջին հերթին օգտագործեի առցանց «պատկերը ASCII կերպափոխիչներից» (օրինակ ՝ https://my.asciiart.club) ՝ իմ նկարը ASCII նիշերի շարք փոխարկելու և այնուհետև փոխարինելու համար նիշերը, որոնք օգտագործվում են դատարկ տարածքի համար 0 -ով, իսկ մյուսները `1. -ով, դա այն է, ինչ տեսնում եք ստորև: Յուրաքանչյուր 0 -ը և 1 -ը կարող եք դիտել որպես էկրանին պիքսել: Այսպիսով, նկարի չափը չպետք է գերազանցի մեր ցուցադրման չափը, որը 128x64 է:

Նշում. Այս ASCII տեխնիկայի օգտագործումը խորհուրդ չի տրվում, քանի որ կերպարների հարաբերակցության պատճառով ձեր պատկերը դեֆորմացված կլինի (նիշերը քառակուսի չեն): Ես փորձեցի այս տեխնիկան միայն այն պատճառով, որ այն ավելի դյուրին դարձրեց պատկերը պահանջվող ձևաչափի: Հակառակ դեպքում հնարավոր կլիներ հասնել լավագույն արդյունքի որոշ ծրագրավորման կամ որոշ օգտակար ծրագրերի միջոցով, որոնք ամբողջովին դուրս են այս տեքստի շրջանակներից:

00000000000000000000011111111111111111111110000000000000000000000000000000000000011111111111111111111111111111100000000000000000 0000000000000111111111111111111111111111111111111110000000000000 0000000000011111111111111111111111111111111111111111100000000000 0000000001111111111111111111111111111111111111111111111000000000 0000000111111111111111111111111111111111111111111111111110000000 0000011111111111111111111111111111111111111111111111111111100000 0000111111111111111111111111111111111111111111111111111111110000 0001111111111111111111111111111111111111111111111111111111111000 0011111111111111111111111111111111111111111111111111111111111100 0111111111111111000000011111111111111111100000001111111111111110 0111111111110000000000000001111111111000000000000000111111111110 1111111111000000001111000000001111000000001111000000001111111111 1111111110000011111111111100000110000011111111111100000111111111 1111111100000111111111111111000000001111111001111110000011111111 1111111100001111100000011111100000011111100000011111000011111111 1111111100001111100000011111100000011111100000011111000011111111 1111111100000111111111111111000000001111111001111110000011111111 1111111110000011111111111100000110000011111111111100000111111111 1111111111000000001111000000001111000000001111100000001111111111 0111111111110000000000000000111111110000000000000000111111111110 0111111111111111000000001111111111111111000000001111111111111110 0011111111111111111111111111111111111111111111111111111111111100 0001111111111111111111111111111111111111111111111111111111111000 0000111111111111111111111111111111111111111111111111111111110000 0000011111111111111111111111111111111111111111111111111111100000 0000000111111111111111111111111111111111111111111111111110000000 0000000011111111111111111111111111111111111111111111111100000000 0000000000011111111111111111111111111111111111111111100000000000 0000000000000111111111111111111111111111111111111110000000000000 0000000000000000111111111111111111111111111111110000000000000000 0000000000000000000001111111111111111111111000000000000000000000

Այժմ մենք պետք է յուրաքանչյուր տող բաժանենք 8 -ով ՝ ներկայացնելով բայթ և դրանք պահենք զանգվածում, ինչպես ստորև.

static const unsigned char PROGMEM arduino_logo = {

B00000000, B00000000, B00000111, B11111111, B11111111, B11100000, B00000000, B00000000, B00000000, B00000000, B01111111, B11111111, B11111111, B11111110, B0000000000, B0000000000, Այնուհետև մենք կարող ենք այն նկարել ցուցադրման վրա ՝ կանչելով drawBitmap գործառույթը:

display.drawBitmap (32, 16, arduino_logo, 64, 32, WHITE);

Քայլ 11: Խնդիրների վերացում

Սա երկար ուսուցում էր, ուստի մեծ է հավանականությունը, որ ինչ -որ բան այն չէ: Ահա որոշ սովորական սխալների ցանկը, որոնք կարող են հանդիպել ձեր նախագծի համար OLED ցուցադրման մոդուլը տեղադրելիս (դրանցից մի քանիսը տեղի են ունեցել ինձ համար այս ձեռնարկը պատրաստելիս):

Ընդհանրապես ոչինչ չի ցուցադրվում

Դա կարող է տեղի ունենալ բազմաթիվ պատճառներով, ուստի ես առաջարկում եմ ստուգել հետևյալ ցանկը, որը կարող է հայտնվել ձեր նախագծում.

I2C հասցեն, հավանաբար, սխալ է

Displayուցադրման օբյեկտը կարգավորելիս համոզվեք, որ i2c- սկաների ծածկագրով ստացած հասցեն սահմանել եք display.begin () գործառույթում:

SCL- ը և SDA- ն միացված են սխալ ձևով

Սա իրականում տեղի ունեցավ ինձ համար: Եթե դուք օգտագործում եք Arduino Uno- ն, ապա դուք պետք է նորից ստուգեք ձեր կապերը `համոզվելու համար, որ դրանք նույնն են, ինչ իմը: Եթե դուք օգտագործում եք Arduino- ի մեկ այլ հրատարակություն (օրինակ ՝ Mega, Leonardo և այլն), ապա պետք է իմանաք, որ նրանց I2C- ը կարող է դրված լինել այլ կապում: Դուք կարող եք ստուգել այն Wire գրադարանի փաստաթղթերում:

Դուք ինչ -որ բան եք նկարում տեսանելի տարածքից

Սա ծրագրային ապահովման խնդիր է: Շատ տարածված է, երբ նկարչական գործառույթներ օգտագործելիս կոորդինատները սխալ հաշվարկելիս, և այնպես, որ ձեր նկարը դեֆորմացվի կամ վատագույն սցենարի դեպքում այն կարող է ամբողջովին դուրս լինել տեսարանից: Վերանայեք ձեր հաշվարկները և փորձեք քայլ առ քայլ նկարել ՝ տեսնելու, թե ինչ է կատարվում:

Տեքստը ընդհանրապես չի ցուցադրվում

Դուք մոռացել եք տեքստի գույնը սահմանել կամ այն սխալ արժեք եք դրել

Տեքստեր նկարելուց առաջ անհրաժեշտ է զանգահարել setTextColor: Հակառակ դեպքում դուք սխալներ չեք ստացել, բայց ցուցադրվող ոչինչ չեք տեսնի: Նաև կարող եք տեքստի գույնը նույնը դնել, ինչ ֆոնի գույնը:

Դուք օգտագործում եք շատ մեծ տառատեսակ

Եթե տեքստի չափը դնում եք շատ մեծ արժեքի վրա, հնարավոր է, որ կերպարներն ամբողջությամբ դուրս գան տեսանելի տարածքից:

Էկրանի չափի վերաբերյալ կազմման սխալ կա

Սա նույնպես տեղի ունեցավ ինձ համար և կարծում եմ, որ դա տեղի կունենար ձեզանից շատերի դեպքում: Դա ցուցադրման չափի հաստատուն արժեքների պատճառով է, որոնք սահմանված են Adafruit_SSD1306.h վերնագրի ֆայլի ներսում, որոնք մենք ներառում ենք մեր սցենարի վերևում: Այս ֆայլը գտնվում է {your-project-folder} libraries / Adafruit_SSD1306 / Adafruit_SSD1306.h հասցեում: Եթե բացեք այս ֆայլը, կնկատեք, որ ստորև նշված է մեկնաբանությունների բաժինը, որտեղ նկարագրվում է, որ պետք է մեկնաբանել միայն այն հաստատունը, որը ներկայացնում է ձեր OLED ցուցադրման մոդուլի չափը: 128x64 ցուցադրման մոդուլների համար #սահմանեք SSD1306_128_64 տողը չպետք է մեկնաբանվի:

/*=====================================================================

SSD1306 Disուցադրումներ ---------------------------------------------------- ---------------------- Վարորդը օգտագործվում է բազմաթիվ ցուցադրումներում (128x64, 128x32 և այլն): Ընտրեք ներքևի համապատասխան էկրանը ՝ համապատասխան չափսերի շրջանակ ստեղծելու համար և այլն: SSD1306_128_64 128x64 պիքսելանոց էկրան SSD1306_128_32 128x32 պիքսելային ցուցադրում SSD1306_96_16 --------------------------------------------** # #սահմանել SSD1306_128_64 / / #սահմանել SSD1306_128_32 // #սահմանել SSD1306_96_16 /*======================================== ================================*/

Քայլ 12: Ի՞նչ անել հաջորդը:

OLED էկրանը, որպես ելքային մոդուլ, կարող է ձեզ հիանալի հնարավորություն տալ ձեր հոբբի նախագծերին պրոֆեսիոնալ տեսք ունեցող ինտերֆեյս ապահովել: Կարող եք փորձել հետևել գաղափարներին ՝ որպես ելակետ, դրա վրա իմաստալից տվյալներ ցուցադրելու համար կամ օգնել օգտվողին իմանալ, թե ինչ է կատարվում, կամ արդյոք նա պետք է որևէ բան անի: Շատ ավելի պարզ կլինի, որ օգտագործողը կարդա հաղորդագրություն էկրանին, քան որոշ LED- ների միջոցով նախագծի/սարքի վիճակը մեկնաբանելը:

Այն, ինչ կարող եք անել որպես ելակետ, կարող է լինել.

  • Կարդացեք ջերմաստիճանի տվիչի արժեքը և ցուցադրեք այն OLED մոդուլում: Դուք կարող եք դրան ավելացնել ճնշման կամ խոնավության սենսոր և ստեղծել եղանակի կայանի լիարժեք ֆունկցիոնալ նախագիծ:
  • Փորձեք ինչ -որ բան նկարել ցուցադրման մոդուլի վրա `օգտագործելով ջոյսթիկի մոդուլը` որպես մուտքագրման սարք:
  • Փորձեք էկրանին նկարել անիմացիա ՝ գործառույթի կանչերի գծագրման/հետաձգման կամ Arduino ընդհատման հաջորդականությամբ
  • Systemուցադրեք ձեր անհատական պատկերանշանը ձեր համակարգի գործարկման ժամանակ (Adafruit լոգոյի փոխարեն)

Մի մոռացեք ինձ ասել մեկնաբանությունների վերաբերյալ, թե ինչ կանեիք (կամ արդեն արել եք) ՝ օգտագործելով OLED ցուցադրման մոդուլը:

Խորհուրդ ենք տալիս: