Kazalo:

Zabava z zaslonom OLED in Arduinom: 12 korakov (s slikami)
Zabava z zaslonom OLED in Arduinom: 12 korakov (s slikami)

Video: Zabava z zaslonom OLED in Arduinom: 12 korakov (s slikami)

Video: Zabava z zaslonom OLED in Arduinom: 12 korakov (s slikami)
Video: CS50 2015 - Week 6 2024, Julij
Anonim
Zabavno z zaslonom OLED in Arduinom
Zabavno z zaslonom OLED in Arduinom

Prepričan sem, da ste zagotovo že slišali za tehnologijo zaslona OLED. Je relativno nov in ponuja boljšo kakovost kot stara tehnologija LCD. V tej vadnici želimo pregledati korake, potrebne za prikaz podatkov o enem najpogostejših enobarvnih zaslonskih modulov OLED, ki so na voljo na trgu. Poskusil bom razložiti funkcije, ki jih ponuja ustrezna knjižnica Adafruit za prikaz podatkov v tem modulu.

1. korak: Katere module OLED bomo uporabljali?

Katere module OLED bomo uporabljali?
Katere module OLED bomo uporabljali?
Katere module OLED bomo uporabljali?
Katere module OLED bomo uporabljali?
Katere module OLED bomo uporabljali?
Katere module OLED bomo uporabljali?

OLED moduli so na voljo v različnih velikostih in funkcijah. Tisti, ki ga bomo uporabili v tej vadnici, je enobarvni modul OLED 128x64. Ta tip modula je na voljo v naslednjih velikostih (da vidite na slikah):

  • 128 x 64
  • 128 x 32
  • 96 x 16
  • 64x48
  • 64 x 32

Ker vsi ti moduli podpirajo protokol I2C kot sredstvo komunikacije, sta koda in ožičenje vseh enaki. Edina razlika je v tem, da morate upoštevati velikost zaslona kode, tako da se vsebina, ki jo boste prikazali, ustrezno prilega.

Korak: I2C na kratko

I2C na kratko
I2C na kratko

Vmesno vezje (IIC), ki se običajno imenuje I2C (I na kvadrat C), ki ga je Philips razvil v 80. letih kot vodilo za izmenjavo podatkov, ki se uporablja za prenos podatkov med centralno procesorsko enoto (CPE) ali enoto mikrokrmilnika (MCU) naprave in perifernih čipov. V bistvu je bil namenjen uporabi v televiziji. Zaradi svoje preprostosti je postal tako priljubljen, da je čez nekaj časa postal eden od primarnih mehanizmov prenosa podatkov za CPU -je in MCU -je ter periferne naprave, ki niso nujno del iste PCB -jeve plošče in so z njo povezane preko žice (npr. zaslonski moduli itd.).

I2C je sestavljen iz dvožičnega komunikacijskega vodila, ki podpira dvosmerni prenos podatkov med glavno in več podrejenimi napravami. Običajno je glavno vozlišče odgovorno za nadzor vodila - kar se dejansko izvede z ustvarjanjem sinhronizacijskega signala na liniji serijske ure (SCL). To je signal, ki bi ga gospodar med prenosom neprestano pošiljal, vsa druga vozlišča, povezana z vodilom, pa ga bodo uporabila za sinhronizacijo komunikacije in zaznavanje hitrosti vodila. Podatki se prenašajo med glavnim in podrejenim po vrstici serijskih podatkov (SDA). Hitrost prenosa je lahko do 3,4 Mbps. Vse naprave, ki želijo prenašati podatke prek I2C, bi morale imeti edinstven naslov in lahko delujejo kot oddajnik ali sprejemnik, odvisno od funkcije naprave. Na primer, zaslonski modul OLED je sprejemnik, ki sprejme nekatere podatke in jih prikaže, medtem ko je temperaturni senzor oddajnik, ki pošilja zajeto temperaturo preko vodila I2C. Običajno je glavna naprava naprava, ki sproži prenos podatkov na vodilu in ustvari signale ure, ki omogočajo prenos. Med tem prenosom se vsaka naprava, ki jo naslovi ta mojster, šteje za pomožno in bere te podatke.

Ko želi vozlišče poslati nekaj podatkov, mora biti prvi bajt podatkov naslov sprejemnika, nato pa sledijo dejanski podatki. To pomeni, da bi morali za pošiljanje podatkov na izhodno napravo z uporabo I2C (npr. Zaslonski modul I2C OLED) najprej poiskati njegov naslov I2C in to bomo najprej naredili v naslednjih korakih.

Če vas zanima več o podrobnostih in teorijah o vodilu I2C, lahko uporabite naslednje reference:

www.i2c-bus.org

learn.sparkfun.com/tutorials/i2c

3. korak: potrebni moduli in komponente

Potrebni moduli in komponente
Potrebni moduli in komponente
Potrebni moduli in komponente
Potrebni moduli in komponente
Potrebni moduli in komponente
Potrebni moduli in komponente

Tu najdete seznam komponent, ki bi jih potrebovali za dokončanje te vadnice:

povezave do eBaya:

  • 1 x Arduino Uno:
  • 1 x OLED modul 128x64:
  • 4 x kabel Dupont:
  • 1 x mini lemljena plošča:

Povezave na Amazon.com:

  • 1 x Arduino Uno:
  • 1 x OLED modul 128x64:
  • 4 x Dupont kabel:
  • 1 x Mini lemilna plošča brez spajkanja:

4. korak: Ožičenje modula OLED zaslona na Arduino

Ožičenje modula OLED zaslona na Arduino
Ožičenje modula OLED zaslona na Arduino
Ožičenje modula OLED zaslona na Arduino
Ožičenje modula OLED zaslona na Arduino
Ožičenje modula OLED zaslona na Arduino
Ožičenje modula OLED zaslona na Arduino
Ožičenje modula OLED zaslona na Arduino
Ožičenje modula OLED zaslona na Arduino

Pomembna opomba o napravah, ki podpirajo I2C, je, da jih morate povezati z Arduinom na enak način. To je zato, ker Arduino komunicira z I2C samo na določenih zatičih. V tej vadnici uporabljam Arduino Uno. Arduino Uno uporablja pin A5 kot SCK in A4 kot SDA. Tako lahko povežemo prikazovalni modul OLED z Arduino Uno, kot je prikazano v shematičnem pogledu. Kot ste morda opazili na sliki, ki sem jo posnel z zaslonskega modula OLED, se priključek za VCC in GND razlikuje od shematskega pogleda. Ne pozabite preveriti oznak zatičev na modulih, da se prepričate, da jih povezujete na pravilen način.

Potrebujemo le 4 zatiče, ki jih je treba povezati, kot je prikazano spodaj:

Arduino VCC -> OLED modul VCC

Arduino GND -> OLED modul GND

Arduino 4 -> OLED modul SDA

Arduino 5 -> OLED modul SCK

5. korak: Iskanje naslova modula zaslona

Iskanje naslova modula zaslona
Iskanje naslova modula zaslona

Kot prvi korak pri povezovanju z napravo, ki podpira I2C, morate imeti naslov modula. Če želite to narediti, potem ko priključite modul na svoj Arduino, preprosto naložite priloženo kodo na svoj Arduino. Ta koda vključuje knjižnico Wire, ki je knjižnica, vključena v Arduino IDE, ki upravlja komunikacijo I2C. Poskuša skenirati povezane naprave I2C in njihov naslov prek serijskih vrat pošlje v računalnik. Do njegovega izhoda lahko dostopate prek orodja Serial Monitor v Arduino IDE. Prvotna različica je na voljo na igrišču Arduino). Prav tako si ga lahko ogledate na bolj berljiv način v mojem spletnem urejevalniku Arduino. Ne pričakujte, da bo med delovanjem te kode kar koli prikazano na zaslonu.

Kot lahko vidite na sliki, je moj modul vezan na naslov 0x3C. Običajno imajo vse naprave v določeni liniji izdelkov (na primer vsi moduli OLED 128x64) enak naslov.

Naslov naprav I2C je omejen od 1 do 126. Ta koda se preprosto poskuša povezati z vsako napravo v določenem vrstnem redu (brez prenosa podatkov), nato pa preveri, ali je pri vzpostavljanju povezave z navedenim naslovom napaka poročala osnovna knjižnica. Če ni napake, potem natisne naslov kot razpoložljiv modul za povezavo. Prav tako je treba opozoriti, da je prvih 15 naslovov rezerviranih, zato jih preskoči in natisne samo tiste, ki so nad tem obsegom. Ne pozabite, da je naslov teh modulov I2C v napravi kodiran in ga ni mogoče spremeniti. Zato bi bilo dobro, da ga zapišete nekam ali nalepite oznako na modul, ko ga boste postavili nazaj na polico v laboratoriju, da naslednjič zagon kode optičnega bralnika ne bo potreben. Vendar to ni zapleten postopek;)

6. korak: Namestitev knjižnic, potrebnih za prikaz podatkov v modulu OLED

Namestitev knjižnic, potrebnih za prikaz podatkov na modulu OLED
Namestitev knjižnic, potrebnih za prikaz podatkov na modulu OLED
Namestitev knjižnic, potrebnih za prikaz podatkov na modulu OLED
Namestitev knjižnic, potrebnih za prikaz podatkov na modulu OLED

Knjižnica Wire lahko komunicira na nizki ravni z napravami I2C. Če se želite povezati z določeno napravo za branje/pisanje podatkov z/nanjo, običajno uporabite knjižnico podjetja, ki je prvotno zgradilo ta modul. Ta knjižnica obravnava vse komunikacijske podrobnosti I2C z danim modulom in se osredotočimo na naše poslovanje, ki v tem primeru prikazuje podatke na način, ki ga želimo.

Adafruit, podjetje, ki izdeluje izvirno različico takšnih zaslonskih modulov, ponuja knjižnice Adafruit SSD1306 za prikaz podatkov na teh enobarvnih zaslonih. Preden začnemo s kodiranjem, moramo to knjižnico namestiti prek Upravitelja knjižnic (dostopen prek menija Sketch> Vključi knjižnico> Upravljanje knjižnic …) v Arduino IDE. Obstaja tudi druga knjižnica, imenovana Adafruit GFX Library, ki obravnava več grafičnih vsebin na nizki ravni in jo interno uporablja Adafruit SSD1306. Oba morate imeti nameščena na vašem Arduino IDE, kot vidite na slikah.

7. korak: Inicializiranje modula zaslona

Inicializacija modula zaslona
Inicializacija modula zaslona

Modul Risba na zaslonu je zavit v razred z imenom Adafruit_SSD1306. Opredelitev tega razreda je v knjižnici Adafruit, zato moramo to knjižnico najprej vključiti. Nato moramo najprej ustvariti primerek tega razreda. Konstruktor tega razreda vzame številko vrat, na katerih je mogoče ponastaviti zaslon, ki je pin 4 (priključen na SCK). Ta del kode mora biti na začetku datoteke (zunaj funkcij setup () in loop ()).

#vključi

Zaslon Adafruit_SSD1306 (4);

Zdaj bi morali v funkciji setup () poklicati funkcijo start prikazanega objekta, tako da posredujemo naš naslov I2C, kot je prikazano spodaj (SSD1306_SWITCHCAPVCC je konstantna vrednost, ki določa vrsto vira napajanja za knjižnico):

void setup () {

display.begin (SSD1306_SWITCHCAPVCC, 0x3C); display.display (); } void loop () {} // zanka je zaenkrat lahko prazna

Zdaj je prikazni objekt pripravljen in lahko pokličemo njegove funkcije (npr. Display.write (), display.drawLine itd.). Pomembno opozorilo je, da moramo vedno, ko nekaj prikličemo s klicem na svoj prikazovalni objekt, poklicati funkcijo display.display (), da se dejanska risba zgodi na ravni strojne opreme. To je predvsem posledica dejstva, da risarske funkcije, ki jih pokličemo, zaradi zmogljivosti samo posodobijo prikaz v spominu. Pravzaprav predpomni spremembe v pomnilniku. Zato se moramo vedno spomniti, da pokličemo funkcijo display (), ko končamo z risanjem na zaslonu.

display.write (…); // se stalno posodablja v spominu

display.drawLine (…); // se stalno posodablja v spominu. display.display (); // izbriše vse spremembe strojne opreme zaslona

Če poskusite naložiti svojo kodo v tem koraku, boste opazili, da bo prikazan logotip Adafruit Industries. Morda se sprašujete, kdo ga je prosil, naj to nariše! Pravzaprav to počne knjižnica Adafruit. Inicializira pomnilnik modula (predstavitev strojne opreme zaslona v pomnilniku) z logotipom tega podjetja. Če tega ne želite videti med inicializacijo, lahko poskusite poklicati funkcijo display.clearDisplay () tik pred klicem display.display () v nastavitveni funkciji. Ta funkcija, kot že ime pove, popolnoma počisti zaslon.

#vključi

Zaslon Adafruit_SSD1306 (4); void setup () {display.begin (SSD1306_SWITCHCAPVCC, 0x3C); display.clearDisplay (); display.display (); } void loop () {}

Na podlagi dokumentacije knjižnice Adafruit_SSD1306 lahko uporabite različne funkcije, ki jih ponuja ta razred, za risanje na zaslonu ali neposredno manipulacijo s piksli na njem. V naslednjih razdelkih bomo poskušali predstaviti primer za vsakega od njih, da boste imeli predstavo o njegovem delovanju. Večina teh primerov bo prikazovala le preprosto statično vsebino, zato jih lahko preprosto vstavimo v našo funkcijo setup () (po inicializacijski kodi). S tem bi ga zagnali le enkrat in tam ostane.

8. korak: Prikažite preprosto besedilo

Prikažite preprosto besedilo
Prikažite preprosto besedilo
Prikažite preprosto besedilo
Prikažite preprosto besedilo
Prikažite preprosto besedilo
Prikažite preprosto besedilo

Za prikaz besedila lahko uporabimo preprosto funkcijo display.println () knjižnice. Besedilo sprejme kot niz in ga poskuša prikazati. Pomembno je vedeti, da moramo knjižnici povedati, kje na zaslonu bomo predstavili besedilo. Vsak piksel na zaslonu ima koordinato, ki je podana z X in Y. X se poveča od leve proti desni, Y pa od zgoraj navzdol. Zgornji levi kot zaslona je (X = 0, Y = 0), spodnji desni kot (X = 127, Y = 63). Koordinate vogalov sem zabeležil na prvi sliki. S funkcijo display.setCursor () lahko določimo, kje na zaslonu bomo prikazali besedilo.

Druga lastnost besedila je njegova barva. Barvo lahko določimo s pomočjo display.setTextColor (), kot je prikazano na naslednjem vzorcu.

display.clearDisplay ();

display.setTextColor (BELO); display.setCursor (35, 30); display.println ("Pozdravljeni svet!"); display.display ();

Za prikaz enega znaka lahko uporabimo tudi funkcijo display.write (). Kodo znakov sprejme kot tip uint8_t in v nizu prikaže znak, ki ustreza tej kodi. Na primer, če želimo s to funkcijo prikazati isti niz, lahko uporabimo naslednji delček:

display.clearDisplay ();

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

Možno je tudi risanje črnih besedil z belim ozadjem. Če želite to narediti, morate poklicati funkcijo display.setTextColor, kot je prikazano spodaj:

display.clearDisplay ();

// Barvo nastavi na črno z prikazom belega ozadja.setTextColor (ČRNA, BELA); display.setCursor (25, 30); display.println ("Obrnjeno besedilo!"); display.display ();

Prav tako lahko nastavite velikost besedila s funkcijo display.setTextSize (). Sprejema celo število kot velikost. Večja kot je številka, večje bi bilo besedilo. Najmanjša velikost je 1, kar je privzeta velikost besedil. Naslednja koda poskuša črko "A" zapisati v 6 različnih velikostih:

display.clearDisplay ();

display.setTextColor (BELO); 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. korak: Risanje osnovnih oblik

Risanje osnovnih oblik
Risanje osnovnih oblik
Risanje osnovnih oblik
Risanje osnovnih oblik
Risanje osnovnih oblik
Risanje osnovnih oblik

Risanje osnovnih oblik, kot so pravokotnik, krog, trikotnik, črta ali točka, je zelo enostavno in za vsako obstaja posebna funkcija.

Risalna črta

Če želite potegniti črto, lahko pokličete display.drawLine (startX, startY, endX, endY, barva). Naslednja koda na primer nariše diagonalne črte na zaslonu, tako da oblikujejo velik X:

display.clearDisplay ();

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

Do širine in višine zaslona lahko dostopate s funkcijama display.width () in display.height (). S tem bi bila vaša koda neodvisna od velikosti zaslona.

Risalni pravokotnik

Funkcija za risanje pravokotnika je display.drawRect (upperLeftX, upperLeftY, širina, višina, barva). Tu je koda, ki na nekaj naključnih mestih nariše tri pravokotnike:

display.clearDisplay ();

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

S klicem display.fillRect (upperLeftX, upperLeftY, width, height, WHITE) lahko narišete pravokotnik, napolnjen z določeno barvo. Tudi tretja funkcija v tem primeru je display.drawRoundRect (upperLeftX, upperLeftY, width, height, cornerRadius, color), ki se, kot vidite na sliki, uporablja za risanje pravokotnika z okroglimi vogali. Pred barvo sprejme dodaten parameter, ki je celo število, ki označuje polmer vogala. Večja kot je vrednost, zaokroževanje vogala. Prav tako ima ustrezno funkcijo polnjenja z imenom display.drawFillRoundRect, za katero mislim, da lahko uganite, kaj počne.

Risalni krog

Funkcija je display.drawCircle (centerX, centerY, polmer, barva). Tu je primer, ki nariše smeškasto obliko:

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

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

Tako kot pravokotnike lahko s funkcijo display.fillCircle narišete krog, napolnjen z dano barvo.

Risalni trikotnik

Ahh, spet funkcija, imenovana display.drawTriangle (poin1X, point1Y, point2X, point2Y, point3X, point3Y, barva) in ustrezen display.fillTriangle, ki nariše napolnjen trikotnik.

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

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

Nariši točko

Prav tako lahko barvate določeno točko (ki se imenuje piksel) na zaslonu prek funkcije display.drawPixel (pixelX, pixelY, barva).

display.drawPixel (20, 35, BELA);

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

10. korak: Narišite sliko

Risba slike
Risba slike
Risba slike
Risba slike

Risanje slike je drugačno in nekoliko zapleteno. Ker je prikazovalni modul enobarven, moramo sliko najprej pretvoriti v obliko, imenovano enobarvna bitna slika (imenovana tudi črno -bela). V takem formatu je vsak piksel slike predstavljen z 0 ali 1. 1s predstavlja obstoj barve, 0s pa prazen prostor. Na vrhu tega razdelka si lahko ogledate primer logotipa Arduino v tej obliki. Funkcija za risanje bitne slike je display.drawBitmap (topLeftX, topLeftY, imageData, širina, višina, barva). Parameter imageData je niz števil v bajtih. Vsak bajt ima 8 bitov, zato vsak bajt vsebuje podatke 8 slikovnih pik slike. Z določitvijo širine in višine slike bo funkcija drawBitmap vedela, od katerega bita se začne naslednja vrstica slikovnih pik.

Rešitev, ki sem jo izbral za pretvorbo slike v to obliko, je bila ta, da sem najprej uporabil enega od spletnih pretvornikov slike v ASCII (npr. Http://my.asciiart.club) za pretvorbo slike v niz znakov ASCII in nato zamenjal znaki, ki se uporabljajo za prazen prostor za 0, drugi pa za 1. To vidite spodaj. Vsako 0 in 1 si lahko zamislite kot slikovno piko na zaslonu. Velikost slike torej ne sme presegati velikosti zaslona 128x64.

Opomba: Uporaba te tehnike ASCII ni priporočljiv pristop, ker bo zaradi razmerja stranic znakov vaša slika deformirana (znaki niso kvadrat). To tehniko sem preizkusil samo zato, ker olajša pretvorbo slike v želeno obliko. V nasprotnem primeru bi bilo mogoče z nekaj programiranjem ali uporabo nekaterih pripomočkov, ki so popolnoma izven obsega tega besedila, doseči najboljši rezultat.

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

Zdaj bi morali vsako vrstico razdeliti na 8, ki predstavlja bajt, in jih shraniti v matriko, kot je prikazano spodaj:

static const unsigned char PROGMEM arduino_logo = {

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

Nato ga lahko narišemo na zaslonu s klicem funkcije drawBitmap.

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

11. korak: Odpravljanje težav

To je bila dolga vadnica, zato je zelo verjetno, da gre kaj narobe. Tu je seznam nekaterih pogostih napak, na katere lahko naletite pri nastavitvi zaslonskega modula OLED za vaš projekt (nekatere so se mi zgodile pri pripravi te vadnice).

Prav nič se ne prikaže

To se lahko zgodi iz več razlogov, zato predlagam, da preverite naslednji seznam, ki se lahko pojavi v vašem projektu:

Naslov I2C je verjetno napačen

Prepričajte se, da ste pri nastavitvi prikazanega predmeta nastavili naslov, ki ste ga dobili v kodi bralnika i2c v funkciji display.begin ().

SCL in SDA sta povezana na napačen način

To se mi je pravzaprav zgodilo. Če uporabljate Arduino Uno, morate znova preveriti svoje povezave in se prepričati, da so povezani enako kot jaz. Če uporabljate drugo izdajo Arduino (npr. Mega, Leonardo itd.), Morate vedeti, da imajo morda svoj I2C nastavljen na druge zatiče. To lahko preverite v dokumentaciji knjižnice Wire.

Nekaj rišete iz vidnega območja

To je problem programske opreme. Zelo pogosto je, če z risarskimi funkcijami napačno izračunate nekatere koordinate, zato bi bila vaša risba deformirana ali pa bi bila v najslabšem primeru popolnoma izven scene. Preglejte svoje izračune in poskusite narediti korak za korakom, da vidite, kaj se dogaja.

Besedilo se sploh ne prikaže

Pozabili ste nastaviti barvo besedila ali pa ste nastavili napačno vrednost

Pred risanjem besedil morate poklicati setTextColor. V nasprotnem primeru ne boste imeli napak, vendar na zaslonu ne boste videli ničesar. Barvo besedila ste morda nastavili enako kot barvo ozadja.

Uporabljate zelo veliko pisavo

Če nastavite velikost besedila na zelo veliko vrednost, je možno, da znaki popolnoma izstopijo iz vidnega območja.

Napaka pri sestavljanju velikosti zaslona

To se je zgodilo tudi meni in mislim, da bi se zgodilo večini vas. Zaradi stalnih vrednosti velikosti prikaza, ki so definirane v datoteki glave Adafruit_SSD1306.h, vključimo na vrhu skripta. Ta datoteka se nahaja na {your-project-folder} libraries / Adafruit_SSD1306 / Adafruit_SSD1306.h. Če odprete to datoteko, boste opazili, da je spodaj razdelek s komentarji, v katerem je opisano, da morate razkomentirati samo konstanto, ki predstavlja velikost vašega modula zaslona OLED. Pri zaslonskih modulih 128x64 je treba vrstico #define SSD1306_128_64 razkomentirati.

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

Zasloni SSD1306 ------------------------------------------------ ---------------------- Gonilnik se uporablja na več zaslonih (128x64, 128x32 itd.). Spodaj izberite ustrezen zaslon, da ustvarite ustrezno velikost medpomnilnika sličic itd. --------------------------------------------* / #define SSD1306_128_64 / / #define SSD1306_128_32 // #define SSD1306_96_16 /*======================================== ===============================*/

12. korak: Kaj storiti naprej?

Zaslon OLED kot izhodni modul vam lahko daje odlično priložnost, da svojim hobi projektom zagotovite profesionalni vmesnik. Naslednje ideje lahko poskusite kot izhodišče za prikaz pomembnih podatkov o njih ali pomagate uporabniku vedeti, kaj se dogaja, ali če mora kaj narediti. Za uporabnika bi bilo veliko jasneje prebrati sporočilo na zaslonu, kot pa razlagati stanje projekta/naprave prek nekaterih LED.

Kot izhodišče lahko naredite naslednje:

  • Preberite vrednost senzorja temperature in jo prikažite na modulu OLED. Dodate mu lahko senzor tlaka ali vlažnosti in ustvarite popolnoma funkcionalen projekt vremenske postaje.
  • Poskusite narisati nekaj na prikazovalni modul z uporabo krmilne palice kot vhodne naprave.
  • Poskusite narisati animacijo na zaslonu z zaporedjem risanja/zakasnitve klicev funkcije ali prekinitvijo Arduino
  • Pri zagonu sistema prikažite logotip po meri (namesto logotipa Adafruit)

Ne pozabite mi povedati o komentarjih, kaj bi počeli (ali ste že storili) z zaslonskim modulom OLED.

Priporočena: