Sisukord:

Lõbus OLED -ekraani ja Arduinoga: 12 sammu (piltidega)
Lõbus OLED -ekraani ja Arduinoga: 12 sammu (piltidega)

Video: Lõbus OLED -ekraani ja Arduinoga: 12 sammu (piltidega)

Video: Lõbus OLED -ekraani ja Arduinoga: 12 sammu (piltidega)
Video: НЕЗАКОННЫЕ Эксперименты c БОКСИ БУ из ПОППИ ПЛЕЙТАЙМ и ХАГИ ВАГИ в VR! 2024, November
Anonim
Lõbus OLED -ekraani ja Arduino abil
Lõbus OLED -ekraani ja Arduino abil

Olen üsna kindel, et olete OLED -ekraanitehnoloogiast kindlasti kuulnud. See on suhteliselt uus ja pakub paremat kvaliteeti kui vana LCD -tehnoloogia. Selles õpetuses tahame üle vaadata sammud, mis on vajalikud andmete kuvamiseks ühel levinumal ühevärvilisel OLED -ekraanimoodulil, mis turul saadaval on. Püüan selgitada vastava Adafruit'i raamatukogu funktsioone selle mooduli andmete kuvamiseks.

Samm: milliseid OLED -mooduleid kavatseme kasutada?

Milliseid OLED -mooduleid kavatseme kasutada?
Milliseid OLED -mooduleid kavatseme kasutada?
Milliseid OLED -mooduleid kavatseme kasutada?
Milliseid OLED -mooduleid kavatseme kasutada?
Milliseid OLED -mooduleid kavatseme kasutada?
Milliseid OLED -mooduleid kavatseme kasutada?

OLED -mooduleid on saadaval mitmesugustes suurustes ja funktsioonides. Selles õpetuses kasutame ühevärvilist 128x64 OLED -moodulit. Seda tüüpi moodulid on saadaval järgmistes suurustes (piltidel näha):

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

Kuna kõik need moodulid toetavad sidevahendina I2C protokolli, on nende kõigi kood ja juhtmestik täpselt samad. Ainus erinevus on see, et peate arvestama oma koodi kuvari suurusega, et kuvatav sisu sellele korralikult sobiks.

2. etapp: I2C lühidalt

I2C lühidalt
I2C lühidalt

Integreeritud ahel (IIC), mida tavaliselt nimetatakse I2C-ks (I ruut C), mille Philips on välja töötanud 80ndatel kui andmevahetussiini, mida kasutatakse andmete edastamiseks seadme keskprotsessori (CPU) või mikrokontrolleri (MCU) vahel ja perifeersed kiibid. See oli põhimõtteliselt suunatud telerakendustele. Oma lihtsuse tõttu sai see nii populaarseks, et mõne aja pärast sai sellest üks peamisi protsessorite ja MCU -de ning välisseadmete andmeedastuse mehhanisme, mis ei ole sama PCB -plaadi vajalikud osad ja on sellega juhtme kaudu ühendatud (nt andurid, kuvamoodulid jne).

I2C koosneb kahest juhtmest koosnevast sidesiinist, mis toetab kahesuunalist andmeedastust ülem- ja mitme alamseadme vahel. Tavaliselt vastutab siinisõlme juhtimise eest põhisõlm - mida tegelikult tehakse sünkroniseerimissignaali genereerimisega jadakella liinil (SCL). See on signaal, mida kapten saadab edastamise ajal pidevalt ja kõik teised siiniga ühendatud sõlmed kasutavad seda oma side sünkroonimiseks ja bussi kiiruse tuvastamiseks. Andmed edastatakse ülem- ja alluvvõrgu vahel jadaandmete (SDA) liini kaudu. Edastuskiirus võib olla kuni 3,4 Mbps. Kõigil seadmetel, mis soovivad andmeid I2C kaudu edastada, peaks olema ainulaadne aadress ja need võivad sõltuvalt seadme funktsioonist toimida saatja või vastuvõtjana. Näiteks OLED -ekraanimoodul on vastuvõtja, mis võtab osa andmeid vastu ja kuvab neid, samas kui temperatuuriandur on transiiver, mis saadab salvestatud temperatuuri I2C -siini kaudu. Tavaliselt on põhiseade seade, mis algatab siinil andmeedastuse ja genereerib edastamiseks kella signaalid. Selle ülekande ajal loetakse kõik selle meistri poolt adresseeritud seadmed orjaks ja loeb neid andmeid.

Kui sõlm soovib mõnda teavet saata, peaks andmete esimene bait olema vastuvõtja aadress ja seejärel tulevad tegelikud andmed. See tähendab, et andmete saatmiseks väljundseadmesse I2C abil (nt I2C OLED -ekraanimoodul) peaksime kõigepealt leidma selle I2C -aadressi ja seda teeme kõigepealt järgmistes sammudes.

Kui soovite rohkem teada saada I2C bussi üksikasjade ja teooriate kohta, võite kasutada järgmisi viiteid:

www.i2c-bus.org

learn.sparkfun.com/tutorials/i2c

3. samm: nõutavad moodulid ja komponendid

Nõutavad moodulid ja komponendid
Nõutavad moodulid ja komponendid
Nõutavad moodulid ja komponendid
Nõutavad moodulid ja komponendid
Nõutavad moodulid ja komponendid
Nõutavad moodulid ja komponendid

Siit leiate komponentide loendi, mida vajate selle õpetuse lõpuleviimiseks:

eBay lingid:

  • 1 x Arduino Uno:
  • 1 x OLED -moodul 128x64:
  • 4 x Duponti kaabel:
  • 1 x jootmiseta mini leivaplaat:

Amazon.com lingid:

  • 1 x Arduino Uno:
  • 1 x OLED -moodul 128x64:
  • 4 x Duponti kaabel:
  • 1 x jootmiseta leivaplaat Mini:

Samm: ühendage OLED -ekraanimoodul Arduinoga

OLED -ekraanimooduli ühendamine Arduinoga
OLED -ekraanimooduli ühendamine Arduinoga
OLED -ekraanimooduli ühendamine Arduinoga
OLED -ekraanimooduli ühendamine Arduinoga
OLED -ekraanimooduli ühendamine Arduinoga
OLED -ekraanimooduli ühendamine Arduinoga
OLED -ekraanimooduli ühendamine Arduinoga
OLED -ekraanimooduli ühendamine Arduinoga

Oluline märkus I2C -toega seadmete kohta on see, et viis, kuidas need Arduinoga ühendada, on sama. Seda seetõttu, et Arduino käivitab oma I2C -side ainult teatud tihvtidel. Selles õpetuses kasutan Arduino Unot. Arduino Uno kasutab tihvti A5 SCK -na ja A4 -d SDA -na. Nii saame ühendada OLED -ekraanimooduli Arduino Unoga, nagu on näidatud skemaatilises vaates. Nagu võite märgata pildil, mille olen oma OLED -ekraanimoodulist võtnud, on VCC ja GND pistik skemaatilisest vaates erinev. Ärge unustage kontrollida moodulite tihvtide silte, et veenduda, et ühendate selle õigesti.

Vajame ainult 4 tihvti, mis tuleks ühendada järgmiselt:

Arduino VCC -> OLED -moodul VCC

Arduino GND -> OLED -moodul GND

Arduino 4 -> OLED -moodul SDA

Arduino 5 -> OLED -moodul SCK

Samm 5: Kuvamooduli aadressi leidmine

Kuvamooduli aadressi leidmine
Kuvamooduli aadressi leidmine

I2C -toega seadmega ühenduse loomise esimese sammuna peab teil olema mooduli aadress. Selleks peaksite pärast mooduli ühendamist oma Arduinoga üles laadima lisatud koodi oma Arduinole. See kood sisaldab Wire -raamatukogu, mis on Arduino IDE -ga kaasas olev teek, mis tegeleb I2C -sidega. See proovib skannida ühendatud I2C -seadmeid ja saadab nende aadressid jadapordi kaudu teie arvutisse. Nii et pääsete selle väljundile juurde Arduino IDE jadamonitori tööriista kaudu. Algne versioon on saadaval Arduino mänguväljakul). Samuti saate seda minu veebipõhises Arduino redaktoris loetavamal viisil vaadata. Ärge oodake, et selle koodi töötamise ajal kuvatakse ekraanile midagi.

Nagu pildilt näha, on minu moodul seotud aadressiga 0x3C. Tavaliselt on kõigil kindla tootesarja seadmetel (näiteks kõik 128x64 OLED -moodulid) sama aadress.

I2C -seadmete aadressid on piiratud vahemikus 1 kuni 126. See kood proovib lihtsalt ühendada iga seadmega järjekorras (ilma andmeid edastamata) ja seejärel kontrollida, kas pakutud teegil on teatatud veast teatatud aadressiga ühenduse loomisel. Kui viga pole, prindib aadress ühenduse loomiseks saadaoleva moodulina. Samuti tuleb märkida, et esimesed 15 aadressi on reserveeritud, nii et see hüppab neist üle ja prindib lihtsalt selle vahemiku kohal olevad aadressid. Pidage meeles, et nende I2C moodulite aadress on seadmes kõvasti kodeeritud ja seda ei saa muuta. Seega oleks hea mõte see kuhugi üles kirjutada või moodulile silt panna, kui kavatsete selle oma laboririiulile tagasi panna, nii et järgmisel korral poleks skanneri koodi käivitamine vajalik. See pole aga keeruline protseduur;)

6. samm: OLED -moodulis andmete kuvamiseks vajalike raamatukogude installimine

OLED -mooduli andmete kuvamiseks vajalike raamatukogude installimine
OLED -mooduli andmete kuvamiseks vajalike raamatukogude installimine
OLED -mooduli andmete kuvamiseks vajalike raamatukogude installimine
OLED -mooduli andmete kuvamiseks vajalike raamatukogude installimine

Wire raamatukogu saab hakkama madala tasemega suhtlemisega I2C seadmetega. Kui soovite ühenduse luua konkreetse seadmega, et sealt andmeid lugeda/sinna kirjutada, siis tavaliselt kasutate teeki, mille pakub ettevõte, kes selle mooduli algselt ehitas. See raamatukogu käsitleb kõiki I2C kommunikatsiooni üksikasju antud mooduliga ja võimaldab meil keskenduda rohkem oma ärile, mis antud juhul kuvab andmeid soovitud viisil.

Ettevõte Adafruit, kes toodab selliste kuvarimoodulite originaalversiooni, pakub raamatukogusid nimega Adafruit SSD1306, et kuvada nende ühevärviliste kuvarite andmeid. Nii et enne kodeerimise alustamist peame selle teegi installima raamatukoguhalduri kaudu (juurdepääsetav menüü Sketch> Include Library> Manage Libraries…) Arduino IDE -s. Samuti on olemas teine raamatukogu nimega Adafruit GFX Library, mis tegeleb madalama taseme graafilise kraamiga ja mida kasutab Adafruit SSD1306 sisemiselt. Mõlemad peavad teie Arduino IDE -sse olema installitud, nagu näete piltidel.

Samm 7: Kuvamooduli lähtestamine

Kuvamooduli lähtestamine
Kuvamooduli lähtestamine

Ekraanimooduli joonistamine on pakitud klassi nimega Adafruit_SSD1306. Selle klassi määratlus on Adafruit'i raamatukogus, seega peame esmalt selle raamatukogu kaasama. Seejärel peame esmalt selle klassi eksemplari näitama. Selle klassi konstruktor võtab pordi numbri, mille abil saab ekraani lähtestada ja mis on tihvt 4 (ühendatud SCK -ga). See koodi osa peaks asuma faili alguses (funktsioonist väljas () ja silmus () funktsioonid väljas).

#kaasake

Adafruit_SSD1306 ekraan (4);

Nüüd peaksime funktsiooni setup () sees kutsuma kuvamisobjekti algusfunktsiooni, edastades meie I2C aadressi, nagu allpool (SSD1306_SWITCHCAPVCC on konstantne väärtus, mis määrab teeki toiteallika tüübi):

tühine seadistus () {

display.begin (SSD1306_SWITCHCAPVCC, 0x3C); display.display (); } void loop () {} // silmus võib praegu tühi olla

Nüüd on kuvatav objekt valmis ja saame selle funktsioonidele helistada (nt display.write (), display.drawLine jne). Oluline märkus on see, et alati, kui me oma kuvariobjektile helistades midagi kasutame, peame helistama funktsioonile display.display (), et tegelik joonistamine toimuks riistvaratasandil. See on peamiselt tingitud asjaolust, et joonistusfunktsioonid, mida me kutsume, värskendavad jõudluse huvides lihtsalt ekraani "mälus" esitust. See salvestab tegelikult mälu muutused. Seega peaksime alati meeles pidama funktsiooni display () helistamist, kui oleme ekraanile midagi joonistanud.

display.write (…); // uuendab pidevalt mälus

display.drawLine (…); // uuendab pidevalt mälus. display.display (); // loputab kõik ekraaniriistvara muudatused

Kui proovite selles etapis oma koodi üles laadida, märkate, et kuvatakse Adafruit Industriesi logo. Võite küsida, kes on palunud tal seda joonistada! Tegelikult teeb seda Adafruit raamatukogu. See lähtestab mooduli mälu (kuvari riistvara mälus) selle ettevõtte logoga. Kui te ei soovi seda initsialiseerimise ajal näha, võite proovida helistada funktsioonile display.clearDisplay () enne seadistusfunktsiooni display.display () helistamist. See funktsioon, nagu nimigi ütleb, puhastab ekraani täielikult.

#kaasake

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

Adafruit_SSD1306 raamatukogu dokumentatsiooni põhjal saate selle klassi erinevaid funktsioone kasutada ekraanil joonistamiseks või sellel olevate pikslite otseseks manipuleerimiseks. Järgmistes jaotistes püüame esitada igaühe kohta näite, et saaksite aimu selle toimimisest. Enamik neist näidetest kuvab lihtsalt lihtsat staatilist sisu, nii et saame need lihtsalt oma funktsiooni setup () sisse panna (pärast lähtestamiskoodi). Seda tehes käivitatakse see ainult üks kord ja see jääb sinna.

Samm: kuvage lihtne tekst

Lihtsa teksti kuvamine
Lihtsa teksti kuvamine
Lihtsa teksti kuvamine
Lihtsa teksti kuvamine
Lihtsa teksti kuvamine
Lihtsa teksti kuvamine

Teksti kuvamiseks saame kasutada teegi lihtsat funktsiooni display.println (). See aktsepteerib teksti stringina ja proovib seda kuvada. Oluline on teada, et peame raamatukogule ütlema, kus ekraanil teksti esitame. Ekraani igal pikslil on koordinaat, mis on määratud X ja Y. X suureneb vasakult paremale ja Y suureneb ülevalt alla. Ekraani ülemine vasak nurk on (X = 0, Y = 0) ja parem alumine nurk (X = 127, Y = 63). Märkasin esimesel pildil nurkade koordinaadid. Funktsiooni display.setCursor () abil saame määrata, kus ekraanil teksti kuvame.

Teksti teine omadus on selle värv. Värvi saame määrata display.setTextColor () abil, nagu on näidatud järgmisel näidisel.

display.clearDisplay ();

display.setTextColor (VALGE); display.setCursor (35, 30); display.println ("Tere maailm!"); display.display ();

Ühe tähemärgi kuvamiseks võime kasutada ka funktsiooni display.write (). See aktsepteerib märgi koodi uint8_t tüübina ja kuvab stringile sellele koodile vastava märgi. Näiteks kui tahame selle funktsiooni abil kuvada sama stringi, saame kasutada järgmist katkendit:

display.clearDisplay ();

display.setTextColor (VALGE); display.setCursor (35, 30); kuva.kirjutamine (72); display.write (101); display.write (108); display.write (108); display.write (111); kuva.kirjutamine (32); kuva.kirjutamine (87); display.write (111); display.write (114); display.write (108); display.write (100); kuva.kirjutamine (33); display.display ();

Samuti on võimalik valge taustaga musta värvi tekste joonistada. Selleks peate helistama funktsiooni display.setTextColor järgmiselt:

display.clearDisplay ();

// Määrab valge taustaga ekraani värvi mustaks.setTextColor (BLACK, WHITE); display.setCursor (25, 30); display.println ("Pööratud tekst!"); display.display ();

Teil on ka võimalus määrata teksti suurus funktsiooni display.setTextSize () abil. See võtab suuruseks täisarvulise arvu. Mida suurem on number, seda suurem on tekst. Väikseim suurus on 1, mis on tekstide vaikesuurus. Järgmine kood proovib kirjutada tähte "A" kuues erinevas suuruses:

display.clearDisplay ();

display.setTextColor (VALGE); 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. samm: põhikujude joonistamine

Põhikujude joonistamine
Põhikujude joonistamine
Põhikujude joonistamine
Põhikujude joonistamine
Põhikujude joonistamine
Põhikujude joonistamine

Põhikujude, näiteks ristküliku, ringi, kolmnurga, joone või punkti, joonistamine on väga lihtne ja igaühe jaoks on eraldi funktsioon.

Joone joonistamine

Joone tõmbamiseks võite helistada display.drawLine (startX, startY, endX, endY, värv). Näiteks järgnev kood tõmbab ekraanile diagonaaljooned nii, et need kujundavad suure 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 ();

Ekraani laiusele ja kõrgusele pääsete juurde funktsioonide display.width () ja display.height () abil. Seda tehes oleks teie kood ekraani suurusest sõltumatu.

Ristküliku joonistamine

Ristküliku joonistamise funktsioon on display.drawRect (ülemineLeftX, ülemineLeftY, laius, kõrgus, värv). Siin on kood, mis tõmbab mõnele juhuslikule kohale kolm ristkülikut:

display.clearDisplay ();

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

Helistades display.fillRect (ülemineLeftX, ülemineVasakY, laius, kõrgus, VALGE) saate joonistada määratud värviga täidetud ristküliku. Ka selle näite kolmas funktsioon on display.drawRoundRect (ülemineLeftX, ülemineLeftY, laius, kõrgus, nurkRaadius, värv), mida, nagu näete pildil, kasutatakse ümarate nurkadega ristküliku joonistamiseks. See aktsepteerib enne värvi täiendavat parameetrit, mis on täisarv, mis näitab nurga raadiust. Mida suurem väärtus, seda ümaram on nurk. Sellel on ka vastav täitmisfunktsioon nimega display.drawFillRoundRect, mida ma arvan, et võite arvata, mida see teeb.

Joonistusring

Funktsioon on display.drawCircle (centerX, centerY, raadius, värv). Siin on näide, mis joonistab naeratusetaolise kuju:

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

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

Sarnaselt ristkülikutega saate funktsiooni display.fillCircle abil joonistada antud värviga täidetud ringi.

Joonistav kolmnurk

Ahh, jälle funktsioon nimega display.drawTriangle (poin1X, point1Y, point2X, point2Y, point3X, point3Y, color) ja vastav display.fillTriangle, mis joonistab täidetud kolmnurga.

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

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

Joonista punkt

Samuti saate ekraani kaudu teatud punkti (mida nimetatakse piksliteks) värvida ekraani kaudu.drawPixel (pixelX, pixelY, color).

display.drawPixel (20, 35, VALGE);

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

10. samm: pildi joonistamine

Pildi joonistamine
Pildi joonistamine
Pildi joonistamine
Pildi joonistamine

Pildi joonistamine on erinev ja natuke keeruline. Kuna kuvamoodul on ühevärviline, peame esmalt oma pildi teisendama vormingusse, mida nimetatakse ühevärviliseks bitkaardiks (nimetatakse ka mustvalgeks). Sellises vormingus esitatakse pildi iga piksli kas 0 või 1. 1 -d tähistavad värvi olemasolu ja 0 -d tühja ruumi. Selle jaotise ülaosas näete Arduino logo näidist selles vormingus. Bittkaardipildi joonistamise funktsioon on display.drawBitmap (topLeftX, topLeftY, imageData, laius, kõrgus, värv). ImageData parameeter on numbrite massiiv baitides. Igal baidil on 8 bitti, nii et iga bait sisaldab pildi 8 piksli andmeid. Pildi laiuse ja kõrguse määramisel saab drawBitmap funktsioon teada, millisest bitist algab järgmine pikslirida.

Lahenduseks, mille valisin oma pildi sellisesse vormingusse teisendamiseks, oli esmalt kasutada ühte veebipõhisest "pilt ASCII muunduriks" (nt https://my.asciiart.club), et teisendada pilt ASCII tähemärkideks ja seejärel asendada tähemärke, mida kasutatakse tühja ruumi jaoks 0 võrra ja teisi märke 1. Seda näete allpool. Võite mõelda igale 0 ja 1 kui pikslile ekraanil. Seega ei tohiks pildi suurus ületada meie ekraani suurust, mis on 128x64.

Märkus. Selle ASCII tehnika kasutamine ei ole soovitatav lähenemisviis, sest tähemärkide kuvasuhte tõttu muutub teie pilt deformeerituks (märgid ei ole ruudukujulised). Proovisin seda tehnikat lihtsalt sellepärast, et see hõlbustab pildi teisendamist nõutud vormingusse. Vastasel juhul oleks võimalik saavutada parim tulemus mõne programmeerimise või mõne utiliidirakenduse abil, mis ei kuulu käesoleva teksti reguleerimisalasse.

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

Nüüd peaksime iga rea jagama 8 -ga, esindades baiti, ja salvestama need massiivi, nagu allpool:

staatiline const unsigned char PROGMEM arduino_logo = {

B00000000, B00000000, B00000111, B11111111, B11111111, B11100000, B00000000, B00000000, B00000000, B00000000, B01111111, B11111111, B11111111, B11111110, B00000000, B00000000, lõpp …

Siis saame selle ekraanile joonistada, kutsudes funktsiooni drawBitmap.

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

11. samm: tõrkeotsing

See oli pikk õpetus ja seega on suure tõenäosusega midagi valesti. Siin on loetelu mõningatest levinumatest vigadest, mis võivad tekkida teie projekti OLED -ekraanimooduli seadistamisel (mõned neist juhtusid minu jaoks selle õpetuse ettevalmistamisel).

Midagi ei kuvata üldse

See võib juhtuda mitmel põhjusel, nii et soovitan kontrollida järgmist loendit, mis on teie projektis võimalik:

I2C aadress on ilmselt vale

Veenduge, et olete kuvariobjekti seadistamisel määranud funktsiooni i2c-skanneri koodis sisalduva aadressi.

SCL ja SDA on valesti ühendatud

See juhtus tegelikult minu jaoks. Kui kasutate Arduino Unot, peate oma ühendused uuesti kontrollima, et veenduda, et need on ühendatud minu omadega. Kui kasutate mõnda muud Arduino väljaannet (nt Mega, Leonardo jne), peate teadma, et nende I2C võib olla seatud teistele tihvtidele. Seda saate vaadata Wire raamatukogu dokumentatsioonist.

Joonistate nähtavalt alalt midagi välja

See on tarkvara probleem. See on väga tavaline, kui joonistusfunktsioonide abil arvutatakse mõned koordinaadid valesti ja nii muutub teie joonis deformeerituks või halvimal juhul võib see stseenist täielikult välja jääda. Vaadake oma arvutused üle ja proovige joonistada samm -sammult, et näha, mis toimub.

Teksti ei kuvata üldse

Unustasite teksti värvi määrata või määrasite selle valele väärtusele

Enne tekstide joonistamist peate helistama setTextColorile. Vastasel juhul pole teil vigu, kuid te ei näe ekraanil midagi. Samuti olete võib -olla määranud teksti värviks sama, mis taustavärv.

Kasutate väga suurt fonti

Kui määrate teksti suuruseks väga suure väärtuse, võib olla võimalik, et märgid väljuvad nähtavast alast täielikult.

Ekraani suuruse osas on kompileerimisviga

See juhtus ka minu puhul ja ma arvan, et see juhtub enamiku teiega. See on tänu skripti ülaosale lisatud päisefaili Adafruit_SSD1306.h kuvasuuruse püsiväärtustele. See fail asub aadressil {your-project-folder} libraries / Adafruit_SSD1306 / Adafruit_SSD1306.h. Kui avate selle faili, märkate, et allpool on kommentaaride jaotis, milles kirjeldatakse, et peate tühistama ainult konstanti, mis tähistab teie OLED -ekraanimooduli suurust. 128x64 kuvarimoodulite puhul tuleks rida #define SSD1306_128_64 märkimata jätta.

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

SSD1306 kuvarid ------------------------------------------------ ---------------------- Draiverit kasutatakse mitmel kuval (128x64, 128x32 jne). Valige sobiva suurusega kaadripuhveri loomiseks allpool sobiv ekraan jne. SSD1306_128_64 128x64 piksline kuva SSD1306_128_32 128x32 piksline kuva SSD1306_96_16 --------------------------- --------------------------------------------* / #define SSD1306_128_64 / / #define SSD1306_128_32 // #define SSD1306_96_16 /*======================================= ===============================*/

12. samm: mida edasi teha?

OLED -ekraan väljundmoodulina võib anda teile suurepärase võimaluse pakkuda oma hobiprojektidele professionaalse välimusega liidest. Võite proovida järgmisi ideid lähtepunktina, et kuvada nende kohta olulisi andmeid või aidata kasutajal teada saada, mis toimub või kas tal oli vaja midagi teha. Kasutajal oleks palju selgem lugeda ekraanilt sõnumit kui tõlgendada mõne LED -i kaudu projekti/seadme olekut.

Lähtepunktina saate teha järgmist.

  • Lugege temperatuurianduri väärtust ja näidake seda OLED -moodulil. Saate sellele lisada rõhu- või niiskusanduri ja luua täielikult toimiva ilmajaama projekti.
  • Proovige ekraanimoodulile midagi joonistada, kasutades juhtkangi moodulit sisendseadmena.
  • Proovige ekraanile animatsiooni joonistada joonistamise/viivitamise funktsioonikõnede või Arduino katkestuse abil
  • Kuva oma kohandatud logo süsteemi käivitamisel (Adafruit'i logo asemel)

Ärge unustage kommentaarides mulle öelda, mida te teeksite (või olete juba teinud) OLED -ekraanimooduli abil.

Soovitan: