Turinys:

Pramogos su OLED ekranu ir „Arduino“: 12 žingsnių (su nuotraukomis)
Pramogos su OLED ekranu ir „Arduino“: 12 žingsnių (su nuotraukomis)

Video: Pramogos su OLED ekranu ir „Arduino“: 12 žingsnių (su nuotraukomis)

Video: Pramogos su OLED ekranu ir „Arduino“: 12 žingsnių (su nuotraukomis)
Video: REAL RACING 3 LEAD FOOT EDITION 2024, Liepa
Anonim
Smagu su OLED ekranu ir „Arduino“
Smagu su OLED ekranu ir „Arduino“

Esu tikras, kad tikrai girdėjote apie OLED ekrano technologiją. Tai palyginti nauja ir siūlo geresnę kokybę nei senoji LCD technologija. Šioje pamokoje norime apžvelgti veiksmus, kurių reikia norint parodyti duomenis apie vieną iš labiausiai paplitusių rinkoje esančių vienos spalvos OLED ekrano modulių. Pabandysiu paaiškinti atitinkamos „Adafruit“bibliotekos teikiamas funkcijas, kad būtų rodomi šio modulio duomenys.

1 žingsnis: kokius OLED modulius ketiname naudoti?

Kokius OLED modulius ketiname naudoti?
Kokius OLED modulius ketiname naudoti?
Kokius OLED modulius ketiname naudoti?
Kokius OLED modulius ketiname naudoti?
Kokius OLED modulius ketiname naudoti?
Kokius OLED modulius ketiname naudoti?

Galima įsigyti įvairių dydžių ir funkcijų OLED modulių. Šioje pamokoje naudosime vienspalvį 128x64 OLED modulį. Šio tipo moduliai yra šių dydžių (kad matytumėte paveikslėliuose):

  • 128 x 64
  • 128 x 32
  • 96x16
  • 64 x 48
  • 64 x 32

Kadangi visi šie moduliai palaiko I2C protokolą kaip ryšio priemonę, visų jų kodas ir laidai yra visiškai vienodi. Vienintelis skirtumas yra tas, kad turite atsižvelgti į savo kodo ekrano dydį, kad turinys, kurį ketinate rodyti, tinkamai jame tilptų.

2 žingsnis: I2C trumpai

I2C trumpai
I2C trumpai

Integravus grandynas (IIC), paprastai vadinamas I2C (I kvadratas C), kurį „Philips“sukūrė 80-aisiais kaip duomenų mainų magistralę, naudojamą duomenims perduoti tarp įrenginio centrinio procesoriaus (CPU) arba mikrovaldiklio (MCU) ir periferiniai lustai. Iš esmės jis buvo skirtas televizijos programoms. Dėl savo paprastumo jis tapo toks populiarus, kad po kurio laiko jis tapo vienu iš pagrindinių procesorių ir MCU bei periferinių įrenginių, kurie nėra būtina tos pačios PCB plokštės dalis ir yra prijungti prie laido (pvz., Jutiklių, ekrano moduliai ir kt.).

I2C sudaro komunikacijos magistralė, sudaryta iš dviejų laidų, palaikanti dvikryptį duomenų perdavimą tarp pagrindinio ir kelių pavaldžių įrenginių. Paprastai pagrindinis mazgas yra atsakingas už magistralės valdymą - tai iš tikrųjų daroma generuojant sinchronizavimo signalą nuosekliosios laikrodžio linijoje (SCL). Tai yra signalas, kurį perjungimo metu nuolat siunčia meistras, o visi kiti prie magistralės prijungti mazgai jį naudos sinchronizavimui ir aptiks magistralės greitį. Duomenys perduodami tarp pagrindinio ir pavaldinio per serijinių duomenų (SDA) liniją. Perdavimo greitis gali būti iki 3,4 Mbps. Visi įrenginiai, norintys perduoti duomenis per I2C, turi turėti unikalų adresą ir gali veikti kaip siųstuvas arba imtuvas, atsižvelgiant į įrenginio funkciją. Pavyzdžiui, OLED ekrano modulis yra imtuvas, kuris priima tam tikrus duomenis ir juos rodo, o temperatūros jutiklis yra siųstuvas -imtuvas, siunčiantis fiksuotą temperatūrą per I2C magistralę. Paprastai pagrindinis įrenginys yra įrenginys, inicijuojantis duomenų perdavimą magistralėje ir generuojantis laikrodžio signalus, kad būtų galima perduoti. Šio perdavimo metu bet koks šio pagrindinio kompiuterio adresuotas įrenginys laikomas vergu ir skaito tuos duomenis.

Kai mazgas nori siųsti tam tikrus duomenis, pats pirmasis duomenų baitas turėtų būti imtuvo adresas, o po to - tikri duomenys. Tai reiškia, kad norėdami išsiųsti duomenis į išvesties įrenginį naudojant I2C (pvz., I2C OLED ekrano modulį), pirmiausia turėtume rasti jo I2C adresą ir tai pirmiausia atliksime atlikdami kitus veiksmus.

Jei norite sužinoti daugiau apie I2C magistralės informaciją ir teorijas, galite naudoti šias nuorodas:

www.i2c-bus.org

learn.sparkfun.com/tutorials/i2c

3 žingsnis: reikalingi moduliai ir komponentai

Reikalingi moduliai ir komponentai
Reikalingi moduliai ir komponentai
Reikalingi moduliai ir komponentai
Reikalingi moduliai ir komponentai
Reikalingi moduliai ir komponentai
Reikalingi moduliai ir komponentai

Čia rasite komponentų, kurių jums reikės norint užbaigti šią mokymo programą, sąrašą:

„eBay“nuorodos:

  • 1 x „Arduino Uno“:
  • 1 x 128x64 OLED modulis:
  • 4 x „Dupont“kabelis:
  • 1 x mini duona be litavimo:

„Amazon.com“nuorodos:

  • 1 x „Arduino Uno“:
  • 1 x 128x64 OLED modulis:
  • 4 x „Dupont“kabelis:
  • 1 x mini duona be litavimo:

4 žingsnis: OLED ekrano modulio prijungimas prie „Arduino“

Laidų OLED ekrano modulio prijungimas prie „Arduino“
Laidų OLED ekrano modulio prijungimas prie „Arduino“
Laidų OLED ekrano modulio prijungimas prie „Arduino“
Laidų OLED ekrano modulio prijungimas prie „Arduino“
Laidų OLED ekrano modulio prijungimas prie „Arduino“
Laidų OLED ekrano modulio prijungimas prie „Arduino“
Laidų OLED ekrano modulio prijungimas prie „Arduino“
Laidų OLED ekrano modulio prijungimas prie „Arduino“

Svarbi pastaba apie „I2C“įgalintus įrenginius yra ta, kad būdas, kaip juos prijungti prie „Arduino“, yra tas pats. Taip yra todėl, kad „Arduino“savo I2C ryšį vykdo tik tam tikrais kaiščiais. Šioje pamokoje naudoju „Arduino Uno“. „Arduino Uno“naudoja kaištį A5 kaip SCK, o A4 - kaip SDA. Taigi mes galime prijungti OLED ekrano modulį prie „Arduino Uno“, kaip parodyta schemoje. Kaip matote paveikslėlyje, kurį paėmiau iš savo OLED ekrano modulio, VCC ir GND jungtis skiriasi nuo schemos. Nepamirškite patikrinti savo modulių kaiščių etikečių, kad įsitikintumėte, jog jungiate teisingai.

Mums reikia tik 4 kaiščių, kurie turėtų būti prijungti taip:

„Arduino VCC“-> OLED modulis VCC

„Arduino GND“-> OLED modulis GND

„Arduino 4“-> OLED modulis SDA

„Arduino 5“-> OLED modulis SCK

5 veiksmas: suraskite ekrano modulio adresą

Ekrano modulio adreso paieška
Ekrano modulio adreso paieška

Norėdami prisijungti prie įrenginio, kuriame veikia I2C, pirmiausia turite turėti modulio adresą. Norėdami tai padaryti, prijungę modulį prie „Arduino“, tiesiog įkelkite pridėtą kodą į „Arduino“. Šis kodas apima „Wire“biblioteką, kuri yra biblioteka, įtraukta į „Arduino IDE“, kuri tvarko I2C ryšį. Jis bando nuskaityti prijungtus I2C įrenginius ir siunčia jų adresą per nuoseklųjį prievadą į jūsų kompiuterį. Taigi galite pasiekti jo išvestį naudodami „Arduino IDE“serijos stebėjimo įrankį. Originalią versiją galima rasti „Arduino Playground“). Taip pat galite jį lengviau skaityti mano internetiniame „Arduino“redaktoriuje. Nesitikėkite, kad ekrane nieko nebus rodoma, kol šis kodas veikia.

Kaip matote paveikslėlyje, mano modulis yra susietas su adresu 0x3C. Paprastai visi konkrečios produktų linijos įrenginiai (pavyzdžiui, visi 128x64 OLED moduliai) turi tą patį adresą.

I2C įrenginių adresas yra ribotas nuo 1 iki 126. Šis kodas paprasčiausiai bando prisijungti prie kiekvieno įrenginio tam tikra tvarka (neperduodamas jokių duomenų), o tada patikrina, ar prisijungus prie nurodyto adreso nebuvo klaidų, apie kurias pranešė pagrindinė biblioteka. Jei nėra klaidos, adresas išspausdinamas kaip galimas modulis prisijungti. Taip pat reikėtų pažymėti, kad pirmieji 15 adresų yra rezervuoti, todėl peršoka juos ir tiesiog išspausdina virš šio diapazono esančius adresus. Atminkite, kad šių I2C modulių adresas įrenginyje yra užkoduotas ir jo negalima pakeisti. Taigi būtų gera idėja jį kur nors užrašyti arba ant modulio uždėti etiketę, kai vėl įdėsite jį į laboratorijos lentyną, kad kitą kartą paleisti skaitytuvo kodo nereikėtų. Tačiau tai nėra sudėtinga procedūra;)

6 žingsnis: Įdiekite bibliotekas, reikalingas OLED modulio duomenims rodyti

Norint įdiegti duomenis OLED modulyje, reikia įdiegti bibliotekas
Norint įdiegti duomenis OLED modulyje, reikia įdiegti bibliotekas
Norint įdiegti duomenis OLED modulyje, reikia įdiegti bibliotekas
Norint įdiegti duomenis OLED modulyje, reikia įdiegti bibliotekas

„Wire“biblioteka gali valdyti žemo lygio ryšį su I2C įrenginiais. Jei norite prisijungti prie konkretaus įrenginio, kad galėtumėte skaityti/rašyti duomenis iš jo/į jį, paprastai naudojatės biblioteka, kurią teikia įmonė, kuri iš pradžių sukūrė tą modulį. Ši biblioteka tvarko visą „I2C“ryšio informaciją naudodami nurodytą modulį ir leiskite mums daugiau dėmesio skirti savo verslui, kuris šiuo atveju rodo duomenis taip, kaip norime.

Bendrovė „Adafruit“, gaminanti originalią tokių ekrano modulių versiją, teikia bibliotekas, pavadintas „Adafruit SSD1306“, kad būtų rodomi šių vienspalvių ekranų duomenys. Taigi, prieš pradėdami koduoti, turime įdiegti šią biblioteką per bibliotekos tvarkyklę (pasiekiama per eskizą> Įtraukti biblioteką> Tvarkyti bibliotekas … meniu) „Arduino IDE“. Taip pat yra kita biblioteka, vadinama „Adafruit GFX Library“, kuri tvarko daugiau žemo lygio grafikos ir yra naudojama „Adafruit SSD1306“viduje. Turite juos abu įdiegti „Arduino IDE“, kaip matote nuotraukose.

7 veiksmas: ekrano modulio inicijavimas

Ekrano modulio inicijavimas
Ekrano modulio inicijavimas

Piešimas ant ekrano modulio yra įtrauktas į klasę pavadinimu Adafruit_SSD1306. Šios klasės apibrėžimas yra „Adafruit“bibliotekoje, todėl pirmiausia turime įtraukti šią biblioteką. Tada pirmiausia turime parodyti šios klasės egzempliorių. Šios klasės konstruktorius paima prievado numerį, kuriuo būtų galima iš naujo nustatyti ekraną, kuris yra 4 kaištis (prijungtas prie SCK). Ši kodo dalis turėtų būti failo pradžioje (iš sąrankos () ir kilpos () funkcijų).

#įtraukti

„Adafruit_SSD1306“ekranas (4);

Dabar nustatymo () funkcijos viduje turėtume iškviesti ekrano objekto pradžios funkciją, perduodami mūsų I2C adresą, kaip nurodyta toliau (SSD1306_SWITCHCAPVCC yra pastovi vertė, nurodanti bibliotekos maitinimo šaltinio tipą):

void setup () {

display.begin (SSD1306_SWITCHCAPVCC, 0x3C); display.display (); } void loop () {} // kilpa kol kas gali būti tuščia

Dabar rodomas objektas yra paruoštas ir galime iškviesti jo funkcijas (pvz., Display.write (), display.drawLine ir kt.). Svarbi pastaba yra ta, kad kiekvieną kartą, kai ką nors panaudojame skambindami į savo rodomą objektą, turime iškviesti funkciją display.display (), kad tikrasis piešimas įvyktų aparatūros lygiu. Tai daugiausia lemia tai, kad piešimo funkcijos, kurias mes vadiname, tiesiog atnaujina ekrano „atmintyje“vaizdą dėl našumo priežasčių. Tai iš tikrųjų saugo atminties pokyčius. Taigi, kai baigsime ką nors piešti ekrane, visada turėtume nepamiršti iškviesti funkciją display ().

display.write (…); // nuolat atnaujinamas atmintyje

display.drawLine (…); // nuolat atnaujinamas atmintyje. display.display (); // praplauna visus ekrano aparatūros pakeitimus

Jei bandysite įkelti kodą atlikdami šį veiksmą, pastebėsite, kad bus rodomas „Adafruit Industries“logotipas. Jums gali kilti klausimas, kas paprašė to nupiešti! Tiesą sakant, tai daro „Adafruit“biblioteka. Jis inicijuoja modulio atmintį (ekrano aparatūros atvaizdą atmintyje) su šios įmonės logotipu. Jei nenorite to matyti inicializacijos metu, galite pabandyti iškviesti funkciją display.clearDisplay () prieš skambindami į display.display () savo sąrankos funkcijoje. Ši funkcija, kaip rodo jos pavadinimas, visiškai išvalo ekraną.

#įtraukti

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

Remdamiesi „Adafruit_SSD1306“bibliotekos dokumentais, galite naudoti įvairias šios klasės funkcijas, norėdami piešti ekrane arba tiesiogiai manipuliuoti jo taškais. Tolesniuose skyriuose mes stengsimės pateikti kiekvieno iš jų pavyzdį, kad galėtumėte susidaryti idėją, kaip tai veikia. Daugelyje šių pavyzdžių bus rodomas tik paprastas statinis turinys, todėl galime juos tiesiog įdėti į savo sąrankos () funkciją (po iniciacijos kodo). Tokiu būdu jis būtų paleistas tik vieną kartą ir lieka ten.

8 žingsnis: Parodykite paprastą tekstą

Parodykite paprastą tekstą
Parodykite paprastą tekstą
Parodykite paprastą tekstą
Parodykite paprastą tekstą
Parodykite paprastą tekstą
Parodykite paprastą tekstą

Norėdami rodyti tekstą, galime naudoti paprastą bibliotekos funkciją display.println (). Jis priima tekstą kaip eilutę ir bando jį parodyti. Svarbu žinoti, kad turime pasakyti bibliotekai, kur ekrane pateiksime tekstą. Kiekvienas ekrano pikselis turi koordinates, nurodytas X ir Y. X didėja iš kairės į dešinę, o Y - iš viršaus į apačią. Viršutinis kairysis ekrano kampas yra (X = 0, Y = 0), o apatinis dešinysis kampas (X = 127, Y = 63). Pirmame paveikslėlyje pažymėjau kampų koordinates. Mes galime naudoti funkciją display.setCursor (), norėdami nurodyti, kurioje ekrano vietoje rodysime tekstą.

Kita teksto savybė yra jo spalva. Spalvą galime nurodyti naudodami display.setTextColor (), kaip parodyta kitame pavyzdyje.

display.clearDisplay ();

display.setTextColor (BALTA); display.setCursor (35, 30); display.println („Labas pasaulis!“); display.display ();

Taip pat galime naudoti funkciją display.write (), kad būtų parodytas vienas simbolis. Jis priima simbolio kodą kaip uint8_t tipą ir parodo tą kodą atitinkantį simbolį eilutėje. Pavyzdžiui, jei norime rodyti tą pačią eilutę naudodami šią funkciją, galime naudoti šį fragmentą:

display.clearDisplay ();

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

Taip pat galima piešti juodos spalvos tekstus baltame fone. Norėdami tai padaryti, turite iškviesti funkciją display.setTextColor, kaip nurodyta toliau:

display.clearDisplay ();

// Nustato spalvą į juodą su baltos spalvos fono ekranu.setTextColor (BLACK, WHITE); display.setCursor (25, 30); display.println ("Apverstas tekstas!"); display.display ();

Taip pat galite nustatyti teksto dydį naudodami funkciją display.setTextSize (). Jis priima sveiką skaičių kaip dydį. Kuo didesnis skaičius, tuo didesnis tekstas. Mažiausias dydis yra 1, kuris yra numatytasis teksto dydis. Šis kodas bando parašyti raidę „A“6 skirtingais dydžiais:

display.clearDisplay ();

display.setTextColor (BALTA); 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 žingsnis: Pagrindinių formų piešimas

Pagrindinių formų piešimas
Pagrindinių formų piešimas
Pagrindinių formų piešimas
Pagrindinių formų piešimas
Pagrindinių formų piešimas
Pagrindinių formų piešimas

Piešti pagrindines figūras, tokias kaip stačiakampis, apskritimas, trikampis, linija ar taškas, yra labai paprasta, ir kiekvienam iš jų yra skirta funkcija.

Piešimo linija

Norėdami nubrėžti liniją, galite paskambinti į display.drawLine (startX, startY, endX, endY, color). Pavyzdžiui, šis kodas ekrane nubrėžia įstrižas linijas, kad jos suformuotų didelį X:

display.clearDisplay ();

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

Ekrano plotį ir aukštį galite pasiekti naudodami funkcijas display.width () ir display.height (). Tokiu būdu jūsų kodas būtų nepriklausomas nuo ekrano dydžio.

Piešimo stačiakampis

Funkcija piešti stačiakampį yra „display.drawRect“(viršutinė kairėX, viršutinė kairėY, plotis, aukštis, spalva). Čia yra kodas, kuris atsitiktinėse vietose nubrėžia tris stačiakampius:

display.clearDisplay ();

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

Skambindami display.fillRect (viršutinė kairėX, viršutinė kairėY, plotis, aukštis, BALTA) galite piešti stačiakampį, užpildytą nurodyta spalva. Taip pat trečioji šio pavyzdžio funkcija yra display.drawRoundRect (viršutinė kairėX, viršutinė kairėY, plotis, aukštis, kampasRadius, spalva), kuri, kaip matote paveikslėlyje, naudojama stačiakampiui su apvaliais kampais piešti. Jis priima papildomą parametrą prieš spalvą, tai yra sveikasis skaičius, nurodantis kampo spindulį. Kuo didesnė vertė, tuo apvalesnis kampas. Jis taip pat turi atitinkamą užpildymo funkciją pavadinimu display.drawFillRoundRect, kurią, manau, galite atspėti, ką ji daro.

Piešimo ratas

Funkcija yra display.drawCircle (centreX, centreY, spindulys, spalva). Štai pavyzdys, kuris piešia šypsenėlę:

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

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

Kaip ir stačiakampiai, galite naudoti funkciją display.fillCircle, kad nupieštumėte apskritimą, užpildytą nurodyta spalva.

Piešimo trikampis

Ahh, vėl funkcija, vadinama display.drawTriangle (poin1X, point1Y, point2X, point2Y, point3X, point3Y, color) ir atitinkamas display.fillTriangle, kuris piešia užpildytą trikampį.

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

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

Nubrėžkite tašką

Taip pat ekrane galite nuspalvinti tam tikrą tašką (vadinamą pikseliu) naudodami ekraną.drawPixel (pixelX, pixelY, color).

display.drawPixel (20, 35, BALTAS);

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

10 žingsnis: pieškite paveikslėlį

Piešimo vaizdas
Piešimo vaizdas
Piešimo vaizdas
Piešimo vaizdas

Piešimo vaizdas yra kitoks ir šiek tiek sudėtingas. Kadangi ekrano modulis yra vienspalvis, pirmiausia turime konvertuoti savo vaizdą į formatą, vadinamą vienspalviu bitų žemėlapiu (dar vadinamu nespalvotu). Tokiu formatu kiekvienas vaizdo pikselis pateikiamas su 0 arba 1. 1s simbolizuoja spalvos egzistavimą, o 0s reiškia tuščią vietą. Šio skyriaus viršuje galite pamatyti „Arduino“logotipo pavyzdį. Funkcija piešti bitmap atvaizdą yra display.drawBitmap (topLeftX, topLeftY, imageData, plotis, aukštis, spalva). „ImageData“parametras yra skaičių masyvas baitais. Kiekvienas baitas turi 8 bitus, todėl kiekviename baite yra 8 vaizdo taškų duomenys. Nurodydama vaizdo plotį ir aukštį, drawBitmap funkcija žinos, nuo kurio bitų prasideda kita pikselių eilutė.

Sprendimas, kurį nusprendžiau konvertuoti į šį formatą, buvo pirmiausia naudoti vieną iš „vaizdo į ASCII keitiklį“internete (pvz., Http://my.asciiart.club), kad mano paveikslėlis būtų paverstas ASCII simbolių rinkiniu ir tada pakeistas simboliai, naudojami tuščiai erdvei, yra 0, o kiti - po 1. Štai ką matote žemiau. Kiekvieną 0 ir 1 galite įsivaizduoti kaip pikselį ekrane. Taigi paveikslėlio dydis neturėtų viršyti mūsų ekrano dydžio, kuris yra 128x64.

Pastaba: Naudoti šią ASCII techniką nerekomenduojama, nes dėl simbolių formato vaizdo jūsų vaizdas bus deformuotas (simboliai nėra kvadratas). Aš išbandžiau šią techniką tik todėl, kad lengviau konvertuoti vaizdą į reikiamą formatą. Priešingu atveju būtų galima pasiekti geriausių rezultatų per tam tikrą programavimą arba naudojant kai kurias pagalbines programas, kurios visiškai nepatenka į šio teksto taikymo sritį.

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

Dabar turėtume padalinti kiekvieną eilutę iš 8, atstovaujantį baitą, ir išsaugoti juos masyve, kaip nurodyta toliau:

static const unsigned char PROGMEM arduino_logo = {

B00000000, B00000000, B00000111, B11111111, B11111111, B11100000, B00000000, B00000000, B00000000, B00000000, B01111111, B11111111, B11111111, B11111110, B00000000, B00000000, pabaiga

Tada mes galime nupiešti jį ekrane, iškviesdami drawBitmap funkciją.

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

11 veiksmas: trikčių šalinimas

Tai buvo ilga pamoka, todėl labai tikėtina, kad kažkas negerai. Štai keletas dažniausiai pasitaikančių klaidų, su kuriomis galite susidurti nustatydami savo projekto OLED ekrano modulį (kai kurios iš jų įvyko man rengiant šią mokymo programą).

Visai nieko nerodoma

Taip gali atsitikti dėl daugelio priežasčių, todėl siūlau patikrinti šį sąrašą, kuris yra tinkamas jūsų projektui:

I2C adresas tikriausiai neteisingas

Nustatydami ekrano objektą įsitikinkite, kad nustatėte adresą, kurį gavote i2c-skaitytuvo kode.

SCL ir SDA yra sujungti netinkamai

Tai iš tikrųjų atsitiko man. Jei naudojate „Arduino Uno“, turite dar kartą patikrinti savo ryšius, kad įsitikintumėte, jog jie prijungti taip pat, kaip mano. Jei naudojate kitą „Arduino“leidimą (pvz., „Mega“, „Leonardo“ir kt.), Turite žinoti, kad jų I2C gali būti nustatytas kaip kiti kaiščiai. Jį galite patikrinti „Wire“bibliotekos dokumentuose.

Jūs kažką piešiate iš matomos srities

Tai yra programinės įrangos problema. Tai labai įprasta, kai piešimo funkcijos naudojamos neteisingai apskaičiuoti kai kurias koordinates, todėl jūsų piešinys bus deformuotas arba blogiausiu atveju gali būti visiškai išvykęs. Peržiūrėkite savo skaičiavimus ir pabandykite žingsnis po žingsnio piešti, kad pamatytumėte, kas vyksta.

Tekstas visai nerodomas

Pamiršote nustatyti teksto spalvą arba nustatėte neteisingą vertę

Prieš piešdami tekstus, turite paskambinti setTextColor. Priešingu atveju jūs neturite klaidų, bet ekrane nieko nematysite. Taip pat galite nustatyti, kad teksto spalva būtų tokia pati kaip fono spalva.

Jūs naudojate labai didelį šriftą

Jei nustatysite labai didelę teksto vertę, gali būti, kad simboliai visiškai išeis iš matomos srities.

Kompiliavimo klaida dėl ekrano dydžio

Taip atsitiko ir man, ir manau, kad tai nutiks daugumai jūsų. Būtent dėl ekrano dydžio konstantų reikšmių, kurios yra apibrėžtos antraštės faile „Adafruit_SSD1306.h“, įtraukiame į savo scenarijų. Šis failas yra adresu {your-project-folder} libraries / Adafruit_SSD1306 / Adafruit_SSD1306.h. Jei atidarysite šį failą, pastebėsite, kad žemiau yra komentarų skyrius, kuriame aprašoma, kad jums reikia atšaukti tik tą konstantą, kuri atitinka jūsų OLED ekrano modulio dydį. 128x64 ekrano modulių eilutė #define SSD1306_128_64 turėtų būti nekomentuojama.

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

SSD1306 ekranai ------------------------------------------------ ---------------------- Vairuotojas naudojamas keliuose ekranuose (128x64, 128x32 ir tt). Pasirinkite tinkamą ekraną, kad sukurtumėte tinkamo dydžio kadrų buferį ir pan. SSD1306_128_64 128x64 pikselių ekranas SSD1306_128_32 128x32 pikselių ekranas SSD1306_96_16 --------------------------- --------------------------------------------* / #define SSD1306_128_64 / / #define SSD1306_128_32 // #define SSD1306_96_16 /*======================================= ===============================*/

12 žingsnis: ką daryti toliau?

OLED ekranas kaip išvesties modulis gali suteikti jums puikią galimybę profesionaliai atrodančiai sąsajai su jūsų pomėgių projektais. Galite išbandyti šias idėjas kaip pradinį tašką, kad pateiktumėte reikšmingus duomenis apie tai arba padėtumėte vartotojui sužinoti, kas vyksta, ar jam reikėjo ką nors padaryti. Naudotojui būtų daug aiškiau skaityti pranešimą ekrane, nei interpretuoti projekto/įrenginio būseną per kai kuriuos šviesos diodus.

Ką galite padaryti kaip pradinį tašką:

  • Perskaitykite temperatūros jutiklio vertę ir parodykite ją OLED modulyje. Prie jo galite pridėti slėgio ar drėgmės jutiklį ir sukurti visiškai veikiantį orų stoties projektą.
  • Pabandykite ką nors nupiešti ant ekrano modulio, naudodami kreiptuką kaip įvesties įrenginį.
  • Pabandykite ekrane nupiešti animaciją piešimo/uždelsimo funkcijos iškvietimų seka arba „Arduino“pertrauka
  • Sistemos paleidimo metu rodykite pasirinktinį logotipą (vietoj „Adafruit“logotipo)

Nepamirškite man pasakyti komentaruose, ką darytumėte (ar jau padarėte) naudodami OLED ekrano modulį.

Rekomenduojamas: