Satura rādītājs:

Jautri ar OLED displeju un Arduino: 12 soļi (ar attēliem)
Jautri ar OLED displeju un Arduino: 12 soļi (ar attēliem)

Video: Jautri ar OLED displeju un Arduino: 12 soļi (ar attēliem)

Video: Jautri ar OLED displeju un Arduino: 12 soļi (ar attēliem)
Video: Review of WUZHI WZ5005 250W 5A Buck Converter panel with WiFi App 2024, Jūlijs
Anonim
Jautri ar OLED displeju un Arduino
Jautri ar OLED displeju un Arduino

Esmu pārliecināts, ka jūs noteikti esat dzirdējuši par OLED displeja tehnoloģiju. Tas ir salīdzinoši jauns un piedāvā labāku kvalitāti nekā vecā LCD tehnoloģija. Šajā apmācībā mēs vēlamies pārskatīt darbības, kas nepieciešamas, lai parādītu datus par vienu no izplatītākajiem tirgū pieejamajiem vienkrāsainajiem OLED displeja moduļiem. Es mēģināšu izskaidrot funkcijas, ko nodrošina atbilstošā Adafruit bibliotēka, lai parādītu datus par šo moduli.

1. darbība. Kādus OLED moduļus mēs izmantosim?

Kādus OLED moduļus mēs izmantosim?
Kādus OLED moduļus mēs izmantosim?
Kādus OLED moduļus mēs izmantosim?
Kādus OLED moduļus mēs izmantosim?
Kādus OLED moduļus mēs izmantosim?
Kādus OLED moduļus mēs izmantosim?

OLED moduļi ir pieejami dažādos izmēros un funkcijās. Šajā apmācībā izmantosim vienkrāsainu 128x64 OLED moduli. Šāda veida moduļi ir pieejami šādos izmēros (lai redzētu attēlos):

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

Tā kā visi šie moduļi atbalsta I2C protokolu kā saziņas līdzekli, to visu kods un vadi ir vienādi. Vienīgā atšķirība ir tāda, ka jums ir jāņem vērā koda displeja izmērs, lai parādītais saturs tajā pareizi ietilptu.

2. solis: I2C īsumā

I2C īsumā
I2C īsumā

Integrētā shēma (IIC), ko parasti sauc par I2C (I kvadrāts C), ko Philips izstrādāja 80. gados kā datu apmaiņas kopni, ko izmanto datu pārsūtīšanai starp ierīces centrālo procesoru (CPU) vai mikrokontrolleru (MCU) un perifērijas mikroshēmas. Tas būtībā bija paredzēts TV lietojumprogrammām. Vienkāršības dēļ tas kļuva tik populārs, ka pēc kāda laika tas kļuva par vienu no galvenajiem datu pārsūtīšanas mehānismiem centrālajiem procesoriem, MCU un perifērijas ierīcēm, kas nav nepieciešamas vienas PCB plates daļa un ir savienotas ar to, izmantojot vadu (piemēram, sensorus, displeja moduļi utt.).

I2C sastāv no divu vadu sakaru kopnes, kas atbalsta divvirzienu datu pārsūtīšanu starp galveno un vairākām palīgiekārtām. Parasti galvenais mezgls ir atbildīgs par kopnes vadību, kas faktiski tiek darīts, ģenerējot sinhronizācijas signālu sērijas pulksteņa līnijā (SCL). Tas ir signāls, ko pārsūtīšanas laikā nepārtraukti sūtīs kapteinis, un visi pārējie ar autobusu savienotie mezgli to izmantos, lai sinhronizētu sakarus un noteiktu kopnes ātrumu. Dati tiek pārsūtīti starp galveno un vergu, izmantojot sērijas datu (SDA) līniju. Pārraides ātrums var būt līdz 3,4 Mb / s. Visām ierīcēm, kas vēlas pārsūtīt datus, izmantojot I2C, jābūt unikālai adresei, un tās var darboties kā raidītājs vai uztvērējs atkarībā no ierīces funkcijas. Piemēram, OLED displeja modulis ir uztvērējs, kas pieņem dažus datus un parāda tos, savukārt temperatūras sensors ir raiduztvērējs, kas nosūta uztverto temperatūru, izmantojot I2C kopni. Parasti galvenā ierīce ir ierīce, kas uzsāk datu pārsūtīšanu kopnē un ģenerē pulksteņa signālus, lai varētu pārsūtīt. Pārsūtīšanas laikā jebkura šī meistara adresētā ierīce tiek uzskatīta par vergu un nolasa šos datus.

Ja mezgls vēlas nosūtīt dažus datus, pirmajam datu baitam jābūt saņēmēja adresei, un pēc tam tiek iegūti faktiskie dati. Tas nozīmē, ka, lai nosūtītu datus uz izvadierīci, izmantojot I2C (piemēram, I2C OLED displeja moduli), mums vispirms jāatrod tā I2C adrese, un tas ir tas, ko mēs vispirms darīsim nākamajās darbībās.

Ja vēlaties uzzināt vairāk par informāciju un teorijām par I2C kopni, varat izmantot šādas atsauces:

www.i2c-bus.org

learn.sparkfun.com/tutorials/i2c

3. darbība. Nepieciešamie moduļi un sastāvdaļas

Nepieciešamie moduļi un sastāvdaļas
Nepieciešamie moduļi un sastāvdaļas
Nepieciešamie moduļi un sastāvdaļas
Nepieciešamie moduļi un sastāvdaļas
Nepieciešamie moduļi un sastāvdaļas
Nepieciešamie moduļi un sastāvdaļas

Šeit varat atrast sastāvdaļu sarakstu, kas jums būs nepieciešams, lai pabeigtu šo apmācību:

eBay saites:

  • 1 x Arduino Uno:
  • 1 x OLED modulis 128x64:
  • 4 x Dupont kabelis:
  • 1 x mini lodēšanas plātne:

Amazon.com saites:

  • 1 x Arduino Uno:
  • 1 x 128x64 OLED modulis:
  • 4 x Dupont kabelis:
  • 1 x Mini bez lodēšanas maizes dēļa:

4. solis: OLED displeja moduļa pievienošana Arduino

Elektroinstalācijas OLED displeja modulis ar Arduino
Elektroinstalācijas OLED displeja modulis ar Arduino
Elektroinstalācijas OLED displeja modulis ar Arduino
Elektroinstalācijas OLED displeja modulis ar Arduino
Elektroinstalācijas OLED displeja modulis ar Arduino
Elektroinstalācijas OLED displeja modulis ar Arduino
Elektroinstalācijas OLED displeja modulis ar Arduino
Elektroinstalācijas OLED displeja modulis ar Arduino

Svarīga piezīme par I2C iespējotajām ierīcēm ir tāda, ka veids, kā tās savienot ar Arduino, ir vienāds. Tas ir tāpēc, ka Arduino savu I2C komunikāciju vada tikai uz noteiktām tapām. Šajā apmācībā es izmantoju Arduino Uno. Arduino Uno izmanto tapu A5 kā SCK un A4 kā SDA. Tātad mēs varam savienot OLED displeja moduli ar Arduino Uno, kā parādīts shematiskajā skatā. Kā jūs varat pamanīt attēlā, ko esmu paņēmis no sava OLED displeja moduļa, VCC un GND savienotājs atšķiras no shematiskā skata. Neaizmirstiet pārbaudīt moduļu tapu etiķetes, lai pārliecinātos, ka savienojat to pareizi.

Mums ir vajadzīgas tikai 4 tapas, kuras jāsavieno šādi:

Arduino VCC -> OLED modulis VCC

Arduino GND -> OLED modulis GND

Arduino 4 -> OLED modulis SDA

Arduino 5 -> OLED modulis SCK

5. darbība. Displeja moduļa adreses atrašana

Displeja moduļa adreses atrašana
Displeja moduļa adreses atrašana

Lai izveidotu savienojumu ar I2C iespējotu ierīci, vispirms ir jābūt moduļa adresei. Lai to izdarītu, pēc moduļa pievienošanas Arduino, jums vienkārši jāaugšupielādē pievienotais kods savā Arduino. Šis kods ietver Wire bibliotēku, kas ir bibliotēka, kas iekļauta Arduino IDE, kas apstrādā I2C sakarus. Tas mēģina skenēt pievienotās I2C ierīces un nosūta to adresi, izmantojot seriālo portu, uz jūsu datoru. Tātad jūs varat piekļūt tās izvadam, izmantojot Arduino IDE sērijas monitora rīku. Oriģinālā versija ir pieejama Arduino Playground). Arī jūs varat to skatīt lasāmākā veidā manā tiešsaistes Arduino redaktorā. Negaidiet, ka šī koda darbības laikā ekrānā tiks parādīts nekas.

Kā redzat attēlā, mans modulis ir saistīts ar adresi 0x3C. Parasti visām ierīcēm noteiktā produktu līnijā (piemēram, visiem 128x64 OLED moduļiem) ir viena adrese.

I2C ierīču adresātu skaits ir ierobežots no 1 līdz 126. Šis kods vienkārši mēģina izveidot savienojumu ar katru ierīci kārtībā (nepārsūtot nekādus datus) un pēc tam pārbaudiet, vai, izveidojot savienojumu ar norādīto adresi, nav radusies kļūda, par ko ziņo bibliotēka. Ja nav kļūdas, adrese tiek izdrukāta kā pieejams modulis savienojumam. Jāatzīmē arī, ka pirmās 15 adreses ir rezervētas, tāpēc tās pārlec un vienkārši izdrukā tās, kas atrodas virs šī diapazona. Atcerieties, ka šo I2C moduļu adrese ierīcē ir kodēta un to nevar mainīt. Tāpēc būtu ieteicams to kaut kur pierakstīt vai uzlikt uz moduļa etiķeti, kad to atkal noliksit laboratorijas plauktā, lai nākamajā reizē skenera koda palaišana nebūtu nepieciešama. Tomēr tā nav sarežģīta procedūra;)

6. darbība. Nepieciešamo bibliotēku instalēšana, lai parādītu datus OLED modulī

Nepieciešama bibliotēku instalēšana, lai parādītu datus OLED modulī
Nepieciešama bibliotēku instalēšana, lai parādītu datus OLED modulī
Nepieciešama bibliotēku instalēšana, lai parādītu datus OLED modulī
Nepieciešama bibliotēku instalēšana, lai parādītu datus OLED modulī

Wire bibliotēka var apstrādāt zema līmeņa sakarus ar I2C ierīcēm. Ja vēlaties izveidot savienojumu ar noteiktu ierīci, lai no tās nolasītu/rakstītu datus, parasti izmantojiet bibliotēku, ko nodrošina uzņēmums, kurš sākotnēji izveidoja šo moduli. Šī bibliotēka apstrādā visu informāciju par I2C saziņu, izmantojot konkrēto moduli, un ļauj mums vairāk koncentrēties uz savu biznesu, kas šajā gadījumā parāda datus tā, kā mēs vēlamies.

Uzņēmums Adafruit, kas ražo šādu displeja moduļu oriģinālo versiju, nodrošina bibliotēkas ar nosaukumu Adafruit SSD1306, lai parādītu datus šajos vienkrāsainajos displejos. Tātad, pirms sākat kodēšanu, mums ir jāinstalē šī bibliotēka, izmantojot Arduino IDE, izmantojot bibliotēkas pārvaldnieku (pieejams, izmantojot skici> Iekļaut bibliotēku> Pārvaldīt bibliotēkas …). Ir arī cita bibliotēka ar nosaukumu Adafruit GFX Library, kas apstrādā vairāk zema līmeņa grafikas, un to iekšēji izmanto Adafruit SSD1306. Jums abiem jābūt instalētiem jūsu Arduino IDE, kā redzams attēlos.

7. darbība: displeja moduļa inicializēšana

Displeja moduļa inicializēšana
Displeja moduļa inicializēšana

Zīmējums uz displeja moduļa ir ietīts klasē ar nosaukumu Adafruit_SSD1306. Šīs klases definīcija ir Adafruit bibliotēkā, tāpēc mums vispirms ir jāiekļauj šī bibliotēka. Tad mums vispirms ir jāparedz šīs klases gadījums. Šīs klases konstruktors ņem porta numuru, ar kuru displeju var atiestatīt, kas ir 4. tapa (savienots ar SCK). Šai koda daļai jāatrodas faila sākumā (ārpus iestatīšanas () un cilpas () funkcijām).

#iekļaut

Adafruit_SSD1306 displejs (4);

Tagad funkcijā setup () mums vajadzētu izsaukt displeja objekta sākuma funkciju, nododot mūsu I2C adresi, kā norādīts zemāk (SSD1306_SWITCHCAPVCC ir nemainīga vērtība, kas norāda bibliotēkas barošanas avota veidu):

void setup () {

display.begin (SSD1306_SWITCHCAPVCC, 0x3C); display.display (); } void loop () {} // cilpa pagaidām var būt tukša

Tagad displeja objekts ir gatavs, un mēs varam izsaukt tā funkcijas (piemēram, display.write (), display.drawLine utt.). Svarīga piezīme ir tāda, ka ikreiz, kad mēs kaut ko izmantojam, zvanot uz mūsu displeja objektu, mums ir jāizsauc funkcija display.display (), lai zīmējums notiktu aparatūras līmenī. Tas galvenokārt ir saistīts ar faktu, ka zīmēšanas funkcijas, kuras mēs saucam, veiktspējas apsvērumu dēļ vienkārši atjaunina displeja attēlojumu atmiņā. Tas faktiski saglabā atmiņā izmaiņas. Tāpēc mums vienmēr jāatceras izsaukt funkciju display (), kad esam pabeiguši kaut ko zīmēt uz ekrāna.

display.write (…); // turpina atjaunoties atmiņā

display.drawLine (…); // turpina atjaunoties atmiņā. display.display (); // izskalo visas displeja aparatūras izmaiņas

Ja šajā solī mēģināsit augšupielādēt kodu, pamanīsit, ka tiks parādīts Adafruit Industries logotips. Jūs varētu brīnīties, kurš ir lūdzis to uzzīmēt! Patiesībā to dara Adafruit bibliotēka. Tas inicializē moduļa atmiņu (displeja aparatūras atmiņas attēlojumu) ar šī uzņēmuma logotipu. Ja nevēlaties to redzēt inicializācijas laikā, varat mēģināt izsaukt funkciju display.clearDisplay () tieši pirms iestatīšanas funkcijas izsaukšanas uz displeju. Displejs (). Šī funkcija, kā norāda tās nosaukums, pilnībā notīra displeju.

#iekļaut

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

Pamatojoties uz Adafruit_SSD1306 bibliotēkas dokumentāciju, varat izmantot dažādas šīs klases sniegtās funkcijas, lai zīmētu uz displeja vai tieši manipulētu ar tajā esošajiem pikseļiem. Nākamajās sadaļās mēs centīsimies sniegt piemēru katram no tiem, lai jums būtu priekšstats par tā darbību. Lielākajā daļā šo piemēru tiks parādīts vienkāršs statisks saturs, tāpēc mēs varam tos vienkārši ievietot mūsu iestatīšanas () funkcijā (pēc inicializācijas koda). To darot, tas tiks palaists tikai vienu reizi un paliek tur.

8. darbība: parādiet vienkāršu tekstu

Parādiet vienkāršu tekstu
Parādiet vienkāršu tekstu
Parādiet vienkāršu tekstu
Parādiet vienkāršu tekstu
Parādiet vienkāršu tekstu
Parādiet vienkāršu tekstu

Lai parādītu tekstu, mēs varam izmantot vienkāršo bibliotēkas funkciju display.println (). Tas pieņem tekstu kā virkni un mēģina to parādīt. Ir svarīgi zināt, ka mums ir jāpasaka bibliotēkai, kur displejā parādīsim tekstu. Katram displeja pikselim ir koordināta, kas norādīta ar X un Y. X palielinās no kreisās uz labo un Y no augšas uz leju. Ekrāna augšējais kreisais stūris ir (X = 0, Y = 0), bet apakšējais labais stūris (X = 127, Y = 63). Pirmajā attēlā atzīmēju stūru koordinātas. Mēs varam izmantot funkciju display.setCursor (), lai norādītu, kur displejā parādīsim tekstu.

Vēl viena teksta īpašība ir tā krāsa. Mēs varam norādīt krāsu, izmantojot display.setTextColor (), kā parādīts nākamajā paraugā.

display.clearDisplay ();

display.setTextColor (BALTS); display.setCursor (35, 30); display.println ("Sveika pasaule!"); display.display ();

Mēs varam izmantot arī funkciju display.write (), lai parādītu vienu rakstzīmi. Tas pieņem rakstzīmju kodu kā uint8_t veidu un virknei parāda šim kodam atbilstošo rakstzīmi. Piemēram, ja mēs vēlamies parādīt to pašu virkni, izmantojot šo funkciju, mēs varam izmantot šādu fragmentu:

display.clearDisplay ();

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

Ir arī iespējams uzzīmēt tekstus melnā krāsā ar baltu fonu. Lai to izdarītu, jums ir jāizsauc funkcija display.setTextColor, kā norādīts zemāk:

display.clearDisplay ();

// Iestata krāsu uz melnu ar displeju uz balta fona.setTextColor (BLACK, WHITE); display.setCursor (25, 30); display.println ("Apgriezts teksts!"); display.display ();

Jums ir arī iespēja iestatīt teksta lielumu, izmantojot funkciju display.setTextSize (). Tas pieņem veselu skaitli kā lielumu. Jo lielāks skaitlis, jo lielāks būs teksts. Mazākais izmērs ir 1, kas ir teksta noklusējuma lielums. Šis kods mēģina rakstīt burtu "A" 6 dažādos izmēros:

display.clearDisplay ();

display.setTextColor (BALTS); 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. solis: Pamata formu zīmēšana

Pamata formu zīmēšana
Pamata formu zīmēšana
Pamata formu zīmēšana
Pamata formu zīmēšana
Pamata formu zīmēšana
Pamata formu zīmēšana

Pamatformu, piemēram, taisnstūra, apļa, trīsstūra, līnijas vai punkta, zīmēšana ir ļoti vienkārša, un katrai no tām ir īpaša funkcija.

Zīmēšanas līnija

Lai novilktu līniju, varat piezvanīt uz display.drawLine (startX, startY, endX, endY, color). Piemēram, šāds kods ekrānā ievelk diagonālas līnijas tā, lai tās veidotu lielu 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 ();

Displeja platumam un augstumam var piekļūt, izmantojot funkcijas display.width () un display.height (). To darot, jūsu kods būtu neatkarīgs no ekrāna lieluma.

Zīmēšanas taisnstūris

Taisnstūra zīmēšanas funkcija ir display.drawRect (augšējaisLeftX, augšējaisLeftY, platums, augstums, krāsa). Šeit ir kods, kas dažās nejaušās vietās uzzīmē trīs taisnstūrus:

display.clearDisplay ();

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

Zvanot uz display.fillRect (augšējaisLeftX, augšējaisLeftY, platums, augstums, BALTS), jūs varat uzzīmēt taisnstūri, kas aizpildīts ar norādīto krāsu. Arī trešā funkcija šajā piemērā ir display.drawRoundRect (augšējaisLeftX, augšējaisLeftY, platums, augstums, stūrisRadiuss, krāsa), ko, kā redzat attēlā, izmanto, lai uzzīmētu taisnstūri ar apaļiem stūriem. Pirms krāsas tiek pieņemts papildu parametrs, kas ir vesels skaitlis, kas norāda stūra rādiusu. Jo lielāka vērtība, jo apaļāks stūris. Tam ir arī atbilstoša aizpildīšanas funkcija ar nosaukumu display.drawFillRoundRect, kas, manuprāt, var uzminēt, ko tā dara.

Zīmēšanas aplis

Funkcija ir display.drawCircle (centrsX, centrsY, rādiuss, krāsa). Šeit ir piemērs, kas veido smaidiņiem līdzīgu formu:

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

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

Tāpat kā taisnstūri, varat izmantot funkciju display.fillCircle, lai uzzīmētu apli, kas piepildīts ar doto krāsu.

Zīmēšanas trīsstūris

Ahh, atkal funkcija ar nosaukumu display.drawTriangle (poin1X, point1Y, point2X, point2Y, point3X, point3Y, color) un atbilstošais display.fillTriangle, kas uzzīmē aizpildītu trīsstūri.

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

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

Zīmējiet punktu

Varat arī izkrāsot noteiktu punktu (ko sauc par pikseļiem) ekrānā, izmantojot displeju. Funkcija Draw. Pixel (pixelX, pixelY, color).

display.drawPixel (20, 35, BALTS);

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

10. solis: attēla zīmēšana

Zīmēšanas attēls
Zīmēšanas attēls
Zīmēšanas attēls
Zīmēšanas attēls

Attēla zīmēšana ir atšķirīga un nedaudz sarežģīta. Tā kā displeja modulis ir vienkrāsains, mums vispirms ir jāpārvērš mūsu attēls formātā, ko sauc par vienkrāsainu bitkarti (sauktu arī par melnbaltu). Šādā formātā katrs attēla pikselis tiek attēlots ar 0 vai 1. 1s apzīmē krāsas esamību un 0s nozīmē tukšu vietu. Šīs sadaļas augšpusē varat redzēt Arduino logotipa piemēru šajā formātā. Funkcija bitkartes attēla zīmēšanai ir display.drawBitmap (topLeftX, topLeftY, imageData, platums, augstums, krāsa). ImageData parametrs ir skaitļu masīvs baitos. Katram baitam ir 8 biti, tāpēc katrs baits satur 8 attēla pikseļu datus. Norādot attēla platumu un augstumu, drawBitmap funkcija zinās, no kura bita sākas nākamā pikseļu rinda.

Risinājums, kuru izvēlējos pārvērst savā attēlā šajā formātā, bija vispirms izmantot kādu no tiešsaistes “attēlu uz ASCII pārveidotājiem” (piemēram, https://my.asciiart.club), lai manu attēlu pārveidotu par ASCII rakstzīmju kopu un pēc tam aizstātu rakstzīmes, ko tukšā vietā izmanto par 0, bet citas - par 1. To redzat zemāk. Par katru 0 un 1 varat uzskatīt displeja pikseļus. Tātad attēla izmēram nevajadzētu pārsniegt mūsu displeja izmēru, kas ir 128x64.

Piezīme. Šīs ASCII metodes izmantošana nav ieteicama pieeja, jo rakstzīmju malu attiecības dēļ jūsu attēls tiks deformēts (rakstzīmes nav kvadrāts). Es izmēģināju šo paņēmienu tikai tāpēc, ka tas atvieglo attēla konvertēšanu vajadzīgajā formātā. Pretējā gadījumā vislabāko rezultātu būtu iespējams sasniegt, izmantojot kādu programmu vai izmantojot dažas utilītas, kas pilnībā neietilpst šī teksta darbības jomā.

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

Tagad mums vajadzētu sadalīt katru rindu ar 8, pārstāvot baitu, un saglabāt tos masīvā, kā norādīts zemāk:

static const unsigned char PROGMEM arduino_logo = {

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

Tad mēs varam to uzzīmēt displejā, izsaucot funkciju drawBitmap.

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

11. darbība. Problēmu novēršana

Šī bija ilga apmācība, tāpēc ir ļoti iespējams, ka kaut kas noiet greizi. Šeit ir saraksts ar dažām bieži sastopamām kļūdām, kas var rasties, iestatot OLED displeja moduli jūsu projektam (dažas no tām notika man, gatavojot šo apmācību).

Nekas netiek rādīts vispār

Tas var notikt daudzu iemeslu dēļ, tāpēc es iesaku pārbaudīt šo sarakstu, kas ir kārtībā jūsu projektā:

I2C adrese, iespējams, ir nepareiza

Pārliecinieties, vai esat iestatījis adresi, kuru saņēmāt i2c-skenera kodā displejā.begin (), iestatot displeja objektu.

SCL un SDA ir savienoti nepareizi

Tas patiesībā notika ar mani. Ja izmantojat Arduino Uno, jums vēlreiz jāpārbauda savienojumi, lai pārliecinātos, ka tie ir savienoti tāpat kā mans. Ja izmantojat citu Arduino izdevumu (piemēram, Mega, Leonardo uc), jums jāzina, ka viņu I2C, iespējams, ir iestatīts uz citām tapām. To var pārbaudīt Wire bibliotēkas dokumentācijā.

Jūs kaut ko zīmējat no redzamās zonas

Šī ir programmatūras problēma. Tas ir ļoti bieži, ja izmanto zīmēšanas funkcijas, lai nepareizi aprēķinātu dažas koordinātas, un tāpēc jūsu zīmējums tiktu deformēts vai sliktākajā gadījumā tas varētu būt pilnīgi ārpus skatuves. Pārskatiet savus aprēķinus un mēģiniet zīmēt soli pa solim, lai redzētu, kas notiek.

Teksts netiek parādīts vispār

Jūs aizmirsāt iestatīt teksta krāsu vai esat iestatījis nepareizu vērtību

Pirms tekstu zīmēšanas jums ir jāizsauc setTextColor. Pretējā gadījumā jums nav kļūdu, taču displejā neko neredzēsit. Iespējams, esat iestatījis teksta krāsu tāpat kā fona krāsu.

Jūs izmantojat ļoti lielu fontu

Ja teksta lielumam iestatāt ļoti lielu vērtību, iespējams, rakstzīmes pilnībā izkļūs no redzamās zonas.

Par displeja lielumu ir apkopošanas kļūda

Tas notika arī ar mani, un es domāju, ka tas notiks ar lielāko daļu no jums. Tas ir tāpēc, ka displeja lieluma nemainīgās vērtības, kas ir definētas galvenes failā Adafruit_SSD1306.h, tiek iekļautas mūsu skripta augšpusē. Šis fails atrodas vietnē {your-project-folder} libraries / Adafruit_SSD1306 / Adafruit_SSD1306.h. Atverot šo failu, jūs pamanīsit, ka zemāk ir komentāru sadaļa, kurā aprakstīts, ka jums ir jāatceļ tikai konstante, kas attēlo jūsu OLED displeja moduļa izmēru. 128x64 displeja moduļiem rindai #define SSD1306_128_64 jābūt nekomentētai.

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

SSD1306 displeji ------------------------------------------------ ---------------------- Draiveris tiek izmantots vairākos displejos (128x64, 128x32 utt.). Tālāk atlasiet atbilstošo displeju, lai izveidotu atbilstoša izmēra kadru buferi utt. SSD1306_128_64 128x64 pikseļu displejs SSD1306_128_32 128x32 pikseļu displejs SSD1306_96_16 --------------------------- --------------------------------------------* / #define SSD1306_128_64 / / #define SSD1306_128_32 // #define SSD1306_96_16 /*======================================== ===============================*/

12. solis: ko darīt tālāk?

OLED displejs kā izvades modulis var dot jums lielisku iespēju nodrošināt profesionāla izskata saskarni jūsu hobiju projektiem. Jūs varat izmēģināt šādas idejas kā sākumpunktu, lai parādītu tajā nozīmīgus datus vai palīdzētu lietotājam uzzināt, kas notiek vai vai viņam/viņai bija kaut kas jādara. Lietotājam būtu daudz skaidrāk lasīt ziņojumu displejā, nevis interpretēt projekta/ierīces stāvokli, izmantojot dažas gaismas diodes.

Kā sākuma punktu varat rīkoties šādi:

  • Izlasiet temperatūras sensora vērtību un parādiet to OLED modulī. Jūs varat tam pievienot spiediena vai mitruma sensoru un izveidot pilnībā funkcionējošu laika stacijas projektu.
  • Mēģiniet uzzīmēt kaut ko uz displeja moduļa, izmantojot kursorsviras moduli kā ievades ierīci.
  • Mēģiniet uzzīmēt displejā animāciju, izmantojot zīmēšanas/aizkavēšanas funkciju izsaukumu secību vai Arduino pārtraukumu
  • Sistēmas startēšanas laikā parādiet savu pielāgoto logotipu (nevis Adafruit logotipu)

Neaizmirstiet man komentāros pastāstīt, ko jūs darītu (vai esat jau izdarījis), izmantojot OLED displeja moduli.

Ieteicams: