Obsah:

Zábava s OLED displejom a Arduino: 12 krokov (s obrázkami)
Zábava s OLED displejom a Arduino: 12 krokov (s obrázkami)

Video: Zábava s OLED displejom a Arduino: 12 krokov (s obrázkami)

Video: Zábava s OLED displejom a Arduino: 12 krokov (s obrázkami)
Video: Ультразвуковой сонар с HC-SR04, сервоприводом, SSD1306 128x64 OLED и NodeMCU ESP32S на Arduino IDE 2024, Júl
Anonim
Zábava s OLED displejom a Arduino
Zábava s OLED displejom a Arduino

Som si celkom istý, že ste určite počuli o technológii OLED displeja. Je relatívne nový a ponúka lepšiu kvalitu ako stará technológia LCD. V tomto návode sa chceme pozrieť na kroky potrebné na zobrazenie údajov na jednom z najbežnejších jednofarebných zobrazovacích modulov OLED dostupných na trhu. Pokúsim sa vysvetliť funkcie, ktoré poskytuje zodpovedajúca knižnica Adafruit na zobrazenie údajov v tomto module.

Krok 1: Aké moduly OLED použijeme?

Aké moduly OLED použijeme?
Aké moduly OLED použijeme?
Aké moduly OLED použijeme?
Aké moduly OLED použijeme?
Aké moduly OLED použijeme?
Aké moduly OLED použijeme?

Moduly OLED sú k dispozícii v rôznych veľkostiach a funkciách. Ten, ktorý použijeme v tomto návode, je mono farebný modul OLED s rozlíšením 128 x 64 pixlov. Tento typ modulu je k dispozícii v nasledujúcich veľkostiach (aby ste videli na obrázkoch):

  • 128 x 64
  • 128 x 32
  • 96 x 16
  • 64 x 48
  • 64 x 32

Pretože všetky tieto moduly podporujú protokol I2C ako prostriedok komunikácie, kód a zapojenie všetkých z nich je úplne rovnaký. Jediným rozdielom je, že v kóde musíte vziať do úvahy veľkosť displeja, aby sa naň obsah, ktorý chcete zobraziť, správne zmestil.

Krok 2: I2C v skratke

I2C v skratke
I2C v skratke

Interintegrovaný obvod (IIC), ktorý sa bežne nazýva I2C (I na druhú C), vyvinutý spoločnosťou Philips v 80. rokoch ako zbernica výmeny údajov používaná na prenos údajov medzi centrálnou procesorovou jednotkou (CPU) alebo mikrokontrolérovou jednotkou (MCU) zariadenia a periférne čipy. V zásade to bolo určené pre televízne aplikácie. Vďaka svojej jednoduchosti sa stal tak populárnym, že sa po chvíli stal jedným z primárnych mechanizmov prenosu údajov pre CPU a MCU a periférne zariadenia, ktoré nie sú nevyhnutnou súčasťou tej istej dosky plošných spojov a sú k nemu pripojené pomocou drôtu (napr. Senzory, zobrazovacie moduly atď.).

I2C pozostáva z komunikačnej zbernice vyrobenej z dvoch drôtov, ktorá podporuje obojsmerný prenos údajov medzi hlavným a niekoľkými podradenými zariadeniami. Hlavný uzol má zvyčajne na starosti riadenie zbernice - čo sa v skutočnosti robí generovaním synchronizačného signálu na sériovej hodinovej linke (SCL). Je to signál, ktorý by bol odosielaný nepretržite masterom počas prenosu a všetky ostatné uzly pripojené k zbernici ho budú používať na synchronizáciu ich komunikácie a zisťovanie rýchlosti zbernice. Dáta sa prenášajú medzi nadriadeným a podradeným zariadením cez sériovú dátovú linku (SDA). Prenosová rýchlosť môže byť až 3,4 Mbps. Všetky zariadenia, ktoré chcú prenášať údaje cez I2C, by mali mať jedinečnú adresu a môžu fungovať ako vysielač alebo prijímač v závislosti od funkcie zariadenia. Napríklad OLED zobrazovací modul je prijímač, ktorý prijíma niektoré údaje a zobrazuje ich, zatiaľ čo teplotný senzor je transceiver, ktorý odosiela zachytenú teplotu cez zbernicu I2C. Spravidla je hlavným zariadením zariadenie, ktoré iniciuje prenos údajov na zbernici a generuje hodinové signály, ktoré umožňujú prenos. Počas tohto prenosu sa akékoľvek zariadenie adresované týmto masterom považuje za podradené a číta tieto údaje.

Keď uzol chce odoslať nejaké údaje, úplne prvým bajtom údajov by mala byť adresa prijímača a potom nasledujú skutočné údaje. To znamená, že na odoslanie údajov na výstupné zariadenie pomocou I2C (napr. Zobrazovací modul I2C OLED) by sme mali najskôr nájsť jeho adresu I2C a to je to, čo v ďalších krokoch urobíme ako prvé.

Ak vás zaujíma viac informácií o podrobnostiach a teóriách o zbernici I2C, môžete použiť nasledujúce referencie:

www.i2c-bus.org

learn.sparkfun.com/tutorials/i2c

Krok 3: Požadované moduly a komponenty

Požadované moduly a komponenty
Požadované moduly a komponenty
Požadované moduly a komponenty
Požadované moduly a komponenty
Požadované moduly a komponenty
Požadované moduly a komponenty

Tu nájdete zoznam komponentov, ktoré budete potrebovať na dokončenie tohto tutoriálu:

Odkazy na eBay:

  • 1 x Arduino Uno:
  • 1 x modul OLED 128x64:
  • 4 x kábel Dupont:
  • 1 x Mini spájkovačka bez spájkovania:

Odkazy na Amazon.com:

  • 1 x Arduino Uno:
  • 1 x modul OLED 128x64:
  • 4 x kábel Dupont:
  • 1 x Mini spájkovačka bez spájkovania:

Krok 4: Pripojenie OLED zobrazovacieho modulu k Arduinu

Zapojenie OLED zobrazovacieho modulu k Arduinu
Zapojenie OLED zobrazovacieho modulu k Arduinu
Zapojenie OLED zobrazovacieho modulu k Arduinu
Zapojenie OLED zobrazovacieho modulu k Arduinu
Zapojenie OLED zobrazovacieho modulu k Arduinu
Zapojenie OLED zobrazovacieho modulu k Arduinu
Zapojenie OLED zobrazovacieho modulu k Arduinu
Zapojenie OLED zobrazovacieho modulu k Arduinu

Dôležitou poznámkou o zariadeniach s podporou I2C je, že spôsob, akým by ste ich mali pripojiť k Arduinu, je rovnaký. Dôvodom je, že Arduino prevádzkuje svoju komunikáciu I2C iba na konkrétnych kolíkoch. V tomto návode používam Arduino Uno. Arduino Uno používa pin A5 ako SCK a A4 ako SDA. Takže môžeme displejový modul OLED pripojiť k Arduino Uno, ako je znázornené na schematickom zobrazení. Ako si môžete všimnúť na obrázku, ktorý som urobil z môjho zobrazovacieho modulu OLED, konektor pre VCC a GND sa líši od schematického zobrazenia. Nezabudnite skontrolovať štítky pinov na svojich moduloch, aby ste sa presvedčili, že ich pripájate správnym spôsobom.

Potrebujeme iba 4 piny, ktoré by mali byť prepojené nasledovne:

Arduino VCC -> OLED modul VCC

Arduino GND -> OLED modul GND

Arduino 4 -> OLED modul SDA

Arduino 5 -> OLED modul SCK

Krok 5: Nájdenie adresy zobrazovacieho modulu

Zistenie adresy zobrazovacieho modulu
Zistenie adresy zobrazovacieho modulu

Ako prvý krok k pripojeniu k zariadeniu s podporou I2C musíte zadať adresu modulu. Aby ste to urobili, po zapojení modulu do vášho Arduina by ste mali jednoducho nahrať priložený kód do svojho Arduina. Tento kód obsahuje knižnicu Wire, ktorá je súčasťou systému Arduino IDE a ktorý spracováva komunikáciu I2C. Pokúša sa skenovať pripojené zariadenia I2C a odoslať ich adresu cez sériový port do vášho počítača. K jeho výstupu sa teda môžete dostať pomocou nástroja Serial Monitor v Arduino IDE. Pôvodná verzia je k dispozícii na Arduino Playground). Tiež si to môžete pozrieť čitateľnejšie v mojom online Arduino editore. Keď je tento kód spustený, nečakajte, že sa na obrazovke niečo zobrazí.

Ako vidíte na obrázku, môj modul je viazaný na adresu 0x3C. Normálne majú všetky zariadenia v konkrétnom produktovom rade (napríklad všetky moduly OLED s rozlíšením 128 x 64) rovnakú adresu.

Adresy zariadení I2C sú obmedzené od 1 do 126. Tento kód sa jednoducho pokúša pripojiť ku každému zariadeniu v uvedenom poradí (bez prenosu akýchkoľvek údajov) a potom skontrolovať, či základná knižnica nenahlásila žiadnu chybu pri pripájaní k poskytnutej adrese. Ak nie je žiadna chyba, vytlačí adresu ako dostupný modul na pripojenie. Tiež je potrebné poznamenať, že prvých 15 adries je rezervovaných, takže ich preskočí a vytlačí iba tie, ktoré sú nad týmto rozsahom. Nezabudnite, že adresa týchto modulov I2C je v zariadení naprogramovaná pevne a nemožno ju zmeniť. Preto by bolo vhodné si to niekde zapísať alebo nalepiť štítok na modul, keď ho chcete vrátiť na laboratórnu poličku, aby ste nabudúce spustenie kódu skenera nemuseli potrebovať. Nie je to však zložitý postup;)

Krok 6: Inštalácia knižníc potrebných na zobrazenie údajov na module OLED

Inštalácia knižníc potrebných na zobrazenie údajov na module OLED
Inštalácia knižníc potrebných na zobrazenie údajov na module OLED
Inštalácia knižníc potrebných na zobrazenie údajov na module OLED
Inštalácia knižníc potrebných na zobrazenie údajov na module OLED

Knižnica Wire zvládne nízkoúrovňovú komunikáciu so zariadeniami I2C. Ak sa chcete pripojiť k konkrétnemu zariadeniu a čítať z neho/naň údaje, obvykle by ste použili knižnicu poskytovanú spoločnosťou, ktorá tento modul pôvodne postavila. Táto knižnica spracováva všetky podrobnosti o komunikácii I2C s daným modulom a umožňuje nám zamerať sa viac na naše podnikanie, ktoré v tomto prípade zobrazuje údaje tak, ako chceme.

Adafruit, spoločnosť, ktorá vyrába pôvodnú verziu takýchto zobrazovacích modulov, poskytuje knižnice s názvom Adafruit SSD1306 na zobrazenie údajov na týchto monochromatických displejoch. Pred začatím kódovania teda musíme nainštalovať túto knižnicu prostredníctvom Správcu knižníc (prístupného prostredníctvom ponuky Skica> Zahrnúť knižnicu> Spravovať knižnice …) v Arduino IDE. Existuje aj ďalšia knižnica s názvom Adafruit GFX Library, ktorá spracováva viac grafických prvkov nižšej úrovne a interne ju používa Adafruit SSD1306. Obidva musíte mať nainštalované vo svojom Arduino IDE, ako vidíte na obrázkoch.

Krok 7: Inicializácia zobrazovacieho modulu

Inicializácia zobrazovacieho modulu
Inicializácia zobrazovacieho modulu

Modul kresby na displeji je zaradený do triedy s názvom Adafruit_SSD1306. Definícia tejto triedy je v knižnici Adafruit, takže túto knižnicu musíme najskôr zahrnúť. Potom musíme najskôr vytvoriť inštanciu tejto triedy. Konštruktor tejto triedy preberá číslo portu, na ktorom by bolo možné resetovať displej, čo je pin 4 (pripojený k SCK). Táto časť kódu by mala byť umiestnená na začiatku súboru (mimo funkcií setup () a loop ()).

#zahrnúť

Displej Adafruit_SSD1306 (4);

Teraz vo funkcii setup () by sme mali zavolať funkciu begin objektu zobrazenia odovzdaním našej adresy I2C nasledujúcim spôsobom (SSD1306_SWITCHCAPVCC je konštantná hodnota určujúca typ zdroja energie do knižnice):

neplatné nastavenie () {

display.begin (SSD1306_SWITCHCAPVCC, 0x3C); display.display (); } void loop () {} // loop môže byť zatiaľ prázdny

Teraz je objekt zobrazenia pripravený a môžeme volať jeho funkcie (napr. Display.write (), display.drawLine atď.). Dôležitá poznámka je, že kedykoľvek niečo nakreslíme zavolaním na náš objekt displeja, musíme zavolať funkciu display.display (), aby sa skutočné kreslenie uskutočnilo na hardvérovej úrovni. Je to hlavne kvôli tomu, že kresliace funkcie, ktoré nazývame, z dôvodov výkonu stačí aktualizovať zobrazenie „v pamäti“displeja. V skutočnosti ukladá zmeny v pamäti. Keď sme teda niečo nakreslili na obrazovku, mali by sme vždy pamätať na to, aby sme zavolali funkciu display ().

display.write (…); // stále sa aktualizuje v pamäti

display.drawLine (…); // stále sa aktualizuje v pamäti. display.display (); // vymaže všetky zmeny hardvéru displeja

Ak sa v tomto kroku pokúsite nahrať svoj kód, všimnete si, že sa zobrazí logo Adafruit Industries. Môžete sa čudovať, kto to požiadal, aby to nakreslil! V skutočnosti to robí knižnica Adafruit. Inicializuje pamäť modulu (reprezentácia hardvéru displeja v pamäti) logom tejto spoločnosti. Ak to počas inicializácie nechcete vidieť, môžete skúsiť zavolať funkciu display.clearDisplay () tesne pred volaním display.display () vo vašej funkcii nastavenia. Táto funkcia, ako naznačuje jej názov, úplne vyčistí displej.

#zahrnúť

Displej Adafruit_SSD1306 (4); neplatné nastavenie () {display.begin (SSD1306_SWITCHCAPVCC, 0x3C); display.clearDisplay (); display.display (); } prázdna slučka () {}

Na základe dokumentácie knižnice Adafruit_SSD1306 môžete na kreslenie na displeji alebo priamo manipulovať s pixelmi na ňom použiť rôzne funkcie poskytované touto triedou. V nasledujúcich častiach sa pokúsime uviesť príklad pre každú z nich, aby ste mali predstavu o tom, ako to funguje. Väčšina týchto príkladov zobrazí iba jednoduchý statický obsah, takže ich môžeme vložiť do našej funkcie setup () (za inicializačný kód). Ak tak urobíte, spustí sa iba raz a zostane tam.

Krok 8: Zobrazte jednoduchý text

Zobrazte jednoduchý text
Zobrazte jednoduchý text
Zobrazte jednoduchý text
Zobrazte jednoduchý text
Zobrazte jednoduchý text
Zobrazte jednoduchý text

Na zobrazenie textu môžeme použiť jednoduchú funkciu knižnice display.println (). Prijme text ako reťazec a pokúsi sa ho zobraziť. Je dôležité vedieť, že musíme knižnici povedať, kde na displeji ukážeme text. Každý pixel na displeji má súradnicu, ktorá je zadaná pomocou X a Y. X sa zvyšuje zľava doprava a Y sa zvyšuje zhora nadol. Ľavý horný roh obrazovky je (X = 0, Y = 0) a pravý dolný roh je (X = 127, Y = 63). Súradnice rohov som si všimol na prvom obrázku. Na určenie, kde na displeji budeme zobrazovať text, môžeme použiť funkciu display.setCursor ().

Ďalšou vlastnosťou textu je jeho farba. Farbu môžeme špecifikovať pomocou display.setTextColor () ako je zobrazené na nasledujúcej ukážke.

display.clearDisplay ();

display.setTextColor (BIELY); display.setCursor (35, 30); display.println („Hello World!“); display.display ();

Na zobrazenie jedného znaku môžeme použiť aj funkciu display.write (). Prijíma kód znaku ako typ uint8_t a zobrazuje znak zodpovedajúci tomuto kódu v reťazci. Napríklad, ak chceme pomocou tejto funkcie zobraziť rovnaký reťazec, môžeme použiť nasledujúci úryvok:

display.clearDisplay ();

display.setTextColor (BIELY); 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 ();

Je tiež možné kresliť texty v čiernej farbe s bielym pozadím. Ak to chcete urobiť, musíte zavolať funkciu display.setTextColor, ako je uvedené nižšie:

display.clearDisplay ();

// Nastaví farbu na čiernu s bielym pozadím display.setTextColor (ČIERNA, BIELA); display.setCursor (25, 30); display.println („Prevrátený text!“); display.display ();

Tiež máte možnosť nastaviť veľkosť textu pomocou funkcie display.setTextSize (). Prijíma celé číslo ako veľkosť. Čím väčšie číslo, tým väčší bude text. Najmenšia veľkosť je 1, čo je predvolená veľkosť textov. Nasledujúci kód sa pokúša napísať písmeno „A“v 6 rôznych veľkostiach:

display.clearDisplay ();

display.setTextColor (BIELY); 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 ();

Krok 9: Kreslenie základných tvarov

Kreslenie základných tvarov
Kreslenie základných tvarov
Kreslenie základných tvarov
Kreslenie základných tvarov
Kreslenie základných tvarov
Kreslenie základných tvarov

Kreslenie základných tvarov, ako je obdĺžnik, kruh, trojuholník, čiara alebo bod, je veľmi jednoduché a pre každý z nich existuje špeciálna funkcia.

Kresliaca čiara

Ak chcete nakresliť čiaru, môžete zavolať na display.drawLine (startX, startY, endX, endY, color). Nasledujúci kód napríklad nakreslí na obrazovke diagonálne čiary tak, aby tvarovali veľké 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 ();

K šírke a výške displeja sa dostanete pomocou funkcií display.width () a display.height (). Váš kód by tak bol nezávislý na veľkosti obrazovky.

Kresliaci obdĺžnik

Funkciou na kreslenie obdĺžnika je display.drawRect (upperLeftX, upperLeftY, šírka, výška, farba). Tu je kód, ktorý na niektorých náhodných miestach nakreslí tri obdĺžniky:

display.clearDisplay ();

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

Zavolaním display.fillRect (upperLeftX, upperLeftY, šírka, výška, BIELA) môžete nakresliť obdĺžnik vyplnený zadanou farbou. Tiež treťou funkciou v tomto prípade je display.drawRoundRect (upperLeftX, upperLeftY, šírka, výška, cornerRadius, farba), ktorá, ako vidíte na obrázku, slúži na nakreslenie obdĺžnika s okrúhlymi rohmi. Prijíma ďalší parameter pred farbou, ktorý je celočíselným číslom označujúcim polomer rohu. Čím väčšia hodnota, tým zaoblenejší roh. Má tiež zodpovedajúcu funkciu výplne s názvom display.drawFillRoundRect, o ktorej si myslím, že môžete hádať, čo robí.

Kruh na kreslenie

Funkcia je display.drawCircle (centerX, centerY, radius, color). Tu je príklad, ktorý kreslí tvar podobný smajlíku:

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

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

Rovnako ako obdĺžniky môžete pomocou funkcie display.fillCircle nakresliť kruh vyplnený danou farbou.

Kresliaci trojuholník

Ahh, opäť funkcia s názvom display.drawTriangle (poin1X, point1Y, point2X, point2Y, point3X, point3Y, color) a zodpovedajúci display.fillTriangle, ktorý nakreslí vyplnený trojuholník.

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

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

Nakreslite bod

Môžete tiež zafarbiť konkrétny bod (ktorý sa nazýva pixel) na obrazovke pomocou funkcie display.drawPixel (pixelX, pixelY, color).

display.drawPixel (20, 35, BIELY);

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

Krok 10: Nakreslenie obrázku

Kresliaci obrázok
Kresliaci obrázok
Kresliaci obrázok
Kresliaci obrázok

Kreslenie obrázku je iné a trochu komplikované. Pretože je zobrazovací modul jednofarebný, musíme najskôr previesť náš obrázok do formátu, ktorý sa nazýva monochromatická bitová mapa (nazýva sa aj čiernobielo). V takom formáte je každý pixel obrázku prezentovaný buď 0 alebo 1. 1 s znamená existenciu farby a 0 s znamená prázdne miesto. V hornej časti tejto sekcie môžete vidieť príklad loga Arduino v tomto formáte. Funkciou na kreslenie bitmapového obrázku je display.drawBitmap (topLeftX, topLeftY, imageData, šírka, výška, farba). Parameter imageData je pole čísel v bajtoch. Každý bajt má 8 bitov, takže každý bajt obsahuje údaje 8 pixelov obrázku. Zadaním šírky a výšky obrázku funkcia drawBitmap bude vedieť, od ktorého bitu začína ďalší riadok pixelov.

Riešenie, ktoré som si zvolil previesť svoj obrázok do tohto formátu, bolo najskôr použiť jeden z online „prevodníkov obrazu na ASCII“(napr. Http://my.asciiart.club) na konverziu môjho obrázka na množinu znakov ASCII a potom nahradiť znaky použité pre prázdne miesto od 0 a ostatné pre 1. To je to, čo vidíte nižšie. 0 a 1 môžete považovať za pixel na displeji. Veľkosť obrázku by teda nemala prekročiť našu veľkosť displeja, ktorá je 128 x 64.

Poznámka: Použitie tejto techniky ASCII nie je odporúčaným prístupom, pretože v dôsledku pomeru strán znakov bude váš obraz zdeformovaný (znaky nie sú štvorcom). Túto techniku som vyskúšal len preto, že uľahčuje prevod obrázku do požadovaného formátu. V opačnom prípade by bolo možné dosiahnuť najlepší výsledok pomocou nejakého programovania alebo pomocou niektorých pomocných aplikácií, ktoré sú úplne mimo rozsah tohto textu.

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

Teraz by sme mali rozdeliť každý riadok na 8, predstavujúci bajt, a uložiť ich do poľa ako je uvedené nižšie:

static const unsigned char PROGMEM arduino_logo = {

B00000000, B00000000, B00000111, B11111111, B11111111, B11100000, B00000000, B00000000, B00000000, B00000000, B01111111, B11111111, B11111111, B11111110, B00000000, B00000000, … až do konca

Potom ho môžeme nakresliť na displeji zavolaním funkcie drawBitmap.

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

Krok 11: Riešenie problémov

Toto bol dlhý návod, a preto je veľmi pravdepodobné, že sa niečo pokazí. Tu je zoznam niektorých bežných chýb, s ktorými sa môžete stretnúť pri nastavovaní zobrazovacieho modulu OLED pre svoj projekt (niektoré z nich sa mi stali pri príprave tohto tutoriálu).

Vôbec nič sa nezobrazuje

To sa môže stať z mnohých dôvodov, preto navrhujem skontrolovať nasledujúci zoznam, ktorý je v poriadku, ktorý sa môže vo vašom projekte vyskytnúť:

Adresa I2C je pravdepodobne nesprávna

Pri nastavovaní objektu zobrazenia sa uistite, že ste zadali adresu, ktorú ste zadali vo funkcii i2c-scanner code in display.begin ().

SCL a SDA sú nesprávne zapojené

Vlastne sa mi to stalo. Ak používate Arduino Uno, musíte znova skontrolovať svoje pripojenia, aby ste sa uistili, že sú pripojené rovnako ako moje. Ak používate inú edíciu Arduino (napr. Mega, Leonardo atď.), Musíte vedieť, že môžu mať svoj I2C nastavený na iné piny. Môžete to skontrolovať v dokumentácii knižnice Wire.

Kreslíte niečo z viditeľnej oblasti

Ide o softvérový problém. Je to veľmi bežné pri použití funkcií kresby na nesprávny výpočet niektorých súradníc, takže by sa váš výkres zdeformoval alebo v najhoršom prípade mohol byť úplne mimo scénu. Skontrolujte svoje výpočty a pokúste sa nakresliť krok za krokom, aby ste zistili, čo sa deje.

Text sa vôbec nezobrazuje

Zabudli ste nastaviť farbu textu alebo ste ho nastavili na nesprávnu hodnotu

Pred kreslením textov musíte zavolať setTextColor. V opačnom prípade sa nezobrazia žiadne chyby, ale nič sa nezobrazí. Tiež ste mohli nastaviť farbu textu ako farbu pozadia.

Používate veľmi veľké písmo

Ak nastavíte veľkosť textu na veľmi veľkú hodnotu, je možné, že sa znaky úplne dostanú z viditeľnej oblasti.

Existuje chyba pri kompilácii veľkosti displeja

To sa stalo aj mne a myslím, že sa to stane väčšine z vás. Je to kvôli konštantným hodnotám veľkosti zobrazenia, ktoré sú definované v hlavičkovom súbore Adafruit_SSD1306.h, ktoré uvádzame na začiatku nášho skriptu. Tento súbor sa nachádza v priečinku {your-project-folder} libraries / Adafruit_SSD1306 / Adafruit_SSD1306.h. Ak otvoríte tento súbor, všimnete si, že v nižšie uvedenej časti je časť s komentármi, ktorá popisuje, že musíte odkomentovať iba konštantu, ktorá predstavuje veľkosť vášho zobrazovacieho modulu OLED. V prípade zobrazovacích modulov 128 x 64 by mal byť riadok #define SSD1306_128_64 odkomentovaný.

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

Displeje SSD1306 ------------------------------------------------ ---------------------- Ovládač sa používa na viacerých displejoch (128 x 64, 128 x 32 atď.). Nasledujúcim zvolením vhodného displeja vytvoríte primerane veľký framebuffer, atď. SSD1306_128_64 128x64 pixelový displej SSD1306_128_32 128x32 pixelový displej SSD1306_96_16 --------------------------- --------------------------------------------* / #define SSD1306_128_64 / / #define SSD1306_128_32 // #define SSD1306_96_16 /*=============================================== =================================*/

Krok 12: Čo robiť ďalej?

OLED displej ako výstupný modul vám môže poskytnúť skvelú príležitosť poskytnúť profesionálne vyzerajúce rozhranie vašim hobby projektom. Môžete skúsiť nasledovať nápady ako východiskový bod a zobraziť na nich zmysluplné údaje alebo pomôcť používateľovi zistiť, čo sa deje alebo či potrebuje niečo urobiť. Pre používateľa by bolo oveľa jasnejšie prečítať správu na displeji, ako interpretovať stav projektu/zariadenia prostredníctvom niektorých diód LED.

Ako východiskový bod môžete urobiť:

  • Prečítajte si hodnotu snímača teploty a zobrazte ju na module OLED. Môžete k nemu pridať snímač tlaku alebo vlhkosti a vytvoriť plne funkčný projekt meteorologickej stanice.
  • Skúste niečo nakresliť na modul displeja pomocou modulu joysticku ako vstupného zariadenia.
  • Skúste na displej nakresliť animáciu pomocou postupnosti kreslenia/oneskorenia volaní funkcií alebo prerušenia Arduina
  • Zobrazte svoje vlastné logo pri spustení systému (namiesto loga Adafruit)

Nezabudnite mi v komentároch povedať, čo by ste urobili (alebo ste už urobili) pomocou zobrazovacieho modulu OLED.

Odporúča: