Мазмұны:

OLED дисплейі мен Arduino көмегімен қызықты: 12 қадам (суреттермен)
OLED дисплейі мен Arduino көмегімен қызықты: 12 қадам (суреттермен)

Бейне: OLED дисплейі мен Arduino көмегімен қызықты: 12 қадам (суреттермен)

Бейне: OLED дисплейі мен Arduino көмегімен қызықты: 12 қадам (суреттермен)
Бейне: Ресурсный тест OLED-дисплеев 2024, Шілде
Anonim
OLED дисплейі мен Arduino көмегімен қызықты
OLED дисплейі мен 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) арасында мәліметтерді тасымалдау үшін деректер алмасу шинасы ретінде жасаған. перифериялық чиптер. Бұл негізінен теледидар қосымшасына арналған. Қарапайымдылығының арқасында ол соншалықты танымал болды, ол біраз уақыттан кейін бір ПХД тақтасының құрамдас бөлігі болып табылмайтын және оған сым арқылы қосылған (мысалы, сенсорлар, процессорлар мен 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 128x64 OLED модулі:
  • 4 x Dupont кабелі:
  • 1 x минималды дәнекерленген тақта:

Amazon.com сілтемелері:

  • 1 x Arduino Uno:
  • 1 x 128x64 OLED модулі:
  • 4 x Dupont кабелі:
  • 1 x мини дәнекерленбеген тақта:

4 -қадам: OLED дисплей модулін Arduino -ға қосу

OLED дисплей модулін Arduino -ға қосу
OLED дисплей модулін Arduino -ға қосу
OLED дисплей модулін Arduino -ға қосу
OLED дисплей модулін Arduino -ға қосу
OLED дисплей модулін Arduino -ға қосу
OLED дисплей модулін Arduino -ға қосу
OLED дисплей модулін Arduino -ға қосу
OLED дисплей модулін Arduino -ға қосу

I2C қосылған құрылғылар туралы маңызды ескерту - оларды Arduino -ға қосу әдісі бірдей. Себебі Arduino өзінің I2C байланысын тек арнайы түйреуіштерде жүргізеді. Бұл оқулықта мен Arduino Uno қолданамын. Arduino Uno A5 түйреуішін SCK ретінде және A4 SDA ретінде пайдаланады. Осылайша біз OLED дисплей модулін Arduino Uno -ға схемалық түрде көрсетілгендей қосамыз. Менің OLED дисплей модулінен түсірген суретте байқағаныңыздай, VCC мен GND қосқышы схемалық көріністен өзгеше. Оны дұрыс қосқаныңызға көз жеткізу үшін модульдердегі түйреуіштердің жапсырмаларын тексеруді ұмытпаңыз.

Бізге төмендегідей жалғанатын 4 түйреуіш қажет:

Arduino VCC -> OLED VCC модулі

Arduino GND -> GLE OLED модулі

Arduino 4 -> SDA OLED модулі

Arduino 5 -> SCLE OLED модулі

5 -қадам: Дисплей модулінің адресін табу

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

I2C қосылған құрылғыға қосылудың бірінші қадамы ретінде сізде модульдің адресі болуы керек. Мұны істеу үшін модульді Arduino -ға қосқаннан кейін, Arduino -ға бекітілген кодты жүктеу керек. Бұл код W2 кітапханасын қамтиды, ол I2C байланысын басқаратын Arduino IDE құрамындағы кітапхана. Ол қосылған I2C құрылғыларын сканерлеуге тырысады және олардың адрестерін сериялық порт арқылы компьютерге жібереді. Осылайша сіз оның шығуына Arduino IDE сериялық монитор құралы арқылы қол жеткізе аласыз. Түпнұсқа нұсқасы Arduino ойын алаңында бар). Сондай -ақ, сіз оны менің онлайн Arduino редакторымнан оқылатын түрде қарай аласыз. Бұл код жұмыс істеп тұрғанда экранда ештеңе көрсетілмейді деп күтпеңіз.

Суретте көріп тұрғандай, менің модульім 0x3C адресімен байланысқан. Әдетте белгілі бір өнім желісіндегі барлық құрылғылардың (мысалы, барлық 128x64 OLED модульдерінің) мекен -жайы бірдей.

I2C құрылғыларының адрестері 1 -ден 126 -ға дейін шектелген. Бұл код әр құрылғыға кезекпен қосылуға тырысады (деректерді жібермей), содан кейін берілген кітапханаға берілген адресті қосуда қате бар -жоғын тексеріңіз. Егер қате болмаса, қосылуға болатын модуль ретінде мекенжайды басып шығарады. Айта кету керек, алғашқы 15 мекенжай сақталған, сондықтан ол олардың үстінен секіреді және осы ауқымнан жоғары мекенжайларды басып шығарады. Есіңізде болсын, бұл I2C модульдерінің адресі құрылғыда қатты кодталған және оны өзгерту мүмкін емес. Сканер кодын келесі рет іске қосудың қажеті болмайтындай етіп, оны зертханалық сөреге қайта қоятын болсаңыз, оны бір жерге жазу немесе модульге белгі қою жақсы болар еді. Алайда бұл күрделі процесс емес;)

6 -қадам: OLED модулінде деректерді көрсету үшін қажет кітапханаларды орнату

OLED модулінде деректерді көрсету үшін қажет кітапханаларды орнату
OLED модулінде деректерді көрсету үшін қажет кітапханаларды орнату
OLED модулінде деректерді көрсету үшін қажет кітапханаларды орнату
OLED модулінде деректерді көрсету үшін қажет кітапханаларды орнату

Wire кітапханасы I2C құрылғыларымен төмен деңгейдегі байланысты басқара алады. Деректерді оқу/жазу үшін белгілі бір құрылғыға қосылғыңыз келсе, әдетте сіз осы модульді жасаған компания ұсынған кітапхананы қолданасыз. Бұл кітапхана I2C байланысының барлық мәліметтерін берілген модульмен өңдейді және біздің бизнеске көбірек көңіл бөлуге мүмкіндік береді, бұл жағдайда бұл деректерді біз қалағандай көрсетеді.

Мұндай дисплей модульдерінің түпнұсқасын шығаратын Adafruit компаниясы осы монохромды дисплейлердегі деректерді көрсету үшін Adafruit SSD1306 деп аталатын кітапханаларды ұсынады. Сондықтан кодтауды бастамас бұрын, біз бұл кітапхананы Arduino IDE -де Кітапхана менеджері арқылы (Sketch> Кітапхананы қосу> Кітапханаларды басқару … мәзірі арқылы алуға болады) орнатуымыз керек. Adafruit GFX кітапханасы деп аталатын, төменгі деңгейдегі графикалық материалдарды өңдейтін және Adafruit SSD1306 ішінде пайдаланылатын басқа кітапхана бар. Сіз олардың екеуін де Arduino IDE -ге суреттерде көріп тұрғандай орнатуыңыз керек.

7 -қадам: Дисплей модулін инициализациялау

Дисплей модулін инициализациялау
Дисплей модулін инициализациялау

Дисплейдегі сурет Adafruit_SSD1306 деп аталатын сыныпқа оралған. Бұл сыныптың анықтамасы Adafruit кітапханасында, сондықтан біз алдымен осы кітапхананы қосуымыз керек. Содан кейін біз алдымен осы сыныптың данасын жасауымыз керек. Бұл сыныптың конструкторы дискіні қалпына келтіруге болатын порт нөмірін алады, ол 4 -штырь (SCK -ге қосылған). Кодтың бұл бөлігі файлдың басында орналасуы керек (баптаудан тыс () және цикл () функциялары).

#қосу

Adafruit_SSD1306 дисплейі (4);

Енді setup () функциясында I2C адресін төмендегідей жіберу арқылы дисплей объектісінің бастау функциясын шақыру керек (SSD1306_SWITCHCAPVCC - бұл кітапханаға қуат көзінің түрін көрсететін тұрақты мән):

жарамсыз орнату () {

display.begin (SSD1306_SWITCHCAPVCC, 0x3C); display.display (); } void loop () {} // цикл әзірге бос болуы мүмкін

Енді дисплей нысаны дайын және біз оның функцияларын шақыра аламыз (мысалы, display.write (), display.drawLine және т.б.). Маңызды ескерту - біз дисплей объектісіне қоңырау шалу арқылы бірдеңе тартатын болсақ, нақты сызбаны аппараттық деңгейде жүзеге асыру үшін display.display () функциясына қоңырау шалу керек. Бұл негізінен біз шақыратын сызу функциялары өнімділік себептері бойынша дисплейдің «жадында» көрінісін жаңартумен байланысты. Бұл іс жүзінде жадыдағы өзгерістерді кэштейді. Сондықтан біз экранда бірдеңе салуды аяқтаған кезде display () функциясына қоңырау шалуды ұмытпауымыз керек.

display.write (…); // жадында жаңартуды жалғастырады

display.drawLine (…); // жадында жаңартуды жалғастырады. display.display (); // дисплейдің аппараттық құралындағы барлық өзгерістерді жояды

