Мазмуну:

OLED дисплейи жана Arduino менен көңүл ачуу: 12 кадам (сүрөттөр менен)
OLED дисплейи жана Arduino менен көңүл ачуу: 12 кадам (сүрөттөр менен)

Video: OLED дисплейи жана Arduino менен көңүл ачуу: 12 кадам (сүрөттөр менен)

Video: OLED дисплейи жана Arduino менен көңүл ачуу: 12 кадам (сүрөттөр менен)
Video: How measure DC Voltage and Current and build Energy meter with LCD Display | Lesson 104 2024, Июль
Anonim
OLED Display жана Arduino менен көңүл ачуу
OLED Display жана Arduino менен көңүл ачуу

Мен OLED дисплей технологиясы жөнүндө сөзсүз укканыңызга ишенем. Бул салыштырмалуу жаңы жана эски ЖК технологиясына караганда жакшыраак сапатты сунуштайт. Бул үйрөткүчтө биз базарда жеткиликтүү болгон эң кеңири таралган бир түстүү OLED дисплей модулдарынын биринде маалыматтарды көрсөтүү үчүн керектүү кадамдарды карап чыгууну каалайбыз. Мен бул модульдагы маалыматтарды көрсөтүү үчүн тиешелүү Adafruit китепканасы тарабынан берилген функцияларды түшүндүрүүгө аракет кылам.

1 -кадам: Кандай OLED модулдарын колдонобуз?

Кандай OLED модулдарын колдонобуз?
Кандай OLED модулдарын колдонобуз?
Кандай OLED модулдарын колдонобуз?
Кандай OLED модулдарын колдонобуз?
Кандай OLED модулдарын колдонобуз?
Кандай OLED модулдарын колдонобуз?

OLED модулдары ар кандай өлчөмдө жана өзгөчөлүктөрдө жеткиликтүү. Бул окуу куралында биз колдоно турган моно түстүү 128x64 OLED модулу. Модулдун бул түрү төмөнкү өлчөмдөрдө жеткиликтүү (сүрөттөрдө көрүү үчүн):

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

Бул модулдардын бардыгы I2C протоколун байланыш каражаты катары колдогондуктан, баарынын коду жана зымдары бирдей. Жалгыз айырмачылык, кодуңуздагы дисплейдин өлчөмүн эске алууңуз керек, ошондо сиз көрсөтө турган мазмун ага туура келиши керек.

2 -кадам: Кыскача айтканда I2C

Кыскача айтканда I2C
Кыскача айтканда I2C

Адатта I2C (I квадраты С) деп аталган интегралдык схема (IIC) Philips тарабынан 80-жылдары иштелип чыккан, маалымат алмашуу шинасы катары борбордук процессинг бирдиги (CPU) же микроконтроллер бирдиги (MCU) түзмөктүн жана перифериялык чиптер. Бул негизинен телеканал үчүн багытталган. Жөнөкөйлүгүнөн улам, ал ушунчалык популярдуу болуп кеткендиктен, ал бир аздан кийин ошол эле ПХБ тактасынын зарыл бөлүгү болбогон жана ага зым (мисалы, сенсорлор, дисплей модулдары ж. б.).

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 Mini solderless нан:

Amazon.com шилтемелери:

  • 1 x Arduino Uno:
  • 1 x OLED модулу 128x64:
  • 4 x Dupont кабели:
  • 1 x Mini solderless нан:

4 -кадам: OLED дисплей модулун Arduinoго туташтыруу

OLED дисплей модулун Arduinoго туташтыруу
OLED дисплей модулун Arduinoго туташтыруу
OLED дисплей модулун Arduinoго туташтыруу
OLED дисплей модулун Arduinoго туташтыруу
Ардуиного OLED дисплей модулун өткөрүү
Ардуиного OLED дисплей модулун өткөрүү
Ардуиного OLED дисплей модулун өткөрүү
Ардуиного OLED дисплей модулун өткөрүү

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 -> SCLE OLED модулу

5 -кадам: Дисплей модулунун дарегин табуу

Дисплей модулунун дарегин табуу
Дисплей модулунун дарегин табуу

I2C иштетилген түзмөккө туташуунун биринчи кадамы катары модулдун дареги болушу керек. Бул үчүн, модулду Arduinoго туташтыргандан кийин, тиркелген кодду Arduinoго жүктөө керек. Бул код W2 китепканасын камтыйт, ал I2C байланышын башкарган Arduino IDEге кирген китепкана. Бул туташкан 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> Китепкананы кошуу> Китепканаларды башкаруу … менюсу аркылуу жеткиликтүү) Arduino IDEге орнотушубуз керек. Adafruit GFX Library деп аталган дагы бир китепкана бар, ал дагы төмөн деңгээлдеги графикалык нерселерди иштетет жана 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.write (…); // эс тутумунда жаңыртылып турат

display.drawLine (…); // эс тутумунда жаңыртылып турат. display.display (); // дисплейдин жабдыктарындагы бардык өзгөртүүлөрдү тазалайт

Эгерде сиз бул кадамда кодуңузду жүктөөгө аракет кылсаңыз, анда Adafruit Industries логотиби көрсөтүлөрүн байкайсыз. Сиз муну ким сурады деп ойлонушуңуз мүмкүн! Чынында, бул Adafruit китепканасы. Бул компаниянын логотиби менен модулдун эс тутумун (дисплей жабдууларынын эс тутумунда) баштайт. Эгерде сиз муну инициализация учурунда көргүңүз келбесе, анда Display.clearDisplay () функциясына чалууга аракет кылсаңыз болот. Бул функция, аты айтып тургандай, дисплейди толугу менен тазалайт.

#кошуу

Adafruit_SSD1306 дисплейи (4); жараксыз орнотуу () {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 ("Hello World!"); display.display ();

Ошондой эле, бир белгини көрсөтүү үчүн display.write () функциясын колдоно алабыз. Ал тамга кодун uint8_t түрү катары кабыл алат жана ошол кодго тиешелүү белгини сапта көрсөтөт. Мисалы, эгер биз ушул функцияны колдонуп, ошол эле сапты көрсөтүүнү кааласак, анда биз төмөнкү үзүндү колдоно алабыз:

display.clearDisplay ();

display.setTextColor (АК); 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); display.write (114); display.write (108); display.write (100); display.write (33); display.display ();

Ак түстөгү кара түстөгү тексттерди тартуу да мүмкүн. Ан үчүн, display.setTextColor функциясын төмөндөгүдөй чакыруу керек:

display.clearDisplay ();

// түсүн ак фондо Display.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, color) деп чалсаңыз болот. Мисалы, төмөнкү код экранда диагоналдуу сызыктарды тартат, алар чоң X формасын түзөт:

display.clearDisplay ();

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

Display.width () жана display.height () функцияларын колдонуу менен дисплейдин туурасына жана бийиктигине жете аласыз. Муну менен сиздин кодуңуз экран өлчөмүнө көз карандысыз болмок.

Тик бурчтук тартуу

Тик бурчтукту тартуу функциясы display.drawRect (yuqoriLeftX, yuqoriLeftY, туурасы, бийиктиги, түсү). Бул жерде кээ бир туш келди жерлерге үч тик бурчтук тарткан код:

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 (topLeftX, yuqoriLeftY, туурасы, бийиктиги, АК) деп чалуу менен сиз көрсөтүлгөн түс менен толтурулган тик бурчтукту тарта аласыз. Ошондой эле, бул мисалдагы үчүнчү функция - бул display.drawRoundRect (üstLeftX, yuqoriLeftY, туурасы, бийиктиги, cornerRadius, түсү), бул сүрөттө көрүнүп тургандай тегерек бурчтуу тик бурчтукту тартуу үчүн колдонулат. Бул бурчтун радиусун көрсөтүүчү бүтүн сан болгон түстөн мурун кошумча параметрди кабыл алат. Мааниси канчалык чоң болсо, бурч ошончолук айланат. Ал ошондой эле 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 (poin1X, point1Y, point2X, point2Y, point3X, point3Y, color) деп аталган функция жана толтурулган үч бурчтукту тарткан тиешелүү display.fillTriangle.

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 -кадам: Сүрөт тартуу

Сүрөт тартуу
Сүрөт тартуу
Сүрөт тартуу
Сүрөт тартуу

Сүрөт тартуу башкача жана бир аз татаал. Дисплей модулу бир түстүү болгондуктан, адегенде өзүбүздүн сүрөтүбүздү моно түстүү битмап (ак -кара деп да аталат) форматына которушубуз керек. Мындай форматта, сүрөттүн ар бир пиксели 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ге бөлүп, байтты билдирип, аларды төмөнкүдөй массивде сакташыбыз керек:

статикалык const белгиси жок 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 басылмасын колдонуп жатсаңыз (мисалы, Мега, Леонардо ж. Сиз аны Wire китепканасынын документтеринен текшере аласыз.

Сиз көрүнгөн жерден бир нерсени тартып жатасыз

Бул программалык камсыздоо маселеси. Кээ бир координаттарды туура эмес эсептөө үчүн чийме функцияларын колдонууда бул абдан кеңири таралган, ошондуктан сиздин чиймеңиз деформацияланат же эң начар сценарийде ал толугу менен сахнадан чыгып кетиши мүмкүн. Өзүңүздүн эсептөөлөрүңүздү карап чыгып, эмне болуп жатканын көрүү үчүн этап -этабы менен чийме жасоого аракет кылыңыз.

Текст такыр көрүнбөйт

Сиз тексттин түсүн коюуну унутуп калдыңыз же туура эмес мааниге койдуңуз

Тексттерди тартуудан мурун setTextColorго чалуу керек. Болбосо сизде каталар жок, бирок дисплейде эч нерсе көрбөйсүз. Ошондой эле, тексттин өңүн фон түсү менен бирдей койсоңуз болот.

Сиз абдан чоң шрифтти колдонуп жатасыз

Эгерде сиз тексттин өлчөмүн өтө чоң мааниге койсоңуз, анда символдор көрүнгөн жерден толугу менен чыгып кетиши мүмкүн.

Дисплейдин өлчөмү жөнүндө компиляция катасы бар

Бул мен үчүн да болгон жана мен ойлойм, бул көбүңөр үчүн болмок. Бул скрипттин үстүнө киргизилген Adafruit_SSD1306.h аталыш файлынын ичинде аныкталган дисплей өлчөмүнүн туруктуу маанилеринен улам. Бул файл {your-project-folder} librarys / 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 // #define SSD1306_96_16 /*==================================== ===============================*/

12 -кадам: Эми эмне кылыш керек?

Чыгуу модулу катары OLED дисплей хобби долбоорлоруңузга профессионалдуу интерфейс менен камсыз кылууга чоң мүмкүнчүлүк берет. Сиз бул боюнча маанилүү маалыматтарды көрсөтүү үчүн же колдонуучуга эмне болуп жатканын билүү үчүн же бир нерсе кылуу керек болсо, төмөнкү идеяларды баштапкы чекит катары колдонуп көрсөңүз болот. Колдонуучу үчүн дисплейдеги билдирүүнү окуу кээ бир светодиоддор аркылуу долбоордун/түзмөктүн абалын чечмелөөдөн алда канча түшүнүктүү болмок.

Сиз баштапкы чекит катары эмне кыла аласыз:

  • Температура сенсорунун маанисин окуп, OLED модулунда көрсөтүңүз. Сиз ага басым же нымдуулук сенсорун кошуп, толук функционалдуу аба ырайы станциясынын долбоорун түзө аласыз.
  • Киргизүүчү түзмөк катары джойстик модулун колдонуп, дисплей модулуна бир нерсе тартканга аракет кылыңыз.
  • Чакыруу/кечигүү функциясы же Arduino үзгүлтүгүнүн ырааттуулугу менен дисплейге анимация тартууга аракет кылыңыз
  • Сиздин логотипти тутумуңуздун башталышында көрсөтүңүз (Adafruit Logo ордуна)

Комментарийлерде мага OLED дисплей модулун колдонуп эмне кылмаксыз (же буга чейин кылдыңыз) айтууну унутпаңыз.

Сунушталууда: