Բովանդակություն:
- Քայլ 1: Ի՞նչ OLED մոդուլներ ենք պատրաստվում օգտագործել:
- Քայլ 2. I2C- ը համառոտ
- Քայլ 3. Պահանջվող մոդուլներ և բաղադրիչներ
- Քայլ 4. OLED ցուցադրման մոդուլի միացում Arduino- ին
- Քայլ 5: Գտեք ցուցադրման մոդուլի հասցեն
- Քայլ 6. Գրադարանների տեղադրում, որոնք անհրաժեշտ են OLED մոդուլում տվյալները ցուցադրելու համար
- Քայլ 7: theուցադրման մոդուլի նախաստորագրում
- Քայլ 8: Displayուցադրել պարզ տեքստ
- Քայլ 9: Հիմնական ձևերի նկարում
- Քայլ 10: Պատկերի նկարում
- Քայլ 11: Խնդիրների վերացում
- Քայլ 12: Ի՞նչ անել հաջորդը:
Video: Funամանց OLED էկրանով և Arduino- ով. 12 քայլ (նկարներով)
2024 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2024-01-30 09:46
Վստահ եմ, որ դուք հաստատ լսել եք OLED ցուցադրման տեխնոլոգիայի մասին: Այն համեմատաբար նոր է և առաջարկում է ավելի լավ որակ, քան հին LCD տեխնոլոգիան: Այս ձեռնարկում մենք ցանկանում ենք վերանայել այն քայլերը, որոնք պահանջվում են շուկայում առկա ամենատարածված մեկ գունավոր OLED ցուցադրման մոդուլներից տվյալների ցուցադրման համար: Ես կփորձեմ բացատրել Adafruit- ի համապատասխան գրադարանի կողմից տրամադրված գործառույթները `այս մոդուլի տվյալները ցուցադրելու համար:
Քայլ 1: Ի՞նչ OLED մոդուլներ ենք պատրաստվում օգտագործել:
OLED մոդուլները հասանելի են չափերի և հնարավորությունների լայն տեսականիով: Այն, ինչ մենք կօգտագործենք այս ձեռնարկում, միագույն 128x64 OLED մոդուլ է: Այս տեսակի մոդուլը հասանելի է հետևյալ չափսերով (այնպես, ինչպես տեսնում եք նկարներում).
- 128x64
- 128x32
- 96x16
- 64x48
- 64x32
Քանի որ այս բոլոր մոդուլներն աջակցում են I2C արձանագրությանը ՝ որպես հաղորդակցության միջոց, բոլորի ծածկագիրը և էլեկտրագծերը ճշգրիտ նույնն են: Միակ տարբերությունն այն է, որ դուք պետք է հաշվի առնեք ձեր ծածկագրի ցուցադրման չափը, որպեսզի բովանդակությունը, որը պատրաստվում եք ցուցադրել, ճիշտ տեղավորվի դրա վրա:
Քայլ 2. 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- ին
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 մոդուլում տվյալները ցուցադրելու համար
Wire գրադարանը կարող է կարգավորել ցածր մակարդակի հաղորդակցություն I2C սարքերի հետ: Երբ ցանկանում եք միանալ որևէ սարքի ՝ տվյալներից/տվյալները կարդալու/գրելու համար, սովորաբար դուք կօգտագործեք այն գրադարանը, որը տրամադրվել է այն ընկերության կողմից, որն ի սկզբանե կառուցել է այդ մոդուլը: Այս գրադարանը վարում է I2C հաղորդակցության բոլոր մանրամասները տվյալ մոդուլով և թույլ է տալիս ավելի շատ կենտրոնանալ մեր բիզնեսի վրա, որն այս դեպքում տվյալները ցուցադրում է մեր ուզած ձևով:
Adafruit ընկերությունը, որը արտադրում է նման ցուցադրման մոդուլների օրիգինալ տարբերակը, տրամադրում է Adafruit SSD1306 անունով գրադարաններ ՝ այդ միագույն էկրանների տվյալները ցուցադրելու համար: Այսպիսով, նախքան կոդավորումը սկսելը, մենք պետք է այս գրադարանը տեղադրենք Գրադարանի մենեջերի միջոցով (հասանելի է Sketch> Include Library> Manage Libraries … menu) միջոցով Arduino IDE- ում: Կա նաև մեկ այլ գրադարան, որը կոչվում է Adafruit GFX Library, որը զբաղվում է ավելի ցածր մակարդակի գրաֆիկական նյութերով և ներքին օգտագործման համար օգտագործվում է Adafruit SSD1306- ի կողմից: Անհրաժեշտ է, որ դրանք երկուսն էլ տեղադրված լինեն ձեր Arduino IDE- ում, ինչպես տեսնում եք նկարներում:
Քայլ 7: 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.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 ցուցադրման մոդուլը:
Խորհուրդ ենք տալիս:
Տեղափոխեք ուսումը NVIDIA JetBot- ի հետ - Funամանց երթևեկի կոնների միջոցով. 6 քայլ
Տեղափոխեք ուսումը NVIDIA JetBot- ով-Funամանց երթևեկի կոններով. Սովորեցրեք ձեր ռոբոտին ՝ տեսախցիկի և խորը ուսուցման գերժամանակակից մոդելի միջոցով ճանապարհ գտնել երթևեկի կոնների լաբիրինթոսում:
IoT ջերմաստիճանի և խոնավության հաշվիչ OLED էկրանով. 5 քայլ (նկարներով)
IoT ջերմաստիճանի և խոնավության հաշվիչ OLED էկրանով. Ստուգեք ջերմաստիճանը և խոնավությունը OLED էկրանին ցանկացած պահի, և միևնույն ժամանակ հավաքեք այդ տվյալները IoT հարթակում: Անցյալ շաբաթ ես հրապարակեցի նախագիծ, որը կոչվում էր ամենապարզ IoT ջերմաստիճանի և խոնավության հաշվիչ: Դա լավ նախագիծ է, քանի որ կարող եք
Խաղացեք PONG խաղ Arduino Uno- ով և OLED 0.96 SSD1306 էկրանով ՝ 6 քայլ
Խաղացեք PONG խաղ Arduino Uno- ով և OLED 0.96 SSD1306 էկրանով. Բարև տղերք, այսօր մենք PONG խաղ ենք պատրաստելու Arduino- ի հետ: Խաղը ցուցադրելու համար մենք կօգտագործենք adafruit- ի 0.96 oled էկրանը & սեղմել կոճակները ՝ խաղը վերահսկելու համար
Գրաֆիկա SSD1306 I2C OLED 128x64 էկրանով ՝ միացումով Python Using Itsybitsy M4 Express. 13 քայլ (նկարներով)
SSD1306 I2C OLED 128x64 էկրանով գրաֆիկա CircuitPython- ը Itsybitsy M4 Express- ի միջոցով. SSD1306 OLED էկրանը փոքր (0.96 "), էժան, լայնորեն հասանելի, I2C, մոնոխրոմ գրաֆիկական ցուցադրում է 128x64 պիքսելով, որը հեշտությամբ միջերեսային է (ընդամենը 4 լարեր) միկրոպրոցեսորների զարգացման տախտակներին, ինչպիսիք են Raspberry Pi, Arduino կամ
Funամանց IKEA լամպի հետ. 9 քայլ
Funամանց IKEA լամպի հետ. Ոչ մի առանձնահատուկ բան: Ոչ մի նոր բան: Դա պարզապես տրամադրության լույսի իմ սեփական տարբերակն է `հայտնի IKEA Mylonit լամպով