Егер сіз осы кодты жүктеуге тырыссаңыз, Adafruit Industries логотипі көрсетілетінін байқайсыз. Сіз мұны кім суреттегенін сұрауыңыз мүмкін! Adafruit кітапханасы осылай жасайды. Ол модульдің жадын инициализациялайды (дисплейдің аппараттық құралдарының жадында) бұл компанияның логотипімен. Егер сіз инициализация кезінде мұны көргіңіз келмесе, орнату функциясында display.display () функциясын шақырар алдында display.clearDisplay () функциясына қоңырау шалуға болады. Бұл функция, аты айтып тұрғандай, дисплейді толығымен тазартады.

#қосу

Adafruit_SSD1306 дисплейі (4); void setup () {display.begin (SSD1306_SWITCHCAPVCC, 0x3C); display.clearDisplay (); display.display (); } void цикл () {}

Adafruit_SSD1306 кітапханасының құжаттамасына сүйене отырып, дисплейге сурет салу немесе ондағы пикселдерді тікелей басқару үшін осы сынып ұсынған әр түрлі функцияларды қолдануға болады. Келесі бөлімдерде біз олардың әрқайсысына мысал келтіруге тырысамыз, осылайша сіз оның қалай жұмыс істейтіні туралы түсінік аласыз. Бұл мысалдардың көпшілігі қарапайым статикалық мазмұнды көрсетеді, сондықтан біз оларды setup () функциясының ішіне енгізе аламыз (инициализация кодынан кейін). Осылайша, ол тек бір рет іске қосылады және сол жерде қалады.

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); 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 (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, ені, биіктігі, 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 түрінде ұсынылған. 1s - түстің болуын, ал 0 - бос кеңістікті білдіреді. Сіз осы форматтағы Arduino логотипінің мысалын осы бөлімнің жоғарғы жағында көре аласыз. Нүктелік кескіннің суретін салу функциясы - display.drawBitmap (topLeftX, topLeftY, imageData, ені, биіктігі, түсі). ImageData параметрі - бұл байттардағы сандар жиыны. Әр байтта 8 бит бар, сондықтан әрбір байт суреттің 8 пиксельдік деректерін қамтиды. Кескіннің ені мен биіктігін көрсете отырып, drawBitmap функциясы пикселдердің келесі жолы қай биттен басталатынын біледі.

Менің кескінімді осы форматқа түрлендірудің шешімі - менің суретті ASCII таңбалар жиынтығына түрлендіру үшін алдымен «суретті ASCII түрлендіргіштеріне» (мысалы, https://my.asciiart.club) пайдалану керек болды. бос орын үшін пайдаланылатын таңбалар - 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 мекенжайы дұрыс емес шығар

Display.begin () функциясындағы i2c-сканер кодындағы мекенжайды дисплей нысанын орнатқан кезде орнатқаныңызға көз жеткізіңіз.

SCL мен SDA дұрыс қосылмаған

Бұл іс жүзінде мен үшін болды. Егер сіз Arduino Uno қолдансаңыз, олардың менікімен бірдей екеніне көз жеткізу үшін қосылымдарды қайта тексеру қажет. Егер сіз басқа Arduino шығарылымын қолдансаңыз (мысалы, Мега, Леонардо және т.б.), олардың I2C басқа түйреуіштерге орнатылғанын білуіңіз керек. Сіз оны 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 // #SSD1306_96_16 анықтаңыз /*==================================== ===============================*/

12 -қадам: Әрі қарай не істеу керек?

Шығу модулі ретінде OLED дисплейі сіздің хобби жобаларына кәсіби көрінетін интерфейспен қамтамасыз етуге үлкен мүмкіндік береді. Сіз бұл туралы маңызды ақпаратты көрсету үшін пайдаланушыға не болып жатқанын немесе оған бірдеңе істеу керек екенін білуге көмектесу үшін келесі идеяларды бастауға болады. Кейбір жарық диодтары арқылы жобаның/құрылғының күйін түсіндіруден гөрі, пайдаланушыға дисплейде хабарламаны оқу әлдеқайда түсінікті болар еді.

Сіз бастапқы нүкте ретінде не істей аласыз:

  • Температура сенсорының мәнін оқып, оны OLED модулінде көрсетіңіз. Сіз оған қысым немесе ылғалдылық датчигін қосып, толық функционалды ауа райы станциясының жобасын жасай аласыз.
  • Кіріс құрылғысы ретінде джойстик модулін пайдаланып дисплей модуліне бірдеңе салуға тырысыңыз.
  • Дисплейде функционалды қоңырауларды немесе кешіктіруді немесе Arduino үзілісінің тізбегі бойынша анимация салуға тырысыңыз
  • Өзіңіздің логотипіңізді жүйені іске қосқанда көрсетіңіз (Adafruit логотипінің орнына)

Түсініктемелерде маған OLED дисплей модулін қолданып не істер едіңіз (немесе сіз не істедіңіз) айтуды ұмытпаңыз.

Ұсынылған: