Obsah:

Zábava s OLED displejem a Arduino: 12 kroků (s obrázky)
Zábava s OLED displejem a Arduino: 12 kroků (s obrázky)

Video: Zábava s OLED displejem a Arduino: 12 kroků (s obrázky)

Video: Zábava s OLED displejem a Arduino: 12 kroků (s obrázky)
Video: Arduino návody | OLED displej 128x32 SSD1306 I2C 2024, Červenec
Anonim
Zábava s OLED displejem a Arduino
Zábava s OLED displejem a Arduino

Jsem si jistý, že jste určitě slyšeli o technologii OLED displeje. Je relativně nový a nabízí lepší kvalitu než stará technologie LCD. V tomto tutoriálu chceme zkontrolovat kroky potřebné k zobrazení dat na jednom z nejběžnějších jednobarevných OLED zobrazovacích modulů dostupných na trhu. Pokusím se vysvětlit funkce poskytované odpovídající knihovnou Adafruit pro zobrazení dat v tomto modulu.

Krok 1: Jaké moduly OLED použijeme?

Jaké moduly OLED použijeme?
Jaké moduly OLED použijeme?
Jaké moduly OLED použijeme?
Jaké moduly OLED použijeme?
Jaké moduly OLED použijeme?
Jaké moduly OLED použijeme?

Moduly OLED jsou k dispozici v široké škále velikostí a funkcí. Ten, který použijeme v tomto tutoriálu, je jednobarevný modul OLED 128 x 64. Tento typ modulu je k dispozici v následujících velikostech (aby byly vidět na obrázcích):

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

Protože všechny tyto moduly podporují protokol I2C jako prostředek pro komunikaci, kód a zapojení všech je úplně stejné. Jediným rozdílem je, že musíte vzít v úvahu velikost displeje v kódu, aby se obsah, který budete zobrazovat, na něj správně vešel.

Krok 2: I2C v kostce

Stručně řečeno, I2C
Stručně řečeno, I2C

Interintegrovaný obvod (IIC), který se normálně nazývá I2C (I squared C) vyvinutý společností Philips v 80. letech jako sběrnice pro výměnu dat sloužící k přenosu dat mezi centrální procesorovou jednotkou (CPU) nebo mikrokontrolérovou jednotkou (MCU) zařízení a periferní čipy. V zásadě byl určen pro televizní aplikace. Díky své jednoduchosti se stal tak populárním, že se po chvíli stal jedním z hlavních mechanismů přenosu dat pro CPU a MCU a periferní zařízení, která nejsou nezbytnou součástí stejné desky plošných spojů a jsou k ní připojena pomocí kabelu (např. Senzory, zobrazovací moduly atd.).

I2C se skládá z komunikační sběrnice vyrobené ze dvou vodičů, které podporují obousměrný přenos dat mezi hlavním a několika podřízenými zařízeními. Hlavní uzel má obvykle na starosti řízení sběrnice - což se ve skutečnosti provádí generováním synchronizačního signálu na sériové hodinové lince (SCL). Je to signál, který by byl během přenosu nepřetržitě vysílán masterem a všechny ostatní uzly připojené ke sběrnici jej použily k synchronizaci své komunikace a detekci rychlosti sběrnice. Data jsou přenášena mezi masterem a slave přes linku sériových dat (SDA). Přenosová rychlost může být až 3,4 Mbps. Všechna zařízení, která chtějí přenášet data přes I2C, by měla mít jedinečnou adresu a mohou fungovat jako vysílač nebo přijímač v závislosti na funkci zařízení. Například OLED zobrazovací modul je přijímač, který přijímá některá data a zobrazuje je, zatímco teplotní senzor je transceiver, který odesílá zachycenou teplotu přes sběrnici I2C. Hlavní zařízení je obvykle zařízení, které iniciuje přenos dat na sběrnici a generuje hodinové signály, které umožňují přenos. Během tohoto přenosu je jakékoli zařízení adresované tímto masterem považováno za podřízené zařízení a čte tato data.

Když uzel chce odeslat nějaká data, úplně první bajt dat by měla být adresa přijímače a poté přicházejí skutečná data. To znamená, že abychom mohli odesílat data na výstupní zařízení pomocí I2C (např. I2C OLED zobrazovací modul), měli bychom nejprve zjistit jeho I2C adresu a to je to, co uděláme jako první v dalších krocích.

Pokud vás zajímá více o podrobnostech a teoriích o sběrnici I2C, můžete použít následující reference:

www.i2c-bus.org

learn.sparkfun.com/tutorials/i2c

Krok 3: Požadované moduly a součásti

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

Zde najdete seznam komponent, které byste potřebovali k dokončení tohoto kurzu:

odkazy na eBay:

  • 1 x Arduino Uno:
  • 1 x OLED modul 128x64:
  • 4 x kabel Dupont:
  • 1 x Mini nepájivá deska:

Odkazy na Amazon.com:

  • 1 x Arduino Uno:
  • 1 x OLED modul 128x64:
  • 4 x kabel Dupont:
  • 1 x mini pájecí deska bez pájky:

Krok 4: Zapojení OLED zobrazovacího modulu do Arduina

Zapojení OLED zobrazovacího modulu k Arduinu
Zapojení OLED zobrazovacího modulu k Arduinu
Zapojení OLED zobrazovacího modulu k Arduinu
Zapojení OLED zobrazovacího modulu k Arduinu
Zapojení OLED zobrazovacího modulu k Arduinu
Zapojení OLED zobrazovacího modulu k Arduinu
Zapojení OLED zobrazovacího modulu k Arduinu
Zapojení OLED zobrazovacího modulu k Arduinu

Důležitou poznámkou o zařízeních s podporou I2C je, že způsob, jakým byste je měli připojit k Arduinu, je stejný. Důvodem je, že Arduino provozuje svou I2C komunikaci pouze na konkrétních pinech. V tomto tutoriálu používám Arduino Uno. Arduino Uno používá pin A5 jako SCK a A4 jako SDA. Můžeme tedy připojit zobrazovací modul OLED k Arduino Uno, jak je znázorněno na schematickém zobrazení. Jak si můžete všimnout na obrázku, který jsem pořídil ze svého OLED zobrazovacího modulu, konektor pro VCC a GND se liší od schematického zobrazení. Nezapomeňte zkontrolovat štítky kolíků na vašich modulech, abyste se ujistili, že je připojujete správným způsobem.

Potřebujeme pouze 4 piny, které by měly být připojeny níže:

Arduino VCC -> OLED modul VCC

Arduino GND -> OLED modul GND

Arduino 4 -> OLED modul SDA

Arduino 5 -> OLED modul SCK

Krok 5: Nalezení adresy zobrazovacího modulu

Zjištění adresy zobrazovacího modulu
Zjištění adresy zobrazovacího modulu

Jako první krok k připojení k zařízení s podporou I2C musíte mít adresu modulu. Abyste to mohli udělat, po zapojení modulu do vašeho Arduina stačí nahrát přiložený kód do vašeho Arduina. Tento kód obsahuje knihovnu Wire, což je knihovna obsažená v Arduino IDE, která zpracovává komunikaci I2C. Pokouší se skenovat připojená zařízení I2C a odeslat jejich adresu přes sériový port do vašeho počítače. K jeho výstupu se tedy můžete dostat přes nástroj Serial Monitor v Arduino IDE. Původní verze je k dispozici na Arduino Playground). Také si jej můžete zobrazit čitelnějším způsobem v mém online editoru Arduino. Při spuštění tohoto kódu nečekejte, že se na obrazovce něco zobrazí.

Jak vidíte na obrázku, můj modul je vázán na adresu 0x3C. Normálně mají všechna zařízení v konkrétní produktové řadě (například všechny moduly OLED 128 x 64) stejnou adresu.

Adresy zařízení I2C jsou omezeny od 1 do 126. Tento kód se jednoduše pokouší připojit ke každému zařízení v pořadí (bez přenosu jakýchkoli dat) a poté zkontrolovat, zda při připojení k zadané adrese nedošlo k chybě hlášené základní knihovnou. Pokud nedojde k žádné chybě, vytiskne adresu jako dostupný modul pro připojení. Rovněž je třeba poznamenat, že prvních 15 adres je rezervováno, takže je přeskočí a vytiskne pouze ty, které jsou nad tímto rozsahem. Nezapomeňte, že adresa těchto modulů I2C je v zařízení pevně zakódována a nelze ji změnit. Bylo by tedy dobré si to někam zapsat nebo nalepit štítek na modul, když jej hodláte vrátit na laboratorní poličku, aby příště nebylo spuštění kódu skeneru nutné. Není to však složitý postup;)

Krok 6: Instalace knihoven požadovaných pro zobrazení dat na modulu OLED

Instalace knihoven požadovaných pro zobrazení dat na modulu OLED
Instalace knihoven požadovaných pro zobrazení dat na modulu OLED
Instalace knihoven vyžadovaných pro zobrazení dat na modulu OLED
Instalace knihoven vyžadovaných pro zobrazení dat na modulu OLED

Knihovna Wire zvládne komunikaci na nízké úrovni se zařízeními I2C. Pokud se chcete připojit ke konkrétnímu zařízení za účelem čtení/zápisu dat z/do něj, normálně byste použili knihovnu poskytovanou společností, která tento modul původně vytvořila. Tato knihovna zpracovává všechny podrobnosti komunikace I2C s daným modulem a umožňuje nám soustředit se více na naše podnikání, které v tomto případě zobrazuje data tak, jak chceme.

Adafruit, společnost, která vyrábí původní verzi takových zobrazovacích modulů, poskytuje knihovny s názvem Adafruit SSD1306 pro zobrazování dat na těchto monochromatických displejích. Než tedy začneme kódovat, musíme tuto knihovnu nainstalovat pomocí Správce knihoven (přístupné přes nabídku Skica> Zahrnout knihovnu> Spravovat knihovny …) v Arduino IDE. Existuje také další knihovna s názvem Adafruit GFX Library, která zpracovává více grafických věcí nízké úrovně a je interně používána Adafruit SSD1306. Oba musíte mít nainstalované na vašem Arduino IDE, jak vidíte na obrázcích.

Krok 7: Inicializace modulu displeje

Inicializace modulu zobrazení
Inicializace modulu zobrazení

Modul kreslení na displeji je zabalen do třídy s názvem Adafruit_SSD1306. Definice této třídy je v knihovně Adafruit, takže tuto knihovnu musíme nejprve zahrnout. Poté musíme nejprve vytvořit instanci instance této třídy. Konstruktor této třídy převezme číslo portu, na kterém by bylo možné resetovat displej, což je pin 4 (připojený k SCK). Tato část kódu by měla být umístěna na začátku souboru (mimo funkce setup () a loop ()).

#zahrnout

Displej Adafruit_SSD1306 (4);

Nyní uvnitř funkce setup () bychom měli zavolat funkci begin objektu zobrazení předáním naší adresy I2C, jak je uvedeno níže (SSD1306_SWITCHCAPVCC je konstantní hodnota určující typ zdroje energie do knihovny):

neplatné nastavení () {

display.begin (SSD1306_SWITCHCAPVCC, 0x3C); display.display (); } void loop () {} // smyčka může být prozatím prázdná

Nyní je objekt zobrazení připraven a můžeme volat jeho funkce (např. Display.write (), display.drawLine atd.). Důležitá poznámka je, že kdykoli něco nakreslíme voláním na náš objekt zobrazení, musíme zavolat funkci display.display (), aby se skutečné kreslení stalo na hardwarové úrovni. Je to dáno především tím, že kreslící funkce, které nazýváme, stačí z výkonnostních důvodů aktualizovat reprezentaci „v paměti“displeje. Ve skutečnosti ukládá změny do paměti. Když jsme tedy něco nakreslili na obrazovku, měli bychom vždy pamatovat na volání funkce display ().

display.write (…); // stále se aktualizuje v paměti

display.drawLine (…); // stále se aktualizuje v paměti. display.display (); // vyprázdní všechny změny hardwaru displeje

Pokud se v tomto kroku pokusíte nahrát svůj kód, všimnete si, že se zobrazí logo Adafruit Industries. Můžete se divit, kdo to požádal, aby to nakreslil! Ve skutečnosti to dělá knihovna Adafruit. Inicializuje paměť modulu (reprezentace hardwaru displeje v paměti) logem této společnosti. Pokud to během inicializace nechcete vidět, můžete zkusit zavolat funkci display.clearDisplay () těsně před voláním display.display () ve své funkci nastavení. Tato funkce, jak naznačuje její název, zcela vyčistí displej.

#zahrnout

Displej Adafruit_SSD1306 (4); neplatné nastavení () {display.begin (SSD1306_SWITCHCAPVCC, 0x3C); display.clearDisplay (); display.display (); } void loop () {}

Na základě dokumentace knihovny Adafruit_SSD1306 můžete použít různé funkce poskytované touto třídou k kreslení na displeji nebo přímo manipulovat s pixely na něm. V dalších částech se pokusíme uvést příklad pro každou z nich, abyste měli představu o tom, jak to funguje. Většina těchto příkladů zobrazí pouze jednoduchý statický obsah, takže je můžeme vložit do naší funkce setup () (za inicializační kód). Tím by to bylo spuštěno pouze jednou a zůstane tam.

Krok 8: Zobrazte jednoduchý text

Zobrazit jednoduchý text
Zobrazit jednoduchý text
Zobrazit jednoduchý text
Zobrazit jednoduchý text
Zobrazit jednoduchý text
Zobrazit jednoduchý text

K zobrazení textu můžeme použít jednoduchou funkci display.println () knihovny. Přijme text jako řetězec a pokusí se ho zobrazit. Je důležité vědět, že musíme knihovně sdělit, kde na displeji budeme text prezentovat. Každý pixel na displeji má souřadnici, která je zadána pomocí X a Y. X se zvětšuje zleva doprava a Y se zvětšuje shora dolů. Levý horní roh obrazovky je (X = 0, Y = 0) a pravý dolní roh je (X = 127, Y = 63). Na prvním obrázku jsem zaznamenal souřadnice rohů. Pomocí funkce display.setCursor () můžeme určit, kde na displeji budeme zobrazovat text.

Další vlastností textu je jeho barva. Můžeme určit barvu pomocí display.setTextColor (), jak je zobrazeno na následujícím vzorku.

display.clearDisplay ();

display.setTextColor (BÍLÁ); display.setCursor (35, 30); display.println („Hello World!“); display.display ();

K zobrazení jednoho znaku můžeme také použít funkci display.write (). Přijímá kód znaku jako typ uint8_t a zobrazuje znak odpovídající tomuto kódu na řetězci. Pokud například chceme pomocí této funkce zobrazit stejný řetězec, můžeme použít následující úryvek:

display.clearDisplay ();

display.setTextColor (BÍLÁ); 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 také možné kreslit texty v černé barvě s bílým pozadím. Chcete -li to provést, musíte zavolat funkci display.setTextColor, jak je uvedeno níže:

display.clearDisplay ();

// Nastaví barvu na černou s bílým pozadím display.setTextColor (ČERNÁ, BÍLÁ); display.setCursor (25, 30); display.println („Obrácený text!“); display.display ();

Máte také možnost nastavit velikost textu pomocí funkce display.setTextSize (). Přijímá celé číslo jako velikost. Čím větší číslo, tím větší bude text. Nejmenší velikost je 1, což je výchozí velikost textů. Následující kód se pokusí napsat písmeno „A“v 6 různých velikostech:

display.clearDisplay ();

display.setTextColor (BÍLÁ); 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: Kreslení základních tvarů

Kreslení základních tvarů
Kreslení základních tvarů
Kreslení základních tvarů
Kreslení základních tvarů
Kreslení základních tvarů
Kreslení základních tvarů

Kreslení základních tvarů, jako je obdélník, kruh, trojúhelník, čára nebo bod, je velmi snadné a pro každý z nich existuje speciální funkce.

Kreslicí čára

Chcete -li nakreslit čáru, můžete zavolat display.drawLine (startX, startY, endX, endY, color). Například následující kód nakreslí na obrazovce diagonální čáry tak, aby tvarovaly velké 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 šířce a výšce displeje můžete přistupovat pomocí funkcí display.width () a display.height (). Tím by byl váš kód nezávislý na velikosti obrazovky.

Kreslení obdélníku

Funkce pro nakreslení obdélníku je display.drawRect (upperLeftX, upperLeftY, width, height, color). Zde je kód, který na některá náhodná místa nakreslí tři obdélníky:

display.clearDisplay ();

display.drawRect (100, 10, 20, 20, BÍLÁ); display.fillRect (10, 10, 45, 15, WHITE); display.drawRoundRect (60, 20, 35, 35, 8, BÍLÁ); display.display ();

Voláním display.fillRect (upperLeftX, upperLeftY, width, height, WHITE) můžete nakreslit obdélník vyplněný zadanou barvou. Také třetí funkcí v tomto příkladu je display.drawRoundRect (upperLeftX, upperLeftY, width, height, cornerRadius, color), která, jak vidíte na obrázku, slouží k nakreslení obdélníku s kulatými rohy. Přijímá před barvou další parametr, což je celé číslo udávající poloměr rohu. Čím větší hodnota, tím zaoblenější roh. Má také odpovídající funkci výplně s názvem display.drawFillRoundRect, o které si myslím, že můžete hádat, co dělá.

Kreslení kruhu

Funkce je display.drawCircle (centerX, centerY, radius, color). Zde je příklad, který kreslí tvar podobný smajlíku:

display.drawCircle (60, 30, 30, BÍLÁ);

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

Stejně jako obdélníky můžete pomocí funkce display.fillCircle nakreslit kruh vyplněný danou barvou.

Kreslení trojúhelníku

Ahh, opět funkce s názvem display.drawTriangle (poin1X, point1Y, point2X, point2Y, point3X, point3Y, color) a odpovídající display.fillTriangle, která nakreslí vyplněný trojúhelník.

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

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

Nakreslete bod

Můžete také vybarvit konkrétní bod (který se nazývá pixel) na obrazovce pomocí funkce display.drawPixel (pixelX, pixelY, color).

display.drawPixel (20, 35, BÍLÝ);

display.drawPixel (45, 12, BÍLÝ); display.drawPixel (120, 59, BÍLÝ); display.drawPixel (97, 20, BÍLÝ); display.drawPixel (35, 36, WHITE); display.drawPixel (72, 19, WHITE); display.drawPixel (90, 7, BÍLÝ); display.drawPixel (11, 29, BÍLÝ); display.drawPixel (57, 42, BÍLÝ); display.drawPixel (69, 34, BÍLÁ); display.drawPixel (108, 12, BÍLÝ);

Krok 10: Nakreslení obrázku

Kreslící obrázek
Kreslící obrázek
Kreslící obrázek
Kreslící obrázek

Kreslení obrázku je jiné a trochu komplikované. Jelikož je zobrazovací modul jednobarevný, musíme nejprve převést náš obrázek do formátu zvaného mono barevná bitmapa (také nazývaná černobílá). V takovém formátu se každému pixelu obrázku zobrazí buď 0 nebo 1. 1 s představuje existenci barvy a 0 s znamená prázdné místo. V horní části této sekce můžete vidět příklad loga Arduino v tomto formátu. Funkce pro kreslení bitmapového obrázku je display.drawBitmap (topLeftX, topLeftY, imageData, šířka, výška, barva). Parametr imageData je pole čísel v bajtech. Každý bajt má 8 bitů, takže každý bajt obsahuje data 8 pixelů obrázku. Zadáním šířky a výšky obrázku bude funkce drawBitmap vědět, od kterého bitu začíná další řada pixelů.

Řešením, které jsem zvolil pro převod svého obrázku do tohoto formátu, bylo nejprve použít jeden z online „převaděčů obrázků na ASCII“(např. Http://my.asciiart.club) pro převod mého obrázku na sadu znaků ASCII a poté nahradit znaky použité pro prázdné místo o 0 a ostatní o 1. To je to, co vidíte níže. Každou 0 a 1 můžete považovat za pixel na displeji. Velikost obrázku by tedy neměla překročit naši velikost displeje, která je 128x64.

Poznámka: Použití této techniky ASCII není doporučeným přístupem, protože vzhledem k poměru stran znaků bude váš obraz deformován (znaky nejsou čtverec). Zkoušel jsem tuto techniku jen proto, že usnadňuje převod obrázku do požadovaného formátu. Jinak by bylo možné dosáhnout nejlepšího výsledku pomocí nějakého programování nebo pomocí některých pomocných aplikací, které jsou zcela mimo rozsah tohoto 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

Nyní bychom měli každý řádek vydělit 8, což představuje bajt, a uložit je do pole, jak je uvedeno níže:

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 konce

Potom jej můžeme nakreslit na displeji voláním funkce drawBitmap.

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

Krok 11: Řešení potíží

Byl to dlouhý tutoriál, a proto je vysoce pravděpodobné, že se něco pokazí. Zde je seznam některých běžných chyb, se kterými se můžete setkat při nastavování zobrazovacího modulu OLED pro váš projekt (některé z nich se mi staly při přípravě tohoto tutoriálu).

Vůbec nic se nezobrazuje

To se může stát z mnoha důvodů, proto navrhuji zkontrolovat následující seznam, který je v pořádku, který se může ve vašem projektu objevit:

Adresa I2C je pravděpodobně špatná

Při nastavování objektu zobrazení se ujistěte, že jste nastavili adresu, kterou jste získali v kódu skeneru i2c ve funkci display.begin ().

SCL a SDA jsou připojeny nesprávným způsobem

To se mi skutečně stalo. Pokud používáte Arduino Uno, musíte znovu zkontrolovat připojení, abyste se ujistili, že jsou připojena stejně jako moje. Pokud používáte jinou edici Arduino (např. Mega, Leonardo atd.), Musíte vědět, že mohou mít I2C nastavený na jiné piny. Můžete to zkontrolovat v dokumentaci knihovny Wire.

Kreslíte něco z viditelné oblasti

Toto je softwarový problém. Je to velmi běžné při použití funkcí kresby k nesprávnému výpočtu některých souřadnic, takže by se vaše kresba zdeformovala nebo by v nejhorším scénáři mohla být zcela mimo scénu. Zkontrolujte své výpočty a zkuste kreslit krok za krokem, abyste zjistili, co se děje.

Text se vůbec nezobrazuje

Zapomněli jste nastavit barvu textu nebo jste ji nastavili na špatnou hodnotu

Před kreslením textů musíte zavolat setTextColor. Jinak nemáte žádné chyby, ale na displeji nic neuvidíte. Také jste mohli nastavit barvu textu stejnou jako barvu pozadí.

Používáte velmi velké písmo

Pokud nastavíte velikost textu na velmi velkou hodnotu, je možné, že se znaky zcela dostanou z viditelné oblasti.

Ohledně velikosti zobrazení došlo k chybě při kompilaci

To se stalo i mně a myslím, že by se to stalo většině z vás. Je to kvůli konstantním hodnotám velikosti zobrazení, které jsou definovány uvnitř hlavičkového souboru Adafruit_SSD1306.h, který jsme zahrnuli na začátek našeho skriptu. Tento soubor je umístěn ve složce {your-project-folder} libraries / Adafruit_SSD1306 / Adafruit_SSD1306.h. Pokud otevřete tento soubor, všimnete si níže uvedené sekce komentářů, ve které je popsáno, že potřebujete odkomentovat pouze konstantu, která představuje velikost vašeho zobrazovacího modulu OLED. U zobrazovacích modulů 128 x 64 by měl být řádek #define SSD1306_128_64 odkomentován.

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

Displeje SSD1306 ------------------------------------------------ ---------------------- Ovladač se používá na více displejích (128x64, 128x32 atd.). Výběrem příslušného displeje níže vytvoříte vhodnou velikost framebufferu atd. 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: Co dělat dál?

OLED displej jako výstupní modul vám může dát skvělou příležitost poskytnout profesionálně vypadající rozhraní vašim hobby projektům. Můžete zkusit sledovat nápady jako výchozí bod a zobrazit na nich smysluplná data nebo pomoci uživateli vědět, co se děje nebo jestli něco potřebuje udělat. Pro uživatele by bylo mnohem jasnější přečíst si zprávu na displeji, než interpretovat stav projektu/zařízení pomocí některých LED diod.

Jako výchozí bod můžete udělat:

  • Odečtěte hodnotu snímače teploty a zobrazte ji na modulu OLED. Můžete k němu přidat snímač tlaku nebo vlhkosti a vytvořit plně funkční projekt meteorologické stanice.
  • Zkuste něco nakreslit na zobrazovací modul pomocí modulu joysticku jako vstupního zařízení.
  • Zkuste nakreslit animaci na displeji pomocí sekvence kreslení/zpožďování volání funkcí nebo přerušení Arduina
  • Zobrazit vaše vlastní logo při spuštění systému (namísto loga Adafruit)

Nezapomeňte mi v komentářích sdělit, co byste dělali (nebo jste již udělali) pomocí zobrazovacího modulu OLED.

Doporučuje: