Агуулгын хүснэгт:
- Алхам 1: Бид ямар OLED модулийг ашиглах гэж байна вэ?
- Алхам 2: Товчхондоо I2C
- Алхам 3: Шаардлагатай модулиуд ба бүрэлдэхүүн хэсгүүд
- Алхам 4: OLED дэлгэцийн модулийг Arduino руу холбох
- Алхам 5: Дэлгэцийн модулийн хаягийг олох
- Алхам 6: OLED модуль дээрх өгөгдлийг харуулахад шаардлагатай номын санг суулгах
- Алхам 7: Дэлгэцийн модулийг эхлүүлэх
- Алхам 8: Энгийн текстийг харуулах
- Алхам 9: Үндсэн дүрсийг зурах
- Алхам 10: Зураг зурах
- Алхам 11: Алдааг олж засварлах
- Алхам 12: Дараа нь юу хийх вэ?
Видео: OLED дэлгэц ба Arduino ашиглан хөгжилтэй: 12 алхам (зурагтай)
2024 Зохиолч: John Day | [email protected]. Хамгийн сүүлд өөрчлөгдсөн: 2024-01-30 11:01
Та OLED дэлгэцийн технологийн талаар сонссон гэдэгт итгэлтэй байна. Энэ нь харьцангуй шинэ бөгөөд хуучин LCD технологиос илүү сайн чанарыг санал болгодог. Энэхүү гарын авлагад бид зах зээл дээр худалдаалагдаж буй хамгийн түгээмэл ганц өнгөт OLED дэлгэцийн модулийн өгөгдлийг харуулахад шаардлагатай алхмуудыг авч үзэхийг хүсч байна. Энэ модулийн өгөгдлийг харуулахын тулд холбогдох Adafruit номын сангийн өгсөн функцийг тайлбарлахыг хичээх болно.
Алхам 1: Бид ямар OLED модулийг ашиглах гэж байна вэ?
OLED модулиуд нь янз бүрийн хэмжээтэй, онцлог шинж чанартай байдаг. Энэхүү зааварчилгаанд ашиглах гэж буй маань нэг өнгийн 128x64 OLED модуль юм. Энэ төрлийн модулийг дараах хэмжээтэй авах боломжтой (Зураг дээр харуулахын тулд):
- 128x64 хэмжээтэй
- 128x32 хэмжээтэй
- 96x16
- 64x48 хэмжээтэй
- 64x32 хэмжээтэй
Эдгээр бүх модулиуд нь I2C протоколыг харилцаа холбооны хэрэгсэл болгон дэмждэг тул тэдгээрийн код, утас нь яг ижил байдаг. Ганц ялгаа нь та өөрийн код дээрх дэлгэцийн хэмжээг анхаарч үзэх хэрэгтэй бөгөөд ингэснээр таны үзүүлэх контент зохих ёсоор таарах болно.
Алхам 2: Товчхондоо I2C
I2C (I квадрат C) гэж нэрлэдэг интеграцчилсан хэлхээ (IIC) нь 80-аад онд Philips-ийн боловсруулсан өгөгдөл солилцох автобус болгон төхөөрөмжийн төв процессор (CPU) эсвэл микроконтроллерийн нэгж (MCU) хооронд мэдээлэл дамжуулахад ашиглагддаг. захын чипс. Энэ нь үндсэндээ ТВ програмд зориулагдсан байв. Энгийн байдлаас шалтгаалан энэ нь маш алдартай болсон бөгөөд хэсэг хугацааны дараа энэ нь ижил ПХБ -ийн самбарын нэг хэсэг биш бөгөөд утас (өөрөөр хэлбэл мэдрэгч, дэлгэцийн модулиуд гэх мэт).
I2C нь мастер болон хэд хэдэн боол төхөөрөмжүүдийн хооронд хоёр талт өгөгдөл дамжуулахыг дэмждэг хоёр утсаар хийсэн холбооны автобуснаас бүрдэнэ. Ихэвчлэн мастер зангилаа нь автобусны хяналтыг хариуцдаг бөгөөд үүнийг цуваа цагийн шугам (SCL) дээр синхрончлолын дохиог бий болгох замаар хийдэг. Энэ нь дамжуулах явцад мастер тасралтгүй илгээдэг дохио бөгөөд автобусанд холбогдсон бусад бүх зангилаа нь харилцаа холбоогоо синхрончлох, автобусны хурдыг илрүүлэхэд ашигладаг. Өгөгдөл нь мастер ба боолын хооронд цуваа өгөгдлийн шугам (SDA) дамждаг. Дамжуулах хурд 3.4 Mbps хүртэл байж болно. 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 128x64 OLED модуль:
- 4 x Dupont кабель:
- 1 х мини гагнуургүй талх:
Amazon.com холбоосууд:
- 1 x Arduino Uno:
- 1 x 128x64 OLED модуль:
- 4 x Dupont кабель:
- 1 х мини гагнуургүй талх:
Алхам 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 дээрээ байршуулах хэрэгтэй. Энэхүү код нь I2C холболтыг зохицуулдаг Arduino IDE -д багтсан номын сан болох Wire номын санг агуулдаг. Энэ нь холбогдсон I2C төхөөрөмжүүдийг сканнердахыг оролдож, хаягийг нь цуваа портоор дамжуулан таны компьютер руу илгээдэг. Тиймээс та Arduino IDE дээрх Serial Monitor хэрэгслээр дамжуулан түүний гаралтад хандах боломжтой. Анхны хувилбарыг Arduino тоглоомын талбайд ашиглах боломжтой). Мөн та үүнийг миний онлайн Arduino Editor дээрээс илүү унших боломжтой байдлаар үзэх боломжтой. Энэ кодыг ажиллуулж байх үед дэлгэц дээр ямар нэгэн зүйл харагдах болно гэж бүү бодоорой.
Зураг дээр харж байгаа шиг миний модуль 0x3C хаягаар холбогдсон байна. Бүтээгдэхүүний тодорхой шугамын бүх төхөөрөмжүүд (жишээлбэл, бүх 128x64 OLED модулиуд) ижил хаягтай байдаг.
I2C төхөөрөмжүүдийн хаяг нь 1 -ээс 126 хүртэл хязгаарлагддаг. Энэ код нь төхөөрөмж бүрт дарааллаар (ямар ч өгөгдөл дамжуулахгүйгээр) холбогдохыг оролдож, дараа нь заасан номын сангаас заасан хаягаар холбогдоход алдаа гарсан эсэхийг шалгана. Хэрэв алдаа гараагүй бол хаягийг холбогдох боломжтой модуль болгон хэвлэнэ. Эхний 15 хаягийг нөөцлөсөн тул тэдгээрийн дээгүүр үсэрч, энэ хүрээнээс дээш хаягийг хэвлэнэ гэдгийг тэмдэглэх нь зүйтэй. Эдгээр I2C модулийн хаяг нь төхөөрөмж дээр хатуу кодлогдсон бөгөөд үүнийг өөрчлөх боломжгүй гэдгийг санаарай. Дараагийн удаа сканнерын кодыг ажиллуулах шаардлагагүй болохын тулд лабораторийн тавиур дээр буцааж байрлуулахдаа үүнийг хаа нэг газар бичих эсвэл модуль дээр шошго тавих нь зүйтэй болов уу. Гэсэн хэдий ч энэ нь нарийн төвөгтэй процедур биш юм;)
Алхам 6: OLED модуль дээрх өгөгдлийг харуулахад шаардлагатай номын санг суулгах
Wire номын сан нь I2C төхөөрөмжтэй доод түвшний харилцааг зохицуулах боломжтой. Хэрэв та өгөгдлийг унших/бичихийн тулд тодорхой төхөөрөмжид холбогдохыг хүсвэл уг модулийг анх барьсан компанийн өгсөн номын санг ашигладаг. Энэхүү номын сан нь өгөгдсөн модулийн тусламжтайгаар I2C холбооны бүх нарийн ширийн зүйлийг зохицуулдаг бөгөөд энэ тохиолдолд өгөгдлийг бидний хүссэн байдлаар харуулдаг бизнесийнхээ талаар илүү их анхаарал хандуулах боломжийг бидэнд олгодог.
Ийм дэлгэцийн модулийн анхны хувилбарыг үйлдвэрлэдэг Adafruit компани нь эдгээр монохром дэлгэц дээрх өгөгдлийг харуулах Adafruit SSD1306 нэртэй номын сангуудыг хангадаг. Тиймээс кодлохоосоо өмнө бид энэ номын санг Arduino IDE дахь Номын сангийн менежерээр дамжуулан (Sketch> Номын санг оруулах> Номын санг удирдах… цэсээр дамжуулан үзэх боломжтой) суулгах ёстой. Adafruit GFX номын сан гэж нэрлэгддэг өөр нэг номын сан байдаг бөгөөд энэ нь илүү доод түвшний график зүйлсийг зохицуулдаг бөгөөд үүнийг Adafruit SSD1306 дотооддоо ашигладаг. Зураг дээр харагдаж байгаа шиг та хоёуланг нь Arduino IDE дээр суулгасан байх ёстой.
Алхам 7: Дэлгэцийн модулийг эхлүүлэх
Дэлгэц дээрх модулийн зургийг Adafruit_SSD1306 нэртэй ангид ороосон болно. Энэ ангийн тодорхойлолт нь Adafruit номын санд байдаг тул эхлээд тэр номын санг оруулах хэрэгтэй. Дараа нь бид эхлээд энэ ангийн жишээг гаргах ёстой. Энэ ангийн бүтээгч нь 4 -р зүү (SCK -тэй холбогдсон) дэлгэцийг дахин тохируулах портын дугаарыг авдаг. Кодын энэ хэсэг нь файлын эхэнд байх ёстой (тохиргооноос гадуур () ба loop () функцууд).
#оруулах
Adafruit_SSD1306 дэлгэц (4);
Одоо setup () функц дотор бид I2C хаягаа доорх байдлаар дамжуулж дэлгэцийн объектын эхлэх функцийг дуудах ёстой (SSD1306_SWITCHCAPVCC нь номын сангийн тэжээлийн эх үүсвэрийн төрлийг тодорхойлдог тогтмол утга юм):
хүчингүй тохиргоо () {
display.begin (SSD1306_SWITCHCAPVCC, 0x3C); display.display (); } void loop () {} // loop нь одоогоор хоосон байж болно
Одоо дэлгэцийн объект бэлэн болсон бөгөөд бид түүний функцийг дуудаж болно (жишээ нь display.write (), display.drawLine гэх мэт). Чухал тэмдэглэл бол бид дэлгэцийн объект руу залгах замаар ямар нэгэн зүйл зурах бүрдээ дэлгэцийн дүрслэлийг тоног төхөөрөмжийн түвшинд гаргахын тулд display.display () функцийг дуудах шаардлагатай болдог. Энэ нь голчлон бидний дууддаг зургийн функцүүдийн гүйцэтгэлийн шалтгаанаар дэлгэцийн "санах ойд" дүрслэлийг шинэчилдэгтэй холбоотой юм. Энэ нь үнэндээ санах ойн өөрчлөлтийг хадгалдаг. Тиймээс бид дэлгэц дээр ямар нэгэн зүйл зурж дуусаад display () функцийг дуудахаа үргэлж санаж байх ёстой.
дэлгэц. бичих (…); // санах ойд байнга шинэчлэгддэг
display.drawLine (…); // санах ойд байнга шинэчлэгддэг. display.display (); // дэлгэцийн техник хангамжийн бүх өөрчлөлтийг угаана
Хэрэв та энэ алхамаар кодоо оруулахыг оролдвол Adafruit Industries -ийн лого гарч ирэх болно. Хэн үүнийг зурахыг хүссэн гэж та гайхаж магадгүй юм! Үнэндээ энэ бол Адафрутын номын сан юм. Энэ нь энэ компанийн лого бүхий модулийн санах ойг (дэлгэцийн техник хангамжийн санах ойн дүрслэл) эхлүүлдэг. Хэрэв та үүнийг эхлүүлэх явцад үүнийг харахыг хүсэхгүй байгаа бол тохиргооны функц дээрээ display.display () руу залгахаасаа өмнө display.clearDisplay () функцийг дуудаж үзээрэй. Энэ функц нь нэрнээс нь харахад дэлгэцийг бүрэн цэвэрлэдэг.
#оруулах
Adafruit_SSD1306 дэлгэц (4); void setup () {display.begin (SSD1306_SWITCHCAPVCC, 0x3C); display.clearDisplay (); display.display (); } void loop () {}
Adafruit_SSD1306 номын сангийн баримт бичигт үндэслэн та энэ ангийн өгсөн өөр өөр функцуудыг ашиглан дэлгэц дээр зураг зурах эсвэл түүн дээрх пикселүүдийг шууд удирдах боломжтой. Дараагийн хэсгүүдэд бид тус бүрдээ жишээ өгөхийг хичээх болно, ингэснээр та хэрхэн ажилладаг талаар ойлголттой болно. Эдгээр жишээнүүдийн ихэнх нь зүгээр л энгийн статик агуулгыг харуулах тул бид тэдгээрийг өөрсдийн тохиргоо () функцын дотор оруулах боломжтой (эхлүүлэх кодын дараа). Ингэснээр үүнийг зөвхөн нэг л удаа ажиллуулж, тэнд үлдэх болно.
Алхам 8: Энгийн текстийг харуулах
Текстийг харуулахын тулд бид номын сангийн энгийн display.println () функцийг ашиглаж болно. Энэ нь текстийг тэмдэгт мөр болгон хүлээн авч харуулахыг оролддог. Бид текстийг дэлгэцэн дээр хаана үзүүлэхээ номын санд хэлэх ёстой гэдгийг мэдэх нь чухал юм. Дэлгэц дээрх пиксел бүрийг 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 (BLACK, WHITE); 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, color) руу залгаж болно. Жишээлбэл, дараах код нь дэлгэцэн дээр диагональ шугам зурж том 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 (дээдLeftX, дээдLeftY, өргөн, өндөр, өнгө) юм. Санамсаргүй байдлаар гурван тэгш өнцөгт зурсан код энд байна.
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 (дээдLeftX, дээдLeftY, өргөн, өндөр, ЦАГАА) гэж дуудсанаар та заасан өнгөөр дүүргэсэн тэгш өнцөгт зурж болно. Мөн энэ жишээн дээрх гуравдахь функц нь display.drawRoundRect (дээдLeftX, дээдLeftY, өргөн, өндөр, булангийн радиус, өнгө) бөгөөд үүнийг дугуй булантай тэгш өнцөгт зурахад ашиглаж болно. Өнгөний өмнө нэмэлт параметрийг хүлээн авдаг бөгөөд энэ нь булангийн радиусыг харуулсан бүхэл тоо юм. Илүү их үнэ цэнэ нь булан тойрох болно. Энэ нь display.drawFillRoundRect нэртэй харгалзах дүүргэх функцтэй бөгөөд үүнийг юу хийж байгааг та тааж чадна гэж бодож байна.
Зургийн тойрог
Функц нь display.drawCircle (centerX, centerY, радиус, өнгө) юм. Инээмсэглэлтэй төстэй дүрс зурсан жишээг энд харуулав.
display.drawCircle (60, 30, 30, ЦАГААН);
display.fillCircle (50, 20, 5, ЦАГААН); display.fillCircle (70, 20, 5, ЦАГААН);
Тэгш өнцөгтийн нэгэн адил та display.fillCircle функцийг ашиглан өгөгдсөн өнгөөр дүүрсэн тойрог зурж болно.
Гурвалжин зурах
Ахх, дахин дэлгэц гэж нэрлэгддэг функц.
display.drawTriangle (24, 1, 3, 55, 45, 55, ЦАГААН);
display.fillTriangle (104, 62, 125, 9, 83, 9, ЦАГААН);
Нэг цэг зур
Та мөн дэлгэцийн тодорхой цэгийг (пиксел гэж нэрлэдэг) display.drawPixel (pixelX, pixelY, color) функцээр будаж болно.
display.drawPixel (20, 35, ЦАГААН);
display.drawPixel (45, 12, ЦАГААН); display.drawPixel (120, 59, ЦАГААН); display.drawPixel (97, 20, ЦАГААН); display.drawPixel (35, 36, ЦАГААН); 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: Зураг зурах
Зураг зурах нь арай өөр бөгөөд арай төвөгтэй. Дэлгэцийн модуль нь нэг өнгөтэй байдаг тул бид эхлээд зургаа моно өнгөт bitmap (хар ба цагаан гэж нэрлэдэг) формат руу хөрвүүлэх хэрэгтэй. Ийм форматаар зургийн пиксел бүрийг 0 эсвэл 1 -ээр харуулдаг. 1s нь өнгөний оршин тогтнолыг илэрхийлдэг бөгөөд 0 нь хоосон орон зай гэсэн үг юм. Та энэ хэсгийн орой дээрх Arduino логоны жишээг харж болно. Bitmap зураг зурах функц нь 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, B00000000, B00000000 хүртэл,…
Дараа нь бид drawBitmap функцийг дуудаж дэлгэц дээр зурж болно.
display.drawBitmap (32, 16, arduino_logo, 64, 32, ЦАГААН);
Алхам 11: Алдааг олж засварлах
Энэ бол урт хугацааны хичээл байсан тул ямар нэг зүйл буруу болох магадлал өндөр байна. Төсөлдөө OLED дэлгэцийн модулийг тохируулах явцад гарч болзошгүй нийтлэг алдаануудын жагсаалтыг энд оруулав (зарим нь энэ хичээлийг бэлтгэж байхдаа надад тохиолдсон болно).
Юу ч харуулахгүй байна
Энэ нь олон шалтгааны улмаас тохиолдож болох тул таны төсөлд гарч болох дарааллын жагсаалтыг шалгахыг санал болгож байна.
I2C хаяг буруу байж магадгүй
I2c-скан хийгчийн код дээр байгаа хаягаа display.begin () функц дээр харуулах объектыг тохируулахдаа тохируулсан эсэхээ шалгаарай.
SCL ба SDA -ийг буруу холбосон байна
Энэ нь үнэндээ надад тохиолдсон юм. Хэрэв та Arduino Uno -г ашиглаж байгаа бол холболтыг дахин шалгаж, тэд надтай холбогдсон эсэхийг шалгах хэрэгтэй. Хэрэв та өөр Arduino хувилбарыг ашиглаж байгаа бол (жишээлбэл, Мега, Леонардо гэх мэт) тэд I2C -ийг бусад зүүгээр тохируулсан байж магадгүй гэдгийг та мэдэх ёстой. Та үүнийг Wire номын сангийн баримт бичгээс шалгаж болно.
Та харагдахуйц хэсгээс ямар нэгэн зүйл зурж байна
Энэ бол програм хангамжийн асуудал юм. Зарим координатыг буруу тооцоолохын тулд зургийн функцийг ашиглах нь маш түгээмэл байдаг тул таны зураг хэв гажсан эсвэл хамгийн муу тохиолдолд дүр зурагнаас бүрэн холдож магадгүй юм. Тооцооллоо хянаж, юу болж байгааг харахын тулд алхам алхмаар зурж үзээрэй.
Текстийг огт харуулдаггүй
Та текстийн өнгийг тохируулахаа мартсан эсвэл буруу утгатай болгосон байна
Текст зурахаасаа өмнө setTextColor руу залгах хэрэгтэй. Үгүй бол танд ямар ч алдаа байхгүй, гэхдээ та дэлгэц дээр юу ч харахгүй болно. Мөн та текстийн өнгийг арын өнгөтэй адил тохируулсан байж магадгүй юм.
Та маш том фонт ашиглаж байна
Хэрэв та текстийн хэмжээг маш том утгаар тохируулсан бол тэмдэгтүүд нь харагдахуйц хэсгээс бүрэн гарч магадгүй юм.
Дэлгэцийн хэмжээтэй холбоотой хөрвүүлэх алдаа гарсан байна
Энэ нь надад бас тохиолдсон бөгөөд та нарын ихэнхэд ийм зүйл тохиолдох болно гэж бодож байна. Adafruit_SSD1306.h толгой файл дотор тодорхойлогдсон дэлгэцийн хэмжээнүүдийн тогтмол утгуудаас болж бид скриптийнхээ дээд хэсэгт оруулсан болно. Энэ файл нь {your-project-folder} libraries / Adafruit_SSD1306 / Adafruit_SSD1306.h-д байрладаг. Хэрэв та энэ файлыг нээвэл доорх тайлбар хэсэгт тайлбар байгаа бөгөөд та зөвхөн өөрийн OLED дэлгэцийн модулийн хэмжээг харуулсан тогтмолыг тайлах хэрэгтэйг тайлбарласан болно. 128x64 дэлгэцийн модулийн хувьд #define SSD1306_128_64 мөрийг тайлбарлахгүй байх ёстой.
/*=====================================================================
SSD1306 дэлгэц ------------------------------------------------ ---------------------- Драйверыг олон дэлгэц дээр (128x64, 128x32 гэх мэт) ашигладаг. Тохирох хэмжээтэй хүрээ буфер үүсгэхийн тулд доорх тохирох дэлгэцийг сонгоно уу. SSD1306_128_64 128x64 пиксел дэлгэц SSD1306_128_32 128x32 пиксел дэлгэц SSD1306_96_16 --------------------------- --------------------------------------------* / #define SSD1306_128_64 / / #Define SSD1306_128_32 // #SSD1306_96_16 тодорхойлох**==================================== ===============================*/
Алхам 12: Дараа нь юу хийх вэ?
OLED дэлгэц нь гаралтын модуль болох нь таны хоббигийн төслүүдэд мэргэжлийн харагдах интерфэйсийг өгөх гайхалтай боломжийг танд олгоно. Та дараах санаануудыг утга учиртай өгөгдлийг харуулахын тулд эхлэх цэг болгон туршиж үзэх, эсвэл юу болж байгааг, эсвэл түүнд ямар нэгэн зүйл хийх шаардлагатай байгаа эсэхийг мэдэх боломжийг хэрэглэгчдэд өгч болно. Зарим LED -ээр дамжуулан төсөл/төхөөрөмжийн төлөв байдлыг тайлбарлахаас илүү хэрэглэгч дэлгэцэн дээрх мессежийг унших нь илүү ойлгомжтой байх болно.
Эхлэх цэг болгон юу хийж болох вэ:
- Температур мэдрэгчийн утгыг уншаад OLED модуль дээр харуул. Та түүнд даралт эсвэл чийгшлийн мэдрэгч нэмж, бүрэн ажиллагаатай цаг уурын станцын төслийг бий болгож болно.
- Оруулах төхөөрөмж болгон джойстик модулийг ашиглан дэлгэцийн модуль дээр ямар нэгэн зүйл зурахыг хичээгээрэй.
- Функцийн дуудлага хийх эсвэл удаашруулах эсвэл Arduino тасалдах дарааллаар дэлгэц дээр анимац зурахыг хичээ
- Системийг эхлүүлэхдээ өөрийн захиалгат логог харуулах (Adafruit логоны оронд)
OLED дэлгэцийн модулийг ашиглан юу хийхээ (эсвэл та аль хэдийн хийсэн) сэтгэгдлээ надад хэлэхээ бүү мартаарай.
Зөвлөмж болгож буй:
MakeyMakey ашиглан хөгжилтэй спорт: 3 алхам
MakeyMakey ашиглан хөгжилтэй спорт: Энэхүү төслийн зорилго нь хөгжим тоглох, оноо цуглуулах замаар урамшуулал өгдөг тул технологийг ашиглан спортыг дэмжих явдал юм
I2C / IIC LCD дэлгэц - Arduino ашиглан SPI -IIC модулийг ашиглан I2C LCD дэлгэц рүү SPI LCD ашиглах: 5 алхам
I2C / IIC LCD дэлгэц | IUC LCD дэлгэц дээр SPI LCD дэлгэцийг SPI -ийг IIC модулийг ашиглан Arduino ашиглан ашиглаарай: Сайн байна уу залуусаа, ердийн SPI LCD 1602 -ийг холбоход хэт олон утас байдаг тул үүнийг arduino -той холбоход маш хэцүү боловч зах зээл дээр боломжтой нэг модуль байдаг. SPI дэлгэцийг IIC дэлгэц болгон хөрвүүлэх тул та зөвхөн 4 утас холбох хэрэгтэй
2.4Ghz NRF24L01 модулийг ашиглан Arduino ашиглан утасгүй алсын удирдлага - Nrf24l01 4 суваг / Quadcopter -ийн 6 суваг дамжуулагч хүлээн авагч - Rc нисдэг тэрэг - Arduino ашиглан Rc онгоц: 5 алхам (зурагтай)
2.4Ghz NRF24L01 модулийг ашиглан Arduino ашиглан утасгүй удирдлага | Nrf24l01 4 суваг / Quadcopter -ийн 6 суваг дамжуулагч хүлээн авагч | Rc нисдэг тэрэг | Arduino ашиглан Rc онгоц: Rc машин ажиллуулах | Квадрокоптер | Дрон | RC онгоц | RC завь, бидэнд үргэлж хүлээн авагч, дамжуулагч хэрэгтэй байдаг, RC QUADCOPTER -ийн хувьд бидэнд 6 суваг дамжуулагч, хүлээн авагч хэрэгтэй гэж бодъё, энэ төрлийн TX ба RX нь хэтэрхий үнэтэй тул бид үүнийг өөрөө хийх болно
Itybitsy M4 Express ашиглан SSD1306 I2C OLED 128x64 дэлгэц дээрх график: 13 алхам (зурагтай)
Itybitsy M4 Express ашиглан SSD1306 I2C OLED 128x64 дэлгэц дээрх график: SSD1306 OLED дэлгэц нь жижиг хэмжээтэй (0.96 "), хямд, өргөн хэрэглэгддэг, I2C, 128х64 пиксел хэмжээтэй, нэг интерфэйстэй, нэг өнгийн график дэлгэц юм. утаснууд) Raspberry Pi, Arduino гэх мэт микропроцессор хөгжүүлэх самбарууд руу
Blynk програм ашиглан USB ашиглан ухаалаг гар утсыг ашиглан Arduino -г удирдах: 7 алхам (зурагтай)
Blynk програм ашиглан USB ашиглан ухаалаг гар утсыг ашиглан Arduino -ийг удирдах Arduino эсвэл c-ээ алсаас удирдах хамгийн энгийн шийдэл