Sisällysluettelo:

Hauskaa OLED -näytön ja Arduinon kanssa: 12 vaihetta (kuvilla)
Hauskaa OLED -näytön ja Arduinon kanssa: 12 vaihetta (kuvilla)

Video: Hauskaa OLED -näytön ja Arduinon kanssa: 12 vaihetta (kuvilla)

Video: Hauskaa OLED -näytön ja Arduinon kanssa: 12 vaihetta (kuvilla)
Video: REAL RACING 3 LEAD FOOT EDITION 2024, Marraskuu
Anonim
Hauskaa OLED -näytön ja Arduinon kanssa
Hauskaa OLED -näytön ja Arduinon kanssa

Olen melko varma, että olet varmasti kuullut OLED -näyttötekniikasta. Se on suhteellisen uusi ja tarjoaa parempaa laatua kuin vanha LCD -tekniikka. Tässä opetusohjelmassa haluamme tarkastella vaiheita, jotka ovat tarpeen tietojen näyttämiseksi yhdessä yleisimmistä markkinoilla olevista yksivärisistä OLED -näyttömoduuleista. Yritän selittää vastaavan Adafruit -kirjaston tarjoamat toiminnot tämän moduulin tietojen näyttämiseksi.

Vaihe 1: Mitä OLED -moduuleja aiomme käyttää?

Mitä OLED -moduuleja aiomme käyttää?
Mitä OLED -moduuleja aiomme käyttää?
Mitä OLED -moduuleja aiomme käyttää?
Mitä OLED -moduuleja aiomme käyttää?
Mitä OLED -moduuleja aiomme käyttää?
Mitä OLED -moduuleja aiomme käyttää?

OLED -moduuleja on saatavana monenlaisia kokoja ja ominaisuuksia. Tässä opetusohjelmassa käytämme yksiväristä 128x64 OLED -moduulia. Tämän tyyppisiä moduuleja on saatavana seuraavissa kooissa (jotta näet ne kuvissa):

  • 128x64
  • 128x32
  • 96x16
  • 64 x 48
  • 64x32

Koska kaikki nämä moduulit tukevat I2C -protokollaa tiedonsiirtovälineenä, kaikkien niiden koodi ja johdotus ovat täsmälleen samat. Ainoa ero on, että sinun on otettava huomioon koodisi näytön koko, jotta näytettävä sisältö mahtuu oikein siihen.

Vaihe 2: I2C pähkinänkuoressa

I2C pähkinänkuoressa
I2C pähkinänkuoressa

Integroitu piiri (IIC), jota normaalisti kutsutaan I2C: ksi (I neliö C), jonka Philips on kehittänyt 80-luvulla tiedonsiirtoväylänä, jota käytetään tiedon siirtämiseen laitteen keskusyksikön (CPU) tai mikro-ohjainyksikön (MCU) välillä ja oheislaitteet. Se oli suunnattu pääasiassa TV -sovelluksille. Yksinkertaisuudestaan johtuen siitä tuli niin suosittu, että siitä tuli jonkin ajan kuluttua yksi tärkeimmistä tiedonsiirtomekanismeista suorittimille ja MCU -laitteille sekä oheislaitteille, jotka eivät ole välttämättä osa samaa piirilevyä ja jotka on liitetty siihen johdolla (esim. näyttömoduulit jne.).

I2C koostuu kommunikaatioväylästä, joka koostuu kahdesta langasta ja joka tukee kaksisuuntaista tiedonsiirtoa isännän ja useiden orjalaitteiden välillä. Yleensä isäntäsolmu vastaa väylän ohjaamisesta - mikä itse asiassa tapahtuu generoimalla synkronointisignaali sarjakellolinjalla (SCL). Se on signaali, jonka isäntä lähettäisi jatkuvasti siirron aikana ja kaikki muut väylään kytketyt solmut käyttävät sitä synkronoidakseen tietoliikenteen ja havaitakseen väylän nopeuden. Tiedot siirretään isännän ja orjan välillä sarjatiedon (SDA) linjan kautta. Siirtonopeus voi olla jopa 3,4 Mbps. Kaikilla laitteilla, jotka haluavat siirtää tietoja I2C: n kautta, tulee olla yksilöllinen osoite ja ne voivat toimia joko lähettimenä tai vastaanottimena laitteen toiminnasta riippuen. Esimerkiksi OLED -näyttömoduuli on vastaanotin, joka hyväksyy joitain tietoja ja näyttää ne, kun taas lämpötila -anturi on lähetin -vastaanotin, joka lähettää kaapatun lämpötilan I2C -väylän kautta. Normaalisti päälaite on laite, joka aloittaa tiedonsiirron väylällä ja luo kellosignaalit siirron mahdollistamiseksi. Tämän siirron aikana mitä tahansa tämän isännän osoittamaa laitetta pidetään orjana ja se lukee tiedot.

Kun solmu haluaa lähettää joitakin tietoja, datan ensimmäisen tavun tulisi olla vastaanottimen osoite ja sitten todelliset tiedot tulevat sen jälkeen. Tämä tarkoittaa sitä, että jotta voimme lähettää tietoja tulostuslaitteelle I2C: tä käyttäen (esim.

Jos haluat tietää enemmän I2C -väylän yksityiskohdista ja teorioista, voit käyttää seuraavia viitteitä:

www.i2c-bus.org

learn.sparkfun.com/tutorials/i2c

Vaihe 3: Tarvittavat moduulit ja komponentit

Vaaditut moduulit ja komponentit
Vaaditut moduulit ja komponentit
Vaaditut moduulit ja komponentit
Vaaditut moduulit ja komponentit
Vaaditut moduulit ja komponentit
Vaaditut moduulit ja komponentit

Täältä löydät luettelon osista, joita tarvitset tämän opetusohjelman suorittamiseen:

eBay -linkit:

  • 1 x Arduino Uno:
  • 1 x OLED -moduuli 128x64:
  • 4 x Dupont -kaapeli:
  • 1 x Mini juotosvapaa leipälauta:

Amazon.com -linkit:

  • 1 x Arduino Uno:
  • 1 x OLED -moduuli 128x64:
  • 4 x Dupont -kaapeli:
  • 1 x Mini juotettava leipälauta:

Vaihe 4: Kytke OLED -näyttömoduuli Arduinoon

Johdotus OLED -näyttömoduuli Arduinolle
Johdotus OLED -näyttömoduuli Arduinolle
Johdotus OLED -näyttömoduuli Arduinolle
Johdotus OLED -näyttömoduuli Arduinolle
Johdotus OLED -näyttömoduuli Arduinolle
Johdotus OLED -näyttömoduuli Arduinolle
Johdotus OLED -näyttömoduuli Arduinolle
Johdotus OLED -näyttömoduuli Arduinolle

Tärkeä huomautus I2C -yhteensopivista laitteista on, että tapa yhdistää ne Arduinoon ovat kaikki samat. Tämä johtuu siitä, että Arduino käyttää I2C -tietoliikennettä vain tietyillä nastoilla. Tässä opetusohjelmassa käytän Arduino Unoa. Arduino Uno käyttää nasta A5 SCK: na ja A4 SDA: na. Joten voimme liittää OLED -näyttömoduulin Arduino Unoon kaavionäkymän mukaisesti. Kuten saatat huomata OLED -näyttömoduulistani ottamastani kuvasta, VCC: n ja GND: n liitin on erilainen kuin kaavamainen näkymä. Muista tarkistaa moduulien nastojen tarrat varmistaaksesi, että liität sen oikein.

Tarvitsemme vain 4 nastaa, jotka on liitettävä seuraavasti:

Arduino VCC -> OLED -moduuli VCC

Arduino GND -> OLED -moduuli GND

Arduino 4 -> OLED -moduuli SDA

Arduino 5 -> OLED -moduuli SCK

Vaihe 5: Näyttömoduulin osoitteen etsiminen

Näyttömoduulin osoitteen etsiminen
Näyttömoduulin osoitteen etsiminen

Ensimmäisenä vaiheena yhteyden muodostamisessa I2C -yhteensopivaan laitteeseen sinulla on oltava moduulin osoite. Tätä varten sinun on ladattava liitetty koodi Arduinoosi sen jälkeen, kun olet kytkenyt moduulin Arduinoosi. Tämä koodi sisältää Wire -kirjaston, joka on Arduino IDE: n mukana toimitettu kirjasto, joka käsittelee I2C -viestintää. Se yrittää skannata kytkettyjä I2C -laitteita ja lähettää niiden osoitteen sarjaportin kautta tietokoneellesi. Joten voit käyttää sen lähtöä Arduino IDE: n Serial Monitor -työkalun kautta. Alkuperäinen versio on saatavilla Arduinon leikkikentällä). Voit myös tarkastella sitä luettavammalla tavalla online -Arduino -editorissani. Älä odota, että näytöllä näkyy mitään tämän koodin ollessa käynnissä.

Kuten kuvasta näkyy, moduulini on sidottu osoitteeseen 0x3C. Normaalisti kaikilla tietyn tuotelinjan laitteilla (esimerkiksi kaikilla 128x64 OLED -moduuleilla) on sama osoite.

I2C -laitteiden osoite on rajoitettu 1 - 126. Tämä koodi yksinkertaisesti yrittää muodostaa yhteyden jokaiseen laitteeseen järjestyksessä (lähettämättä tietoja) ja tarkistaa sitten, onko alla oleva kirjasto ilmoittanut virheestä yhdistettäessä annettuun osoitteeseen. Jos virhe ei ilmene, tulostetaan osoite käytettävissä olevaksi moduuliksi, jota voidaan yhdistää. On myös huomattava, että ensimmäiset 15 osoitetta on varattu, joten se hyppää niiden yli ja tulostaa vain tämän alueen yläpuolella olevat osoitteet. Muista, että näiden I2C-moduulien osoite on koodattu laitteeseen eikä sitä voi muuttaa. Joten olisi hyvä kirjoittaa se jonnekin muistiin tai kiinnittää moduuliin tarra, kun aiot laittaa sen takaisin laboratoriohyllyllesi, jotta seuraavalla kerralla skannerikoodin suorittaminen ei olisi tarpeen. Se ei kuitenkaan ole monimutkainen menettely;)

Vaihe 6: OLED -moduulin tietojen näyttämiseen tarvittavien kirjastojen asentaminen

OLED -moduulin tietojen näyttämiseen tarvittavien kirjastojen asentaminen
OLED -moduulin tietojen näyttämiseen tarvittavien kirjastojen asentaminen
OLED -moduulin tietojen näyttämiseen tarvittavien kirjastojen asentaminen
OLED -moduulin tietojen näyttämiseen tarvittavien kirjastojen asentaminen

Wire -kirjasto pystyy käsittelemään alhaisen tason tiedonsiirtoa I2C -laitteiden kanssa. Kun haluat muodostaa yhteyden tiettyyn laitteeseen, jotta voit lukea tai kirjoittaa tietoja sieltä/siihen, käytä yleensä normaalisti kyseisen moduulin alun perin rakentaneen yrityksen kirjastoa. Tämä kirjasto käsittelee kaikki I2C -viestinnän tiedot annetulla moduulilla ja antaa meidän keskittyä enemmän liiketoimintaamme, joka tässä tapauksessa näyttää tiedot haluamallamme tavalla.

Adafruit, yritys, joka valmistaa tällaisten näyttömoduulien alkuperäisen version, tarjoaa Adafruit SSD1306 -kirjastoja, jotka näyttävät tietoja näistä yksivärisistä näytöistä. Joten ennen koodauksen aloittamista meidän on asennettava tämä kirjasto Arduino IDE: n Kirjastohallinnan kautta (käytettävissä Sketch> Include Library> Manage Libraries…). On myös toinen kirjasto nimeltä Adafruit GFX Library, joka käsittelee enemmän matalan tason graafisia juttuja ja jota Adafruit SSD1306 käyttää sisäisesti. Sinun on asennettava molemmat Arduino IDE -laitteeseesi, kuten kuvista näkyy.

Vaihe 7: Näyttömoduulin alustaminen

Näyttömoduulin alustaminen
Näyttömoduulin alustaminen

Piirustus näyttömoduuliin on kääritty luokkaan nimeltä Adafruit_SSD1306. Tämän luokan määritelmä on Adafruit -kirjastossa, joten meidän on ensin sisällytettävä tämä kirjasto. Sitten meidän on ensin luotava tämän luokan esiintymä. Tämän luokan konstruktori ottaa portin numeron, jolla näyttö voidaan nollata, joka on nasta 4 (kytketty SCK: hon). Tämän koodin osan tulisi sijaita tiedoston alussa (out of setup () ja loop () -toiminnot).

#sisältää

Adafruit_SSD1306 -näyttö (4);

Nyt setup () -toiminnon sisällä meidän pitäisi kutsua näyttöobjektin aloitustoiminto välittämällä I2C -osoitteemme alla (SSD1306_SWITCHCAPVCC on vakioarvo, joka määrittää virtalähteen tyypin kirjastoon):

void setup () {

display.begin (SSD1306_SWITCHCAPVCC, 0x3C); display.display (); } void loop () {} // silmukka voi olla tyhjä toistaiseksi

Nyt näyttöobjekti on valmis ja voimme kutsua sen toimintoja (esim. Display.write (), display.drawLine jne.). Tärkeä huomautus on, että aina kun vedämme jotain päälle kutsumalla näyttöobjektiamme, meidän on kutsuttava display.display () -toiminto, jotta varsinainen piirustus tapahtuu laitteistotasolla. Tämä johtuu pääasiassa siitä, että kutsumamme piirtotoiminnot päivittävät näytön "muistissa" olevan esityksen suorituskyvyn vuoksi. Se todella tallentaa muistin muutokset. Joten meidän pitäisi aina muistaa soittaa näyttö () -toiminto, kun olemme piirtäneet jotain näytölle.

display.write (…); // päivittyy jatkuvasti muistiin

display.drawLine (…); // päivittyy jatkuvasti muistiin. display.display (); // huuhtelee kaikki näytön laitteistoon tehdyt muutokset

Jos yrität ladata koodisi tässä vaiheessa, huomaat, että Adafruit Industries -logo tulee näkyviin. Saatat ihmetellä, kuka on pyytänyt sitä piirtämään sen! Itse asiassa Adafruit -kirjasto tekee niin. Se alustaa moduulin muistin (näyttölaitteiston muistin esitys) tämän yrityksen logolla. Jos et halua nähdä sitä alustuksen aikana, voit yrittää kutsua display.clearDisplay () -toiminnon juuri ennen näyttöön kutsumista setup.display (). Tämä toiminto, kuten nimestä voi päätellä, tyhjentää näytön kokonaan.

#sisältää

Adafruit_SSD1306 -näyttö (4); void setup () {display.begin (SSD1306_SWITCHCAPVCC, 0x3C); display.clearDisplay (); display.display (); } void loop () {}

Adafruit_SSD1306 -kirjaston dokumentaation perusteella voit käyttää tämän luokan eri toimintoja piirtääksesi näyttöön tai suoraan muokataksesi sen pikseleitä. Seuraavissa osissa yritämme esittää esimerkin jokaiselle niistä, jotta sinulla on käsitys sen toiminnasta. Useimmat näistä esimerkeistä näyttävät vain yksinkertaisen staattisen sisällön, joten voimme vain laittaa ne setup () -toimintoomme (alustuskoodin jälkeen). Näin se ajettaisiin vain kerran ja pysyy siellä.

Vaihe 8: Näytä yksinkertainen teksti

Näytä yksinkertainen teksti
Näytä yksinkertainen teksti
Näytä yksinkertainen teksti
Näytä yksinkertainen teksti
Näytä yksinkertainen teksti
Näytä yksinkertainen teksti

Tekstin näyttämiseen voimme käyttää kirjaston yksinkertaista display.println () -toimintoa. Se hyväksyy tekstin merkkijonona ja yrittää näyttää sen. On tärkeää tietää, että meidän on kerrottava kirjastolle, missä näytössä aiomme esittää tekstin. Jokaisella näytön pikselillä on koordinaatit, jotka on merkitty X: llä ja Y: llä. X kasvaa vasemmalta oikealle ja Y kasvaa ylhäältä alas. Näytön vasen yläkulma on (X = 0, Y = 0) ja oikea alakulma (X = 127, Y = 63). Huomasin kulmien koordinaatit ensimmäiseen kuvaan. Voimme käyttää display.setCursor () -funktiota määrittämään, missä näytön kohdassa aiomme näyttää tekstin.

Toinen tekstin ominaisuus on sen väri. Voimme määrittää värin käyttämällä display.setTextColor () -näytettä, joka näkyy seuraavassa näytteessä.

display.clearDisplay ();

display.setTextColor (VALKOINEN); display.setCursor (35, 30); display.println ("Hei maailma!"); display.display ();

Voimme myös käyttää display.write () -toimintoa yhden merkin näyttämiseen. Se hyväksyy merkkikoodin uint8_t -tyypiksi ja näyttää kyseistä koodia vastaavan merkin merkkijonossa. Esimerkiksi jos haluamme näyttää saman merkkijonon tätä toimintoa käyttämällä, voimme käyttää seuraavaa katkelmaa:

display.clearDisplay ();

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

On myös mahdollista piirtää tekstejä mustalla värillä valkoisella taustalla. Tätä varten sinun on kutsuttava display.setTextColor -toiminto seuraavasti:

display.clearDisplay ();

// Asettaa värin mustaksi valkoisella taustanäytöllä.setTextColor (MUSTA, VALKOINEN); display.setCursor (25, 30); display.println ("Käänteinen teksti!"); display.display ();

Voit myös asettaa tekstin koon display.setTextSize () -toiminnolla. Se hyväksyy kokonaisluvun koona. Mitä suurempi luku, sitä suurempi teksti olisi. Pienin koko on 1, joka on tekstien oletuskoko. Seuraava koodi yrittää kirjoittaa A -kirjaimen kuudessa eri koossa:

display.clearDisplay ();

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

Vaihe 9: Perusmuotojen piirtäminen

Perusmuotojen piirtäminen
Perusmuotojen piirtäminen
Perusmuotojen piirtäminen
Perusmuotojen piirtäminen
Perusmuotojen piirtäminen
Perusmuotojen piirtäminen

Perusmuotojen, kuten suorakulmion, ympyrän, kolmion, suoran tai pisteen, piirtäminen on erittäin helppoa, ja jokaiselle on oma toiminto.

Viivan piirtäminen

Voit piirtää viivan soittamalla display.drawLine (startX, startY, endX, endY, color). Esimerkiksi seuraava koodi piirtää diagonaaliset viivat näytölle niin, että ne muodostavat suuren X: n:

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 ();

Voit käyttää näytön leveyttä ja korkeutta funktioilla display.width () ja display.height (). Näin koodisi olisi riippumaton näytön koosta.

Suorakulmion piirtäminen

Suorakulmion piirtotoiminto on display.drawRect (yläVasenX, ylempiVasenY, leveys, korkeus, väri). Tässä on koodi, joka piirtää kolme suorakulmiota joihinkin satunnaisiin paikkoihin:

display.clearDisplay ();

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

Soittamalla näyttö. Myös tämän esimerkin kolmas funktio on display.drawRoundRect (yläVasenX, ylempiVasenY, leveys, korkeus, kulmasäde, väri), jota kuvasta nähden käytetään piirtämään suorakulmio, jossa on pyöreät kulmat. Se hyväksyy ylimääräisen parametrin ennen väriä, joka on kokonaisluku, joka osoittaa kulman säteen. Mitä suurempi arvo, sitä pyöreämpi kulma. Siinä on myös vastaava täyttöfunktio nimeltä display.drawFillRoundRect, jonka uskon voivasi arvata, mitä se tekee.

Piirustusympyrä

Toiminto on display.drawCircle (centerX, centerY, säde, väri). Tässä on esimerkki, joka piirtää hymiön kaltaisen muodon:

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

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

Suorakulmioiden tapaan voit käyttää display.fillCircle -toimintoa piirtämään ympyrän, joka on täytetty annetulla värillä.

Piirrä kolmio

Ahh, jälleen funktio nimeltä display.drawTriangle (poin1X, point1Y, point2X, point2Y, point3X, point3Y, color) ja vastaava display.fillTriangle, joka piirtää täytetyn kolmion.

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

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

Piirrä piste

Voit myös värittää tietyn pisteen (jota kutsutaan pikseliksi) näytöllä näytön kautta.drawPixel (pixelX, pixelY, color) -toiminto.

display.drawPixel (20, 35, VALKOINEN);

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

Vaihe 10: Kuvan piirtäminen

Kuvan piirtäminen
Kuvan piirtäminen
Kuvan piirtäminen
Kuvan piirtäminen

Kuvan piirtäminen on erilaista ja hieman monimutkaista. Koska näyttömoduuli on yksivärinen, meidän on ensin muutettava kuvasi muotoon nimeltä mustavalkoinen bittikartta (jota kutsutaan myös mustavalkoiseksi). Tällaisessa muodossa jokaisessa kuvan pikselissä on joko 0 tai 1. 1s edustaa värin olemassaoloa ja 0s tarkoittaa tyhjää tilaa. Näet esimerkin Arduino -logosta tässä muodossa tämän osion yläosassa. Bittikarttakuvan piirtotoiminto on display.drawBitmap (topLeftX, topLeftY, imageData, leveys, korkeus, väri). Parametri imageData on tavumääräinen taulukko. Jokaisessa tavussa on 8 bittiä, joten jokainen tavu sisältää kuvan 8 pikselin tiedot. Kun määrität kuvan leveyden ja korkeuden, drawBitmap -toiminto tietää, mistä bitistä seuraava pikselirivi alkaa.

Ratkaisu, jonka päätin muuntaa kuvani tähän muotoon, oli ensin käyttää yhtä online -"kuva ASCII -muuntimista" (esim. Http://my.asciiart.club) muuntaakseni kuvan ASCII -merkkisarjaksi ja korvaamaan merkkejä, joita tyhjä tila käytetään 0: lla ja muut 1: llä. Näin näet alla. Voit ajatella jokaista 0 ja 1 pikselinäytössä. Joten kuvan koon ei pitäisi ylittää näytön kokoa, joka on 128x64.

Huomautus: Tämän ASCII -tekniikan käyttäminen ei ole suositeltava lähestymistapa, koska merkkien kuvasuhteen vuoksi kuva vääristyy (merkit eivät ole neliöitä). Kokeilin tätä tekniikkaa vain siksi, että se helpottaa kuvan muuntamista vaadittuun muotoon. Muuten olisi mahdollista saavuttaa paras tulos ohjelmoimalla tai käyttämällä apuohjelmia, jotka eivät kuulu tämän tekstin soveltamisalaan.

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

Nyt meidän pitäisi jakaa jokainen rivi 8: lla, joka edustaa tavua, ja tallentaa ne alla olevaan taulukkoon:

staattinen const unsigned char PROGMEM arduino_logo = {

B00000000, B00000000, B00000111, B11111111, B11111111, B11100000, B00000000, B00000000, B00000000, B00000000, B01111111, B11111111, B11111111, B11111110, B00000000, B00000000, loppuun …

Sitten voimme piirtää sen näytölle kutsumalla drawBitmap -toimintoa.

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

Vaihe 11: Vianetsintä

Tämä oli pitkä opetusohjelma, joten on erittäin todennäköistä, että jotain menee pieleen. Tässä on luettelo yleisistä virheistä, joita saatat kohdata määrittäessäsi OLED -näyttömoduulia projektillesi (osa niistä tapahtui minulle valmisteltaessa tätä opetusohjelmaa).

Mitään ei näytetä ollenkaan

Tämä voi tapahtua monista syistä, joten ehdotan, että tarkistat seuraavan luettelon, joka on järjestyksessä projektissasi:

I2C -osoite on luultavasti väärä

Varmista, että olet määrittänyt osoitteen, jonka sait i2c-skannerin koodiin display.begin () -toiminnossa, kun määrität näyttöobjektia.

SCL ja SDA on kytketty väärin

Tämä todella tapahtui minulle. Jos käytät Arduino Unoa, sinun on tarkistettava yhteytesi uudelleen varmistaaksesi, että ne on kytketty samoin kuin minun. Jos käytät toista Arduino -versiota (esim. Mega, Leonardo jne.), Sinun on tiedettävä, että heillä voi olla I2C -asetus muille nastoille. Voit tarkistaa sen Wire -kirjaston dokumentaatiosta.

Piirrät jotain näkyvältä alueelta

Tämä on ohjelmistokysymys. Se on hyvin yleistä, kun piirustustoimintoja käytetään joidenkin koordinaattien laskemiseen väärin, joten piirustuksesi vääristyy tai pahimmassa tapauksessa se voi olla kokonaan pois otoksesta. Tarkista laskelmasi ja yritä piirtää vaihe vaiheelta, mitä tapahtuu.

Tekstiä ei näytetä ollenkaan

Unohdit asettaa tekstin värin tai asetit sen väärään arvoon

Sinun on kutsuttava setTextColor ennen tekstin piirtämistä. Muuten sinulla ei ole virheitä, mutta et näe mitään näytöllä. Olet ehkä myös asettanut tekstin värin samaksi kuin taustaväri.

Käytät erittäin suurta fonttia

Jos asetat tekstin koon erittäin suureksi, voi olla mahdollista, että merkit poistuvat kokonaan näkyvältä alueelta.

Näytön koossa on kääntämisvirhe

Tämä tapahtui myös minulle ja luulen, että se tapahtuisi useimmille teistä. Se johtuu näytön koon vakioarvoista, jotka on määritetty otsikkotiedoston Adafruit_SSD1306.h sisällä ja jotka sisällytetään skriptimme päälle. Tämä tiedosto sijaitsee osoitteessa {your-project-folder} libraries / Adafruit_SSD1306 / Adafruit_SSD1306.h. Jos avaat tämän tiedoston, huomaat, että alla on kommenttiosio, jossa kuvataan, että sinun on poistettava kommentti vain vakio, joka edustaa OLED -näyttömoduulisi kokoa. 128x64 -näyttömoduulien rivin #define SSD1306_128_64 ei pitäisi kommentoida.

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

SSD1306-näytöt ------------------------------------------------ ---------------------- Ajuria käytetään useissa näytöissä (128x64, 128x32 jne.). Valitse sopiva näyttö alla luodaksesi sopivan kokoisen kehyspuskurin jne. SSD1306_128_64 128x64 pikselin näyttö SSD1306_128_32 128x32 pikselin näyttö SSD1306_96_16 --------------------------- --------------------------------------------* / #define SSD1306_128_64 / / #define SSD1306_128_32 // #define SSD1306_96_16 /*======================================= ===============================*/

Vaihe 12: Mitä tehdä seuraavaksi?

OLED -näyttö lähtömoduulina voi antaa sinulle suuren mahdollisuuden tarjota ammattimaisen käyttöliittymän harrastusprojekteihisi. Voit kokeilla seuraavia ideoita lähtökohtana näyttääksesi niistä mielekkäitä tietoja tai auttaaksesi käyttäjää tietämään, mitä tapahtuu tai jos hänen oli tehtävä jotain. Käyttäjän olisi paljon selkeämpää lukea viesti näytöltä kuin tulkita projektin/laitteen tilaa joidenkin LED -valojen kautta.

Lähtökohtana voit tehdä seuraavaa:

  • Lue lämpötila -anturin arvo ja näytä se OLED -moduulissa. Voit lisätä siihen paine- tai kosteusanturin ja luoda täysin toimivan sääasemaprojektin.
  • Yritä piirtää jotain näyttömoduuliin käyttämällä ohjainmoduulia syöttölaitteena.
  • Yritä piirtää animaatio näytölle piirtämällä/viivyttämällä toimintoja tai Arduino -keskeytys
  • Näytä mukautettu logosi järjestelmän käynnistyksen yhteydessä (Adafruit -logon sijasta)

Älä unohda kertoa minulle kommenteissa, mitä tekisit (tai olet jo tehnyt) OLED -näyttömoduulin avulla.

Suositeltava: