Mundarija:

OLED displey va Arduino bilan o'yin: 12 qadam (rasmlar bilan)
OLED displey va Arduino bilan o'yin: 12 qadam (rasmlar bilan)

Video: OLED displey va Arduino bilan o'yin: 12 qadam (rasmlar bilan)

Video: OLED displey va Arduino bilan o'yin: 12 qadam (rasmlar bilan)
Video: REAL RACING 3 LEAD FOOT EDITION 2024, Iyun
Anonim
OLED displey va Arduino bilan qiziqarli
OLED displey va Arduino bilan qiziqarli

Ishonchim komilki, siz OLED displey texnologiyasi haqida aniq eshitgansiz. Bu nisbatan yangi va eski LCD texnologiyasidan yaxshiroq sifatni taklif qiladi. Ushbu qo'llanmada biz bozorda mavjud bo'lgan eng keng tarqalgan bitta rangli OLED displey modullaridan birida ma'lumotlarni ko'rsatish uchun zarur bo'lgan qadamlarni ko'rib chiqmoqchimiz. Men ushbu moduldagi ma'lumotlarni ko'rsatish uchun tegishli Adafruit kutubxonasi tomonidan taqdim etilgan funktsiyalarni tushuntirishga harakat qilaman.

1 -qadam: Biz qanday OLED modullaridan foydalanmoqchimiz?

Biz qanday OLED modullaridan foydalanmoqchimiz?
Biz qanday OLED modullaridan foydalanmoqchimiz?
Biz qanday OLED modullaridan foydalanmoqchimiz?
Biz qanday OLED modullaridan foydalanmoqchimiz?
Biz qanday OLED modullaridan foydalanmoqchimiz?
Biz qanday OLED modullaridan foydalanmoqchimiz?

OLED modullari har xil o'lcham va xususiyatlarga ega. Bu qo'llanmada biz foydalanadigan bitta rangli 128x64 OLED moduli. Ushbu turdagi modullar quyidagi o'lchamlarda mavjud (rasmlarda ko'rish uchun):

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

Bu modullarning barchasi I2C protokolini aloqa vositasi sifatida qo'llab -quvvatlaganligi sababli, ularning kodlari va simlari bir xil. Faqatgina farq shundaki, siz ko'rsatmoqchi bo'lgan tarkib to'g'ri joylashishi uchun kodingizdagi displey hajmini hisobga olishingiz kerak.

2 -qadam: Xulosa qilib aytganda, I2C

Xulosa qilib aytganda, I2C
Xulosa qilib aytganda, I2C

80-yillarda Philips tomonidan ishlab chiqarilgan I2C (I kvadratchali S) deb nomlangan o'zaro integratsiyalashgan elektron (IIC) ma'lumotlar almashish avtobusi sifatida qurilmaning markaziy protsessor (CPU) yoki mikrokontroller birligi (MCU) o'rtasida ma'lumotlarni uzatish uchun ishlatiladi. periferik chiplar. Bu asosan televizion dasturlar uchun mo'ljallangan edi. Oddiyligi tufayli u shu qadar mashhur bo'ldiki, bir muncha vaqt o'tgach, u bir xil PCB platasining bir qismi bo'lmagan va unga sim orqali ulangan CPU va MCU va periferik qurilmalar uchun ma'lumotlarni uzatishning asosiy mexanizmlaridan biriga aylandi. displey modullari va boshqalar).

I2C ikkita simdan yasalgan aloqa avtobusidan iborat bo'lib, u master va bir nechta qul qurilmalar o'rtasida ma'lumotlarni ikki tomonlama uzatishni qo'llab -quvvatlaydi. Odatda, asosiy tugun avtobusni boshqarish uchun javobgardir - bu ketma -ket soat chizig'ida (SCL) sinxronizatsiya signalini ishlab chiqarish orqali amalga oshiriladi. Bu uzatish paytida usta tomonidan uzluksiz yuboriladigan signal va avtobusga ulangan boshqa barcha tugunlar uning aloqasini sinxronlashtirish va avtobus tezligini aniqlash uchun foydalanadi. Ma'lumotlar ketma -ket ma'lumotlar (SDA) liniyasi orqali master va qul o'rtasida uzatiladi. Uzatish tezligi 3,4 Mbit / s gacha bo'lishi mumkin. Ma'lumotni I2C orqali uzatishni istagan barcha qurilmalar yagona manzilga ega bo'lishi va qurilmaning funktsiyasiga qarab uzatuvchi yoki qabul qiluvchi sifatida ishlashi mumkin. Masalan, OLED displeyli modul - bu ba'zi ma'lumotlarni qabul qiladigan va ko'rsatadigan qabul qilgich, harorat sensori - I2C shinasi orqali olingan haroratni uzatuvchi qabul qiluvchi. Odatda asosiy qurilma - bu avtobusda ma'lumotlarni uzatishni boshlaydigan va uzatishga ruxsat berish uchun soat signallarini ishlab chiqaruvchi qurilma. O'tkazish paytida, ushbu xo'jayin murojaat qilgan har qanday qurilma qul deb hisoblanadi va bu ma'lumotlarni o'qiydi.

Agar tugun ba'zi ma'lumotlarni yuborishni xohlasa, ma'lumotlarning birinchi bayti qabul qiluvchining manzili bo'lishi kerak, so'ngra haqiqiy ma'lumotlar keladi. Bu shuni anglatadiki, I2C (masalan, I2C OLED displey moduli) yordamida ma'lumotlarni chiqish qurilmasiga yuborish uchun biz birinchi navbatda uning I2C manzilini topamiz va keyingi bosqichda biz birinchi navbatda shunday qilamiz.

Agar siz I2C avtobusining tafsilotlari va nazariyalari haqida ko'proq bilmoqchi bo'lsangiz, quyidagi havolalardan foydalanishingiz mumkin:

www.i2c-bus.org

learn.sparkfun.com/tutorials/i2c

3 -qadam: Kerakli modullar va komponentlar

Kerakli modullar va komponentlar
Kerakli modullar va komponentlar
Kerakli modullar va komponentlar
Kerakli modullar va komponentlar
Kerakli modullar va komponentlar
Kerakli modullar va komponentlar

Bu erda siz ushbu qo'llanmani to'ldirishingiz kerak bo'lgan komponentlar ro'yxatini topishingiz mumkin:

eBay havolalari:

  • 1 ta Arduino Uno:
  • 1 x 128x64 OLED moduli:
  • 4 x Dupont kabeli:
  • 1 x Mini lehimsiz non paneli:

Amazon.com havolalari:

  • 1 x Arduino Uno:
  • 1 x 128x64 OLED moduli:
  • 4 x Dupont kabeli:
  • 1 x Mini lehimsiz non paneli:

4 -qadam: OLED displey modulini Arduino -ga ulash

OLED displey modulini Arduino -ga ulash
OLED displey modulini Arduino -ga ulash
OLED displey modulini Arduino -ga ulash
OLED displey modulini Arduino -ga ulash
OLED displey modulini Arduino -ga ulash
OLED displey modulini Arduino -ga ulash
OLED displey modulini Arduino -ga ulash
OLED displey modulini Arduino -ga ulash

I2C yoqilgan qurilmalar haqida muhim eslatma shundaki, ularni Arduino -ga ulash usuli bir xil. Buning sababi shundaki, Arduino o'zining I2C aloqasini faqat ma'lum pinlarda ishlaydi. Ushbu qo'llanmada men Arduino Uno -dan foydalanaman. Arduino Uno A5 pinini SCK sifatida va A4ni SDA sifatida ishlatadi. Shunday qilib, biz OLED displey modulini Arduino Uno -ga sxematik ko'rinishda ulashimiz mumkin. OLED displey modulidan olgan rasmda ko'rib turganingizdek, VCC va GND ulagichlari sxematik ko'rinishdan farq qiladi. To'g'ri ulanganligingizga ishonch hosil qilish uchun modullaringizdagi pimlarning teglarini tekshirishni unutmang.

Bizga faqat 4 ta pin kerak, ular quyidagicha ulanishi kerak:

Arduino VCC -> OLED VCC moduli

Arduino GND -> GLE OLED moduli

Arduino 4 -> SDA OLED moduli

Arduino 5 -> SCLE OLED moduli

5 -qadam: Displey modulining manzilini topish

Displey modulining manzilini topish
Displey modulining manzilini topish

I2C yoqilgan qurilmaga ulanishning birinchi bosqichi sifatida siz modulning manziliga ega bo'lishingiz kerak. Buni amalga oshirish uchun, Arduino -ga modul ulangandan so'ng, siz biriktirilgan kodni Arduino -ga yuklashingiz kerak. Ushbu kod W2 kutubxonasini o'z ichiga oladi, bu I2C aloqasini boshqaradigan Arduino IDE kutubxonasi. U ulangan I2C qurilmalarini tekshirishga harakat qiladi va ularning manzilini ketma -ket port orqali kompyuteringizga yuboradi. Shunday qilib, siz Arduino IDE -dagi Serial Monitor vositasi orqali uning chiqishiga kirishingiz mumkin. Asl versiya Arduino o'yin maydonchasida mavjud). Bundan tashqari, siz uni Arduino -ning onlayn tahrirlovchisida o'qishingiz mumkin. Bu kod ishlayotgan vaqtda ekranda hech narsa ko'rsatilishini kutmang.

Rasmda ko'rib turganingizdek, mening modulim 0x3C manziliga bog'langan. Odatda ma'lum bir mahsulot qatoridagi barcha qurilmalar (masalan, 128x64 OLED modullari) bir xil manzilga ega.

I2C qurilmalarining manzili 1 dan 126 gacha cheklangan. Bu kod har bir qurilmaga tartibda (hech qanday ma'lumot uzatilmasdan) ulanishga harakat qiladi va keyin kutubxona tomonidan ko'rsatilgan manzilga ulanishda xatolik borligini tekshiradi. Agar xato bo'lmasa, ulanish uchun mavjud modul sifatida manzilni chop etadi. Shuni ham ta'kidlash kerakki, birinchi 15 manzil saqlangan, shuning uchun ular ustidan o'tib ketadi va shu diapazondan yuqoridagilarni bosib chiqaradi. Esda tutingki, ushbu I2C modullarining manzili qurilmada qattiq kodlangan va uni o'zgartirish mumkin emas. Keyingi safar skaner kodini ishga tushirishning hojati yo'qligi uchun uni laboratoriya javoniga qo'yganingizda uni biror joyga yozib qo'yish yoki modulga belgi qo'yish yaxshi bo'lardi. Ammo bu murakkab protsedura emas;)

6 -qadam: OLED modulida ma'lumotlarni ko'rsatish uchun kutubxonalarni o'rnatish

OLED modulida ma'lumotlarni ko'rsatish uchun zarur bo'lgan kutubxonalarni o'rnatish
OLED modulida ma'lumotlarni ko'rsatish uchun zarur bo'lgan kutubxonalarni o'rnatish
OLED modulida ma'lumotlarni ko'rsatish uchun zarur bo'lgan kutubxonalarni o'rnatish
OLED modulida ma'lumotlarni ko'rsatish uchun zarur bo'lgan kutubxonalarni o'rnatish

Wire kutubxonasi I2C qurilmalari bilan past darajadagi aloqani boshqarishi mumkin. Ma'lumotni o'qish/yozish uchun ma'lum bir qurilmaga ulanishni xohlasangiz, odatda siz ushbu modulni yaratgan kompaniya tomonidan taqdim etilgan kutubxonadan foydalanasiz. Bu kutubxona, berilgan modul yordamida barcha I2C aloqa tafsilotlarini ko'rib chiqadi va biz o'z biznesimizga ko'proq e'tibor qaratishimiz mumkin, bu holda bu ma'lumotlarni biz xohlagan tarzda aks ettiradi.

Bunday displey modullarining asl nusxasini ishlab chiqaruvchi Adafruit kompaniyasi ushbu monoxromli displeylarda ma'lumotlarni ko'rsatish uchun Adafruit SSD1306 nomli kutubxonalarni taqdim etadi. Shunday qilib, kodlashni boshlashdan oldin, biz ushbu kutubxonani Arduino IDE -dagi Kutubxona menejeri orqali o'rnatishimiz kerak (Sketch> Kutubxonani qo'shish> Kutubxonalarni boshqarish … menyusi orqali). Adafruit GFX kutubxonasi deb nomlangan boshqa past kutubxona ham bor, u past darajadagi grafik materiallarni boshqaradi va Adafruit SSD1306 tomonidan ichki ishlatiladi. Rasmlarda ko'rib turganingizdek, ikkalasini ham Arduino IDE -ga o'rnatishingiz kerak.

7 -qadam: Displey modulini ishga tushirish

Displey modulini ishga tushirish
Displey modulini ishga tushirish

Displey modulidagi rasm Adafruit_SSD1306 nomli sinfga o'ralgan. Bu sinfning ta'rifi Adafruit kutubxonasida, shuning uchun biz avval shu kutubxonani kiritishimiz kerak. Keyin biz birinchi navbatda ushbu sinfning misolini yaratishimiz kerak. Bu sinf konstruktori displeyni tiklash mumkin bo'lgan port raqamini oladi, bu pin 4 (SCK ga ulangan). Kodning bu qismi faylning boshida joylashgan bo'lishi kerak (setup () va loop () funktsiyalaridan tashqari).

#qo'shing

Adafruit_SSD1306 displeyi (4);

Endi setup () funktsiyasida biz I2C manzilimizni quyida ko'rsatib ko'rsatish ob'ektining boshlang'ich funktsiyasini chaqirishimiz kerak (SSD1306_SWITCHCAPVCC - bu kutubxonadagi quvvat manbai turini ko'rsatuvchi doimiy qiymat):

bo'sh o'rnatish () {

display.begin (SSD1306_SWITCHCAPVCC, 0x3C); display.display (); } void loop () {} // loop hozircha bo'sh bo'lishi mumkin

Endi ko'rsatish ob'ekti tayyor va biz uning funktsiyalarini chaqira olamiz (masalan, display.write (), display.drawLine va boshqalar). Muhim eslatma shundaki, biz har doim ob'ektni chaqirish orqali biror narsani chizganimizda, haqiqiy chizilganni apparat darajasida bajarish uchun display.display () funktsiyasini chaqirishimiz kerak. Bu, asosan, biz chaqirayotgan chizish funktsiyalari ishlash sabablari uchun displeyning "xotirada" tasvirini yangilashiga bog'liq. Bu aslida xotiradagi o'zgarishlarni saqlaydi. Shunday qilib, biz ekranda biror narsa chizishni tugatganimizda display () funktsiyasini chaqirishni doimo unutmasligimiz kerak.

display.write (…); // xotirada yangilanishni davom ettiradi

display.drawLine (…); // xotirada yangilanishni davom ettiradi. display.display (); // displey uskunasidagi barcha o'zgarishlarni tozalaydi

Agar siz ushbu bosqichda kodingizni yuklamoqchi bo'lsangiz, Adafruit Industries logotipi paydo bo'lishini ko'rasiz. Buni kim chizishni so'raganiga hayron bo'lishingiz mumkin! Aslida, bu Adafruit kutubxonasi. U ushbu kompaniyaning logotipi bilan modul xotirasini (displey uskunasining xotiradagi tasvirini) ishga tushiradi. Agar siz boshlang'ich paytida buni ko'rishni xohlamasangiz, displey.clearDisplay () funktsiyasini sozlash funktsiyasida display.display () ga qo'ng'iroq qilishdan oldin qo'ng'iroq qilib ko'rishingiz mumkin. Bu funksiya, nomidan ko'rinib turibdiki, displeyni to'liq tozalaydi.

#qo'shing

Adafruit_SSD1306 displeyi (4); void setup () {display.begin (SSD1306_SWITCHCAPVCC, 0x3C); display.clearDisplay (); display.display (); } void loop () {}

Adafruit_SSD1306 kutubxonasi hujjatlariga asoslanib, siz ushbu sinf tomonidan taqdim etilgan turli funktsiyalarni displeyga chizish yoki undagi piksellarni to'g'ridan -to'g'ri boshqarish uchun ishlatishingiz mumkin. Keyingi bo'limlarda biz ularning har biri uchun namuna berishga harakat qilamiz, shunda siz uning qanday ishlashi haqida tasavvurga ega bo'lasiz. Ushbu misollarning aksariyati oddiy statik tarkibni ko'rsatadi, shuning uchun biz ularni setup () funktsiyasiga kiritishimiz mumkin (ishga tushirish kodidan keyin). Shunday qilib, u faqat bir marta ishga tushiriladi va u erda qoladi.

8 -qadam: oddiy matnni ko'rsatish

Oddiy matnni ko'rsatish
Oddiy matnni ko'rsatish
Oddiy matnni ko'rsatish
Oddiy matnni ko'rsatish
Oddiy matnni ko'rsatish
Oddiy matnni ko'rsatish

Matnni ko'rsatish uchun kutubxonaning oddiy display.println () funktsiyasidan foydalanishimiz mumkin. U matnni satr sifatida qabul qiladi va uni ko'rsatishga harakat qiladi. Bilingki, biz kutubxonaga matnni displeyda ko'rsatadigan joyni aytishimiz kerak. Displeydagi har bir piksel X va Y bilan ko'rsatilgan koordinataga ega. X chapdan o'ngga, Y yuqoridan pastgacha ko'tariladi. Ekranning yuqori chap burchagi (X = 0, Y = 0) va pastki o'ng burchagi (X = 127, Y = 63). Men birinchi rasmdagi burchaklarning koordinatalarini qayd qildim. Matnni displeyda qaerda ko'rsatishni ko'rsatish uchun display.setCursor () funktsiyasidan foydalanishimiz mumkin.

Matnning yana bir xususiyati uning rangidir. Rangni quyidagi namunada ko'rsatilgandek display.setTextColor () yordamida belgilashimiz mumkin.

display.clearDisplay ();

display.setTextColor (oq); display.setCursor (35, 30); display.println ("Salom dunyo!"); display.display ();

Bitta belgini ko'rsatish uchun display.write () funktsiyasidan ham foydalanishimiz mumkin. Uint kodini uint8_t turi sifatida qabul qiladi va satrda shu kodga mos keladigan belgini ko'rsatadi. Misol sifatida, agar biz ushbu funktsiyani ishlatib, bir xil satrni ko'rsatishni xohlasak, quyidagi parchadan foydalanishimiz mumkin:

display.clearDisplay ();

display.setTextColor (oq); display.setCursor (35, 30); display.write (72); display.write (101); display.write (108); display.write (108); display.write (111); display.write (32); display.write (87); display.write (111); ko'rsatish.yozish (114); display.write (108); display.write (100); display.write (33); display.display ();

Oq fonli qora rangdagi matnlarni ham chizish mumkin. Buni amalga oshirish uchun display.setTextColor funktsiyasini quyidagi tarzda chaqirishingiz kerak bo'ladi:

display.clearDisplay ();

// Oq fon displeyi bilan rangni qora rangga o'rnatadi display.setTextColor (Qora, oq); display.setCursor (25, 30); display.println ("teskari matn!"); display.display ();

Bundan tashqari, displey.setTextSize () funksiyasi yordamida matn hajmini sozlash imkoniyati mavjud. U butun sonni o'lcham sifatida qabul qiladi. Raqam qancha ko'p bo'lsa, matn shunchalik katta bo'ladi. Eng kichik o'lcham - bu matnlarning standart hajmi. Quyidagi kod "A" harfini 6 xil o'lchamda yozishga harakat qiladi:

display.clearDisplay ();

display.setTextColor (oq); 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 -qadam: Asosiy shakllarni chizish

Asosiy shakllarni chizish
Asosiy shakllarni chizish
Asosiy shakllarni chizish
Asosiy shakllarni chizish
Asosiy shakllarni chizish
Asosiy shakllarni chizish

To'rtburchak, doira, uchburchak, chiziq yoki nuqta kabi asosiy shakllarni chizish juda oson va ularning har biri uchun alohida funktsiya mavjud.

Chizma chizig'i

Chiziq chizish uchun display.drawLine (startX, startY, endX, endY, color) ga qo'ng'iroq qilishingiz mumkin. Masalan, quyidagi kod ekranda diagonal chiziqlar chizadi, ular katta X ni hosil qiladi:

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 () va display.height () funktsiyalari yordamida displeyning kengligi va balandligiga kirishingiz mumkin. Shunday qilib, sizning kodingiz ekran o'lchamidan mustaqil bo'ladi.

To'rtburchak chizish

To'rtburchak chizish funktsiyasi display.drawRect (yuqoriLeftX, yuqoriLeftY, kenglik, balandlik, rang). Mana, ba'zi tasodifiy joylarga uchta to'rtburchak chizilgan kod:

display.clearDisplay ();

display.drawRect (100, 10, 20, 20, oq); display.fillRect (10, 10, 45, 15, oq); display.drawRoundRect (60, 20, 35, 35, 8, oq); display.display ();

Display.fillRect (yuqoriLeftX, yuqoriLeftY, kenglik, balandlik, WHITE) ni chaqirish orqali siz belgilangan rang bilan to'ldirilgan to'rtburchaklar chizishingiz mumkin. Shuningdek, bu misoldagi uchinchi funksiya - bu display.drawRoundRect (yuqoriLeftX, yuqoriLeftY, kenglik, balandlik, burchakRadius, rang), rasmda ko'rib turganingizdek yumaloq burchakli to'rtburchaklar chizish uchun ishlatiladi. U rangdan oldin burchak radiusini ko'rsatuvchi butun sonli qo'shimcha parametrni qabul qiladi. Qiymat qanchalik katta bo'lsa, burchak yumaloqroq bo'ladi. Bundan tashqari, display.drawFillRoundRect nomli mos keladigan to'ldirish funktsiyasi mavjud, menimcha, u nima qilayotganini taxmin qila olasiz.

Chizma aylanasi

Funktsiya display.drawCircle (centerX, centerY, radius, rang). Mana, tabassumga o'xshash shaklni chizgan misol:

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

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

To'rtburchaklar singari, display.fillCircle funktsiyasidan foydalanib, berilgan rang bilan to'ldirilgan aylana chizish mumkin.

Uchburchak chizish

Oh, yana displey.drawTriangle (poin1X, nuqta1Y, nuqta2X, nuqta2Y, nuqta3X, nuqta3Y, rang) deb nomlangan funktsiya va to'ldirilgan uchburchakni chizadigan mos keladigan displey.fillTriangle.

display.drawTriangle (24, 1, 3, 55, 45, 55, OQ);

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

Nuqta chizish

Bundan tashqari, display.drawPixel (pixelX, pixelY, color) funktsiyasi orqali ekrandagi ma'lum bir nuqtani (uni piksel deb ataladi) bo'yashingiz mumkin.

display.drawPixel (20, 35, oq);

display.drawPixel (45, 12, oq); display.drawPixel (120, 59, oq); display.drawPixel (97, 20, oq); display.drawPixel (35, 36, oq); display.drawPixel (72, 19, oq); display.drawPixel (90, 7, oq); display.drawPixel (11, 29, oq); display.drawPixel (57, 42, oq); display.drawPixel (69, 34, oq); display.drawPixel (108, 12, oq);

10 -qadam: rasm chizish

Rasm chizish
Rasm chizish
Rasm chizish
Rasm chizish

Tasvirni chizish boshqacha va biroz murakkab. Displey moduli bitta rangli bo'lgani uchun biz avval rasmimizni mono rangli bitmap (qora va oq deb ham ataladigan) formatiga o'tkazishimiz kerak. Bunday formatda tasvirning har bir pikseli 0 yoki 1 bilan ifodalanadi. 1s rangning mavjudligini, 0s esa bo'sh joyni bildiradi. Siz ushbu bo'limning yuqori qismida Arduino logotipining namunasini ko'rishingiz mumkin. Bitmap tasvirini chizish funktsiyasi display.drawBitmap (topLeftX, topLeftY, imageData, kenglik, balandlik, rang). ImageData parametri - baytdagi raqamlar majmuasi. Har bir baytda 8 bit bor, shuning uchun har bir bayt tasvirning 8 pikselli ma'lumotlarini o'z ichiga oladi. Tasvirning kengligi va balandligini ko'rsatib, drawBitmap funktsiyasi keyingi piksel qatori qaysi bitdan boshlanishini bilib oladi.

Rasmimni ushbu formatga aylantirish uchun tanlagan yechim avval rasmimni ASCII belgilar majmuasiga aylantirish uchun "rasmni ASCII konvertoriga" (masalan, https://my.asciiart.club) ishlatish edi. bo'sh joy uchun ishlatiladigan belgilar - 0, qolganlari - 1. Buni siz quyida ko'rib turibsiz. Siz har bir 0 va 1ni displeyda piksel deb o'ylashingiz mumkin. Shunday qilib, rasmning o'lchami bizning displey o'lchamimizdan oshmasligi kerak - 128x64.

Eslatma: Ushbu ASCII texnikasidan foydalanish tavsiya etilmaydi, chunki belgilar nisbati tufayli sizning tasviringiz deformatsiyalanadi (belgilar kvadrat emas). Men bu texnikani sinab ko'rdim, chunki bu tasvirni kerakli formatga o'tkazishni osonlashtiradi. Aks holda, ushbu matn doirasidan tashqarida bo'lgan ba'zi dasturlar yordamida yoki ba'zi yordamchi dasturlar yordamida eng yaxshi natijaga erishish mumkin bo'lardi.

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

Endi biz har bir satrni baytni ifodalab 8 ga bo'lishimiz va ularni quyidagi qatorda saqlashimiz kerak:

statik const belgisiz PROGMEM arduino_logo = {

B00000000, B00000000, B00000111, B11111111, B11111111, B11100000, B00000000, B00000000, B00000000, B00000000, B01111111, B11111111, B11111111, B11111110, B00000000, B00000000 gacha…

Keyin drawBitmap funktsiyasini chaqirib, uni ekranda chizishimiz mumkin.

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

11 -qadam: Muammolarni bartaraf etish

Bu uzoq darslik edi, shuning uchun biror narsa noto'g'ri ketishi ehtimoli katta. Loyihangiz uchun OLED -displey modulini o'rnatishda uchrashishingiz mumkin bo'lgan ba'zi keng tarqalgan xatolar ro'yxati (ularning ba'zilari men uchun bu darslikni tayyorlash paytida sodir bo'lgan).

Hech narsa umuman ko'rsatilmaydi

Bu ko'p sabablarga ko'ra sodir bo'lishi mumkin, shuning uchun men sizning loyihangizda bo'lishi mumkin bo'lgan quyidagi ro'yxatni tekshirishni taklif qilaman:

I2C manzili noto'g'ri bo'lishi mumkin

I2c-skaner kodida ko'rsatilgan manzilni display.begin () funktsiyasida ko'rsatganingizga ishonch hosil qiling.

SCL va SDA noto'g'ri ulangan

Bu aslida men uchun sodir bo'ldi. Agar siz Arduino Uno -dan foydalanayotgan bo'lsangiz, ulanishlar meniki bilan bir xil ekanligiga ishonch hosil qilish uchun yana tekshirishingiz kerak. Agar siz Arduino -ning boshqa versiyasini ishlatayotgan bo'lsangiz (masalan, Mega, Leonardo va boshqalar), ularning I2C -ni boshqa pinlarga o'rnatganligini bilishingiz kerak. Siz buni Wire kutubxonasi hujjatlarida tekshirishingiz mumkin.

Siz ko'rinadigan joydan nimadir chizyapsiz

Bu dasturiy ta'minot muammosi. Ba'zi koordinatalarni noto'g'ri hisoblash uchun chizish funktsiyalaridan foydalanganda tez -tez uchrab turadi, shuning uchun chizishingiz deformatsiyalanadi yoki eng yomon holatda u sahnadan butunlay chiqib ketishi mumkin. Hisob -kitoblaringizni ko'rib chiqing va nima bo'layotganini ko'rish uchun bosqichma -bosqich chizishga harakat qiling.

Matn umuman ko'rsatilmaydi

Siz matn rangini o'rnatishni unutdingiz yoki uni noto'g'ri qiymatga qo'ydingiz

Matnlarni chizishdan oldin setTextColor -ga qo'ng'iroq qilishingiz kerak. Aks holda sizda xato yo'q, lekin siz hech narsani ko'rmaysiz. Bundan tashqari, siz matn rangini fon rangi bilan bir xil qilib qo'ygan bo'lishingiz mumkin.

Siz juda katta shriftdan foydalanmoqdasiz

Agar siz matn o'lchamini juda katta qiymatga qo'ygan bo'lsangiz, unda belgilar ko'rinadigan maydondan butunlay chiqib ketishi mumkin.

Displey hajmi haqida kompilyatsiya xatosi bor

Bu men uchun ham sodir bo'lgan va menimcha, ko'pchiligingizda shunday bo'ladi. Adafruit_SSD1306.h sarlavhali faylda aniqlangan displey o'lchamining doimiy qiymatlari tufayli biz skriptning yuqori qismiga qo'shamiz. Bu fayl {your-project-folder} libraries / Adafruit_SSD1306 / Adafruit_SSD1306.h manzilida joylashgan. Agar siz bu faylni ochsangiz, quyida sharhlar bo'limi borligini ko'rasiz, unda siz faqat OLED displey modulining o'lchamini ifodalovchi sobitni o'chirib tashlashingiz kerakligini tasvirlaydi. 128x64 displeyli modullar uchun #define SSD1306_128_64 qatori izohlanmagan bo'lishi kerak.

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

SSD1306 displeylari ------------------------------------------------ ---------------------- Drayv bir nechta displeylarda ishlatiladi (128x64, 128x32 va boshqalar). Tegishli o'lchamdagi ramka buferi va boshqalarni yaratish uchun quyida mos keladigan displeyni tanlang. SSD1306_128_64 128x64 pikselli displey SSD1306_128_32 128x32 pikselli displey SSD1306_96_16 --------------------------- --------------------------------------------* / #define SSD1306_128_64 / / #define SSD1306_128_32 // #SSD1306_96_16 ni aniqlang /*==================================== ==============================*/

12 -qadam: Keyin nima qilish kerak?

OLED displeyi chiqish moduli sifatida sizga sevimli mashg'ulotlaringiz loyihalariga professional ko'rinishdagi interfeysni taqdim etish uchun ajoyib imkoniyat beradi. Siz quyidagi fikrlarni boshlang'ich nuqtasi sifatida ishlatib, mazmunli ma'lumotlarni namoyish qilishingiz yoki foydalanuvchiga nima bo'layotganini yoki biror narsa qilish kerakligini bilishingizga yordam berishingiz mumkin. Ba'zi LEDlar orqali loyiha/qurilmaning holatini talqin qilishdan ko'ra, foydalanuvchi displeyda xabarni o'qishi aniqroq bo'ladi.

Boshlanish nuqtasi sifatida nima qilishingiz mumkin:

  • Harorat sensori qiymatini o'qing va OLED modulida aks ettiring. Siz unga bosim yoki namlik sensori qo'shib, to'liq ishlaydigan ob -havo stantsiyasi loyihasini yaratishingiz mumkin.
  • Kirish qurilmasi sifatida joystik moduli yordamida displey moduliga biror narsa chizishga harakat qiling.
  • Qo'ng'iroqlarni chizish/kechiktirish yoki Arduino uzilishi ketma -ketligi bilan displeyda animatsiya chizishga harakat qiling
  • Tizimni ishga tushirishda shaxsiy logotipingizni ko'rsating (Adafruit logotipi o'rniga)

Menga sharhlar haqida aytishni unutmang, OLED displey moduli yordamida nima qilardingiz (yoki siz allaqachon qilgansiz).

Tavsiya: