Orodha ya maudhui:

Furahiya na OLED Onyesho na Arduino: Hatua 12 (na Picha)
Furahiya na OLED Onyesho na Arduino: Hatua 12 (na Picha)

Video: Furahiya na OLED Onyesho na Arduino: Hatua 12 (na Picha)

Video: Furahiya na OLED Onyesho na Arduino: Hatua 12 (na Picha)
Video: Lesson 20: Introduction to TM1637 LED Display | Arduino Step By Step Course 2024, Novemba
Anonim
Furahisha na OLED Onyesho na Arduino
Furahisha na OLED Onyesho na Arduino

Nina hakika kuwa umesikia juu ya teknolojia ya kuonyesha OLED. Ni mpya na inatoa ubora bora kuliko teknolojia ya zamani ya LCD. Katika mafunzo haya tunataka kukagua hatua zinazohitajika kuonyesha data kwenye mojawapo ya moduli za kawaida za kuonyesha OLED zinazopatikana kwenye soko. Nitajaribu kuelezea kazi zinazotolewa na maktaba inayofanana ya Adafruit kuonyesha data kwenye moduli hii.

Hatua ya 1: Je! Tutaweza Kutumia Moduli zipi za OLED?

Je! Tunatumia moduli gani za OLED?
Je! Tunatumia moduli gani za OLED?
Je! Tunatumia moduli gani za OLED?
Je! Tunatumia moduli gani za OLED?
Je! Tunatumia moduli gani za OLED?
Je! Tunatumia moduli gani za OLED?

Moduli za OLED zinapatikana kwa ukubwa na huduma anuwai. Tutatumia kwenye mafunzo haya ni moduli ya rangi ya monox 128x64 OLED. Aina hii ya moduli inapatikana kwa ukubwa unaofuata (Ili uone kwenye picha):

  • 128x64
  • 128x32
  • 96x16
  • 64x48
  • 64x32

Kwa kuwa moduli hizi zote zinaunga mkono itifaki ya I2C kama maana ya mawasiliano, nambari na wiring ya hizo zote ni sawa kabisa. Tofauti pekee ni kwamba unapaswa kuzingatia saizi ya onyesho kwenye nambari yako ili yaliyomo ambayo utaonyesha, yatoshe vizuri juu yake.

Hatua ya 2: I2C kwa kifupi

I2C kwa kifupi
I2C kwa kifupi

Mzunguko uliounganishwa (IIC) ambao kawaida huitwa I2C (mimi mraba C) uliotengenezwa na Philips mnamo miaka ya 80 kama basi ya kubadilishana data inayotumika kuhamisha data kati ya kitengo cha usindikaji cha kati (CPU) au kitengo cha microcontroller (MCU) cha kifaa na chips za pembeni. Ililengwa kimsingi kwa matumizi ya Runinga. Kwa sababu ya unyenyekevu wake, ikawa maarufu sana hivi kwamba baada ya muda kidogo ikawa moja wapo ya njia kuu za uhamishaji wa data kwa CPU na MCU na vifaa vya pembeni ambavyo sio sehemu muhimu ya bodi hiyo ya PCB na zimeunganishwa nayo kupitia waya (kwa mfano sensorer, moduli za kuonyesha, nk).

I2C ina basi ya mawasiliano iliyotengenezwa na waya mbili ambayo inasaidia uhamishaji wa data ya pande mbili kati ya bwana na vifaa kadhaa vya watumwa. Kawaida node kuu inasimamia kudhibiti basi - ambayo hufanywa kwa kutengeneza ishara ya maingiliano kwenye laini ya saa (SCL). Ni ishara ambayo ingetumwa kila wakati na bwana wakati wa uhamishaji na nodi zingine zote zilizounganishwa na basi zitatumia kusawazisha mawasiliano yao na kugundua kasi ya basi. Takwimu zinahamishwa kati ya bwana na mtumwa kupitia laini ya data ya serial (SDA). Kasi ya usafirishaji inaweza kuwa hadi 3.4 Mbps. Vifaa vyote ambavyo vinataka kuhamisha data kupitia I2C vinapaswa kuwa na anwani ya kipekee na inaweza kufanya kazi kama transmita au mpokeaji kulingana na utendaji wa kifaa. Kwa mfano moduli ya onyesho la OLED ni mpokeaji anayepokea data zingine na kuzionyesha, wakati sensa ya joto ni transceiver inayotuma joto lililokamatwa kupitia basi ya I2C. Kawaida kifaa kikuu ni kifaa ambacho huanzisha uhamishaji wa data kwenye basi na hutoa ishara za saa kuruhusu uhamishaji. Wakati wa uhamisho huo, kifaa chochote kinachoshughulikiwa na bwana huyu kinachukuliwa kama mtumwa na inasoma data hiyo.

Wakati node inataka kutuma data, kaiti ya kwanza ya data inapaswa kuwa anwani ya mpokeaji na kisha data halisi inakuja baadaye. Hii inamaanisha kuwa ili kupeleka data kwenye kifaa cha pato kwa kutumia I2C (kwa mfano moduli ya kuonyesha ya O2C OLED) tunapaswa kwanza kupata anwani yake ya I2C na hii ndio tutafanya kwanza kwa hatua zifuatazo.

Ikiwa una nia ya kujua zaidi juu ya maelezo na nadharia kuhusu basi ya I2C, unaweza kutumia marejeleo yafuatayo:

www.i2c-bus.org

learn.sparkfun.com/tutorials/i2c

Hatua ya 3: Moduli zinazohitajika na Vipengele

Moduli zinazohitajika na Vipengele
Moduli zinazohitajika na Vipengele
Moduli zinazohitajika na Vipengele
Moduli zinazohitajika na Vipengele
Moduli zinazohitajika na Vipengele
Moduli zinazohitajika na Vipengele

Hapa unaweza kupata orodha ya vifaa ambavyo utahitaji kukamilisha mafunzo haya:

Viungo vya eBay:

  • 1 x Arduino Uno:
  • Moduli 1 x OLED 128x64:
  • 4 x Dupont cable:
  • 1 x Mini mkate bila mkate:

Viungo vya Amazon.com:

  • 1 x Arduino Uno:
  • Moduli 1 x OLED 128x64:
  • 4 x Dupont cable:
  • 1 x Mini mkate bila mkate:

Hatua ya 4: Wiring OLED Module ya Kuonyesha kwa Arduino

Wiring OLED Module ya Kuonyesha kwa Arduino
Wiring OLED Module ya Kuonyesha kwa Arduino
Wiring OLED Module ya Kuonyesha kwa Arduino
Wiring OLED Module ya Kuonyesha kwa Arduino
Wiring OLED Module ya Kuonyesha kwa Arduino
Wiring OLED Module ya Kuonyesha kwa Arduino
Wiring OLED Module ya Kuonyesha kwa Arduino
Wiring OLED Module ya Kuonyesha kwa Arduino

Ujumbe muhimu kuhusu vifaa vilivyowezeshwa na I2C ni kwamba njia ambayo unapaswa kuwaunganisha na Arduino ni sawa. Hii ni kwa sababu Arduino anaendesha mawasiliano yake ya I2C tu kwenye pini maalum. Katika mafunzo haya ninatumia Arduino Uno. Arduino Uno hutumia pini A5 kama SCK na A4 kama SDA. Kwa hivyo tunaweza kuunganisha moduli ya onyesho la OLED kwa Arduino Uno kama inavyoonekana katika mwonekano wa skimu. Kama unavyoweza kugundua kwenye picha niliyochukua kutoka kwa moduli yangu ya onyesho la OLED, kontakt ya VCC na GND ni tofauti na mtazamo wa kimazingira. Kumbuka kuangalia lebo za pini kwenye moduli zako ili kuhakikisha kuwa unaiunganisha kwa njia sahihi.

Tunahitaji pini 4 tu ambazo zinapaswa kuunganishwa kama hapa chini:

Arduino VCC -> Moduli ya OLED VCC

Arduino GND -> Moduli ya OLED GND

Arduino 4 -> Moduli ya OLED SDA

Arduino 5 -> OLED Module SCK

Hatua ya 5: Kupata Anwani ya Moduli ya Kuonyesha

Kupata anwani ya Moduli ya Kuonyesha
Kupata anwani ya Moduli ya Kuonyesha

Kama hatua ya kwanza ya kuunganisha kwenye kifaa kilichowezeshwa na I2C, unahitaji kuwa na anwani ya moduli. Ili kufanya hivyo, baada ya kuunganisha moduli kwa Arduino yako, unapaswa kupakia nambari iliyoambatishwa, kwenye Arduino yako. Nambari hii inajumuisha maktaba ya waya ambayo ni maktaba iliyojumuishwa na Arduino IDE inayoshughulikia mawasiliano ya I2C. Inajaribu kupeana vifaa vya I2C vilivyounganishwa na kutuma anwani zao kupitia bandari ya serial kwa kompyuta yako. Kwa hivyo unaweza kupata pato lake kupitia zana ya Serial Monitor katika Arduino IDE. Toleo la asili linapatikana katika Uwanja wa michezo wa Arduino). Pia unaweza kuiangalia kwa njia inayosomeka zaidi katika Mhariri wangu wa Arduino mkondoni. Usitarajie chochote kuonyeshwa kwenye skrini wakati nambari hii inafanya kazi.

Kama unavyoona kwenye picha, moduli yangu imefungwa kushughulikia 0x3C. Kawaida vifaa vyote kwenye laini maalum ya bidhaa (kwa mfano moduli zote za OLED 128x64) zina anwani sawa.

Nyongeza ya vifaa vya I2C ni mdogo kutoka 1 hadi 126. Nambari hii inajaribu tu kuungana na kila kifaa ili (bila kusambaza data yoyote) na kisha uangalie ikiwa kulikuwa na hitilafu yoyote iliyoripotiwa na maktaba ya msingi ya kuunganisha kwenye anwani iliyotolewa. Ikiwa hakuna kosa, basi chapa anwani kama moduli inayopatikana ya kuunganisha. Pia ikumbukwe kwamba anwani 15 za kwanza zimehifadhiwa, kwa hivyo inaziruka na kuchapisha tu zilizo juu ya anuwai hii. Kumbuka kuwa anwani ya moduli hizi za I2C zimewekwa ngumu kwenye kifaa na haiwezi kubadilishwa. Kwa hivyo itakuwa wazo nzuri kuiandika mahali fulani au kuweka lebo kwenye moduli wakati utaiweka tena kwenye rafu yako ya maabara ili wakati ujao, kutumia nambari ya skana haitakuwa ya lazima. Walakini sio utaratibu ngumu;)

Hatua ya 6: Kufunga Maktaba Inahitajika Kuonyesha Takwimu kwenye Moduli ya OLED

Kufunga Maktaba Inahitajika Kuonyesha Takwimu kwenye Moduli ya OLED
Kufunga Maktaba Inahitajika Kuonyesha Takwimu kwenye Moduli ya OLED
Kufunga Maktaba Inahitajika Kuonyesha Takwimu kwenye Moduli ya OLED
Kufunga Maktaba Inahitajika Kuonyesha Takwimu kwenye Moduli ya OLED

Maktaba ya waya inaweza kushughulikia mawasiliano ya kiwango cha chini na vifaa vya I2C. Wakati unataka kuungana na kifaa maalum ili kusoma / kuandika data kutoka / kwenda kwake, kawaida utatumia maktaba iliyotolewa na kampuni ambayo hapo awali imeunda moduli hiyo. Maktaba hii inashughulikia maelezo yote ya mawasiliano ya I2C na moduli iliyopewa na wacha tujikite zaidi kwenye biashara yetu ambayo katika kesi hii inaonyesha data kwa njia tunayotaka.

Adafruit, kampuni inayotengeneza toleo la asili la moduli kama hizo za onyesho, hutoa maktaba inayoitwa Adafruit SSD1306 kuonyesha data kwenye maonyesho haya ya monochrome. Kwa hivyo kabla ya kuanza kuweka alama, tumesakinisha maktaba hii kupitia Meneja wa Maktaba (inayopatikana kupitia Mchoro> Jumuisha Maktaba> Dhibiti Maktaba… menyu) katika Arduino IDE. Kuna pia maktaba nyingine inayoitwa Adafruit GFX Library ambayo inashughulikia vitu vya kiwango cha chini zaidi na hutumiwa ndani na Adafruit SSD1306. Unahitaji kuziweka zote mbili kwenye IDE yako ya Arduino kama unaweza kuona kwenye picha.

Hatua ya 7: Kuanzisha Moduli ya Kuonyesha

Inazindua Moduli ya Kuonyesha
Inazindua Moduli ya Kuonyesha

Kuchora kwenye moduli ya onyesho imefungwa kwa darasa linaloitwa Adafruit_SSD1306. Ufafanuzi wa darasa hili uko kwenye maktaba ya Adafruit, kwa hivyo tunahitaji kwanza kujumuisha maktaba hiyo. Halafu inabidi tuhakikishe mfano wa darasa hili kwanza. Mjenzi wa darasa hili huchukua nambari ya bandari ambayo onyesho linaweza kuweka upya ambayo ni pini 4 (iliyounganishwa na SCK). Sehemu hii ya nambari inapaswa kuwa mwanzoni mwa faili (nje ya usanidi () na kazi za kitanzi ()).

# pamoja

Onyesho la Adafruit_SSD1306 (4);

Sasa ndani ya kazi ya kuanzisha () tunapaswa kuita kazi ya kuanza ya kitu cha kuonyesha kwa kupitisha anwani yetu ya I2C kama ilivyo hapo chini (SSD1306_SWITCHCAPVCC ni thamani ya kila wakati inayoelezea aina ya chanzo cha nguvu kwa maktaba):

usanidi batili () {

onyesha. kuanza (SSD1306_SWITCHCAPVCC, 0x3C); onyesha.display (); } kitanzi batili () {} // kitanzi kinaweza kuwa tupu kwa sasa

Sasa kitu cha kuonyesha kiko tayari na tunaweza kuita kazi zake (k.m onyesho.andika (), onyesha.drawLine, n.k.). Ujumbe muhimu ni kwamba wakati wowote tunapochora kitu kwa kupiga simu kwenye kitu chetu cha kuonyesha, tunahitaji kupiga kazi ya kuonyesha.display () kufanya uchoraji halisi ufanyike kwenye kiwango cha vifaa. Hii ni kwa sababu ya ukweli kwamba kazi za kuchora ambazo tunaziita, sasisha tu uwakilishi wa "kwa kumbukumbu" ya onyesho kwa sababu za utendaji. Kwa kweli huhifadhi mabadiliko kwenye kumbukumbu. Kwa hivyo tunapaswa kukumbuka kila wakati kupiga simu ya onyesho () wakati tulimaliza kuchora kitu kwenye skrini.

onyesha. andika (…); // inaendelea kusasisha kwenye kumbukumbu

onyesha.drawLine (…); // inaendelea kusasisha kwenye kumbukumbu. onyesha.display (); // hupunguza mabadiliko yote kwenye vifaa vya kuonyesha

Ukijaribu kupakia nambari yako kwa hatua hii, utagundua kuwa nembo ya Viwanda vya Adafruit itaonyeshwa. Unaweza kujiuliza ni nani ameiuliza itoe hiyo! Kweli hivi ndivyo maktaba ya Adafruit inavyofanya. Inaleta kumbukumbu ya moduli (uwakilishi wa kumbukumbu ya vifaa vya kuonyesha) na nembo ya kampuni hii. Ikiwa hautaki kuona hiyo wakati wa uanzishaji, unaweza kujaribu kupiga display.clearDisplay () kazi kabla ya kupiga display.display () katika kazi yako ya usanidi. Kazi hii, kama jina lake linavyosema, inafuta maonyesho kabisa.

# pamoja

Onyesho la Adafruit_SSD1306 (4); kuanzisha batili () {display.begin (SSD1306_SWITCHCAPVCC, 0x3C); onyesha wazi Cleplay (); onyesha.display (); } kitanzi batili () {}

Kulingana na nyaraka za maktaba ya Adafruit_SSD1306, unaweza kutumia kazi tofauti zilizotolewa na darasa hili kuteka kwenye onyesho au kuendesha moja kwa moja saizi zilizo juu yake. Katika sehemu zinazofuata tutajaribu kuwasilisha mfano kwa kila mmoja wao ili uweze kuwa na wazo juu ya jinsi inavyofanya kazi. Mengi ya mifano hii itaonyesha yaliyomo rahisi tu, kwa hivyo tunaweza kuiweka tu ndani ya usanidi wetu () kazi (baada ya nambari ya uanzishaji). Kwa kufanya hivyo ingeendeshwa mara moja tu na kubaki pale pale.

Hatua ya 8: Onyesha Nakala Rahisi

Onyesha Nakala Rahisi
Onyesha Nakala Rahisi
Onyesha Nakala Rahisi
Onyesha Nakala Rahisi
Onyesha Nakala Rahisi
Onyesha Nakala Rahisi

Ili kuonyesha maandishi, tunaweza kutumia kazi rahisi ya kuonyesha.println () ya maktaba. Inakubali maandishi kama kamba na inajaribu kuionyesha. Ni muhimu kujua kwamba lazima tuambie maktaba ambapo kwenye onyesho tutatoa maandishi. Kila pikseli kwenye onyesho ina uratibu ambao umebainishwa na X na Y. X huongezeka kutoka kushoto kwenda kulia na Y huongezeka kutoka juu hadi chini. Kona ya juu kushoto ya skrini ni (X = 0, Y = 0) na kona ya chini kulia ni (X = 127, Y = 63). Nilibaini kuratibu za pembe kwenye picha ya kwanza. Tunaweza kutumia kazi ya kuonyesha.setCursor () kutaja ni wapi kwenye onyesho tutaonyesha maandishi.

Mali nyingine ya maandishi ni rangi yake. Tunaweza kutaja rangi kwa kutumia display.setTextColor () kama inavyoonyeshwa kwenye sampuli ifuatayo.

onyesha wazi Cleplay ();

onyesha.setTextColor (NYEUPE); Onyesha Mshale (35, 30); display.println ("Hello World!"); onyesha.display ();

Tunaweza pia kutumia kazi ya kuonyesha.write () kuonyesha tabia moja. Inakubali nambari ya tabia kama aina ya uint8_t na inaonyesha tabia inayolingana na nambari hiyo kwenye kamba. Kama mfano, ikiwa tunataka kuonyesha kamba moja kwa kutumia kazi hii, tunaweza kutumia kijisehemu kifuatacho:

onyesha wazi Cleplay ();

onyesha.setTextColor (NYEUPE); Mshale wa kuonyesha (35, 30); onyesha (72); onyesha (101); onyesha (108); onyesha (108); onyesha (111); onyesha (32); onyesha andika (87); onyesha (111); andika (114); onyesha (108); onyesha (100); onyesha (33); onyesha.display ();

Inawezekana pia kuteka maandishi katika rangi nyeusi na asili nyeupe. Ili kufanya hivyo, lazima upigie kazi ya kuonyesha.setTextColor kama ilivyo hapo chini:

onyesha wazi Cleplay ();

// Inaweka rangi kuwa nyeusi na onyesho la asili nyeupe.setTextColor (NYEUSI, NYEUPE); Kuweka Mshale (25, 30); onyesha.println ("Nakala iliyogeuzwa!"); onyesha.display ();

Pia una chaguo la kuweka saizi ya maandishi kutumia kazi ya kuonyesha.setTextSize (). Inakubali nambari kamili kama saizi. Idadi kubwa, maandishi yatakuwa makubwa. Ukubwa mdogo ni 1 ambayo ni saizi ya maandishi. Kufuata nambari inajaribu kuandika barua "A" kwa saizi 6 tofauti:

onyesha wazi Cleplay ();

onyesha.setTextColor (NYEUPE); onyesha.setCursor (0, 0); onyesha.setTextSize (1); onyesho.print ("A"); onyesha.setTextSize (2); onyesho.print ("A"); onyesha.setTextSize (3); onyesho.print ("A"); onyesha.setTextSize (4); alama ya kuonyesha ("A"); onyesha.setTextSize (5); alama ya kuonyesha ("A"); onyesha.setTextSize (6); onyesho.print ("A"); onyesha.display ();

Hatua ya 9: Kuchora Maumbo ya Msingi

Kuchora Maumbo ya Msingi
Kuchora Maumbo ya Msingi
Kuchora Maumbo ya Msingi
Kuchora Maumbo ya Msingi
Kuchora Maumbo ya Msingi
Kuchora Maumbo ya Msingi

Kuchora maumbo ya kimsingi kama mstatili, duara, pembetatu, laini au alama ni rahisi sana na kuna kazi ya kujitolea kwa kila mmoja.

Kuchora

Ili kuchora laini unaweza kupiga display.drawLine (startX, startY, endX, endY, color). Kwa mfano kufuata nambari kunachora mistari ya diagonal kwenye skrini ili kuunda X kubwa:

onyesha wazi Cleplay ();

kuonyesha.drawLine (0, 0, display.width () - 1, display.height () - 1, WHITE); onyesha.drawLine (onyesha upanaji) (1 - 0, 0, onyesha. urefu () - 1, NYEUPE); onyesha.display ();

Unaweza kufikia upana na urefu wa onyesho ukitumia kazi za kuonyesha.width () na kazi za kuonyesha.height (). Kwa kufanya hivyo nambari yako itakuwa huru kutoka kwa saizi ya skrini.

Kuchora mstatili

Kazi ya kuchora mstatili ni kuonyesha.drawRect (juuLeftX, juuLeftY, upana, urefu, rangi). Hapa kuna nambari ambayo inachora mstatili tatu kwenye sehemu zingine za nasibu:

onyesha wazi Cleplay ();

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

Kwa kupiga simu display.fillRect (upperLeftX, upperLeftY, upana, urefu, WHITE) unaweza kuteka mstatili uliojazwa na rangi maalum. Pia kazi ya tatu katika mfano huu ni display.drawRoundRect (upperLeftX, upperLeftY, upana, urefu, konaRadius, rangi) ambayo unaweza kuona kwenye picha hutumiwa kuteka mstatili na pembe za pande zote. Inakubali parameter ya ziada kabla ya rangi ambayo ni nambari kamili inayoonyesha eneo la kona. Thamani kubwa kuzunguka kona. Pia ina kazi inayofanana ya kujaza inayoitwa display.drawFillRoundRect ambayo nadhani unaweza kukisia inachofanya.

Kuchora mduara

Kazi ni display.drawCircle (centerX, centerY, radius, rangi). Hapa kuna mfano ambao unachora sura inayofanana na ya kutabasamu:

onyesha Mzunguko (60, 30, 30, NYEUPE);

onyesha Mzunguko (50, 20, 5, NYEUPE); onyesha Mzunguko (70, 20, 5, NYEUPE);

Kama rectangles, unaweza kutumia kazi ya kuonyesha.fillCircle kuteka mduara uliojaa rangi iliyopewa.

Kuchora pembetatu

Ahh, tena kazi inayoitwa display.drawTriangle (poin1X, point1Y, point2X, point2Y, point3X, point3Y, rangi) na onyesho linalolingana.

onyesha. Chora Kamba (24, 1, 3, 55, 45, 55, NYEUPE);

onyesha. Jaza Triangle (104, 62, 125, 9, 83, 9, NYEUPE);

Chora hoja

Unaweza pia kupaka rangi alama maalum (ambayo inaitwa pixel) kwenye skrini kupitia kazi ya kuonyesha.drawPixel (pixelX, pixelY, rangi).

onyesha.drawPixel (20, 35, NYEUPE);

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

Hatua ya 10: Kuchora Picha

Kuchora Picha
Kuchora Picha
Kuchora Picha
Kuchora Picha

Kuchora picha ni tofauti na ngumu kidogo. Kama moduli ya kuonyesha ni monocolour, tunahitaji kwanza kubadilisha picha yetu kuwa fomati inayoitwa mono color bitmap (pia inaitwa nyeusi na nyeupe). Katika muundo kama huo, kila pikseli ya picha imewasilishwa na ama 0 au 1. 1s inawakilisha uwepo wa rangi na 0s inamaanisha nafasi tupu. Unaweza kuona mfano wa nembo ya Arduino katika fomati hii juu ya sehemu hii. Kazi ya kuchora picha ya bitmap ni display.drawBitmap (topLeftX, topLeftY, imageData, upana, urefu, rangi). Kigezo cha pichaData ni idadi ya nambari katika ka. Kila ka ina bits 8, kwa hivyo kila ka ina data ya saizi 8 za picha. Kwa kubainisha upana na urefu wa picha, kazi ya DrawBitmap itajua ni kutoka kwa safu gani ya saizi inayofuata.

Suluhisho ambalo nilichagua kubadilisha picha yangu kuwa fomati hii ilikuwa kwanza kutumia moja ya "picha kwa waongofu wa ASCII mkondoni" (kwa mfano https://my.asciiart.club) kubadilisha picha yangu kuwa seti ya herufi za ASCII na kisha kuchukua nafasi herufi zinazotumiwa kwa nafasi tupu na 0 na zingine kwa 1. Hiyo ndivyo unaona hapa chini. Unaweza kufikiria kila 0 na 1 kama pikseli kwenye onyesho. Kwa hivyo saizi ya picha haipaswi kuzidi saizi yetu ya kuonyesha ambayo ni 128x64.

Kumbuka: Kutumia mbinu hii ya ASCII sio njia inayopendekezwa kwa sababu kwa sababu ya uwiano wa wahusika picha yako itakuwa imeharibika (wahusika sio mraba). Nilijaribu mbinu hii kwa sababu tu inafanya iwe rahisi kubadilisha picha kuwa fomati inayohitajika. Vinginevyo itawezekana kufikia matokeo bora kupitia programu au kutumia programu tumizi ambazo hazipo kabisa kwenye maandishi haya.

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

Sasa tunapaswa kugawanya kila mstari na 8, inayowakilisha ka na kuihifadhi katika safu kama ilivyo hapo chini:

tuli const unsigned char PROGMEM arduino_logo = {

B00000000, B00000000, B00000111, B11111111, B11111111, B11100000, B00000000, B00000000, B00000000, B00000000, B01111111, B11111111, B11111111, B11111110, B00000000, B00000000;

Kisha tunaweza kuchora kwenye onyesho kwa kupiga kazi ya DrawBitmap.

onyesha.drawBitmap (32, 16, arduino_logo, 64, 32, WHITE);

Hatua ya 11: Utatuzi wa matatizo

Hii ilikuwa mafunzo marefu na kwa hivyo ina uwezekano mkubwa kwamba kitu kinakwenda vibaya. Hapa kuna orodha ya makosa ya kawaida ambayo unaweza kukutana nayo wakati wa kuweka moduli ya onyesho la OLED kwa mradi wako (baadhi yao yalinitokea wakati wa kuandaa mafunzo haya).

Hakuna kinachoonyeshwa kabisa

Hii inaweza kutokea kwa sababu nyingi kwa hivyo ninashauri kuangalia orodha ifuatayo ambayo inaweza kutokea katika mradi wako:

Anwani ya I2C labda sio sawa

Hakikisha umeweka anwani uliyo nayo katika nambari ya skana ya i2c katika onyesho.begin () kazi wakati wa kuweka kitu chako cha kuonyesha.

SCL na SDA zimeunganishwa kwa njia isiyofaa

Hii kweli ilitokea kwangu. Ikiwa unatumia Arduino Uno basi lazima uangalie viunganisho vyako tena ili kuhakikisha kuwa vimeunganishwa sawa na yangu. Ikiwa unatumia toleo jingine la Arduino (kwa mfano Mega, Leonardo, nk), lazima ujue kuwa wanaweza kuwa na I2C yao iliyowekwa kwenye pini zingine. Unaweza kuiangalia kwenye hati ya maktaba ya waya.

Unachora kitu kutoka eneo linaloonekana

Hili ni suala la programu. Ni kawaida sana wakati wa kutumia kazi za kuchora kuhesabu kuratibu zingine na kwa hivyo kuchora kwako kunaweza kuharibika au katika hali mbaya kabisa inaweza kuwa nje ya eneo. Pitia mahesabu yako na ujaribu kufanya hatua kwa hatua kuchora ili uone kinachoendelea.

Maandishi hayaonyeshwi kabisa

Umesahau kuweka rangi ya maandishi au umeiweka kwa thamani isiyofaa

Unahitaji kupiga setTextColor kabla ya kuchora maandishi. Vinginevyo huna makosa, lakini hautaona chochote kwenye onyesho. Pia unaweza kuwa umeweka rangi ya maandishi sawa na rangi ya asili.

Unatumia fonti kubwa sana

Ikiwa utaweka saizi ya maandishi kwa thamani kubwa sana, inaweza kuwa wahusika hutoka kabisa kwenye eneo linaloonekana.

Kuna hitilafu ya kukusanya kuhusu saizi ya onyesho

Hii pia ilitokea kwangu na nadhani itafanyika kwa wengi wenu. Ni kwa sababu ya viwango vya kawaida vya saizi ya kuonyesha ambayo hufafanuliwa ndani ya faili ya kichwa Adafruit_SSD1306.h ambayo tunajumuisha juu ya hati yetu. Faili hii iko katika {yako-mradi-folda} maktaba / Adafruit_SSD1306 / Adafruit_SSD1306.h. Ukifungua faili hii utagundua kuwa kuna sehemu ya maoni kama ilivyo hapo chini ambayo inaelezea kwamba unahitaji kutuliza tu mara kwa mara ambayo inawakilisha ukubwa wako wa moduli ya OLED. Kwa moduli za kuonyesha 128x64, laini #fafanua SSD1306_128_64 haipaswi kutafakari.

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

Maonyesho ya SSD1306 ---------------------------------- ---------------------- Dereva hutumiwa katika maonyesho anuwai (128x64, 128x32, nk). Chagua onyesho linalofaa hapa chini ili kuunda fremu ya ukubwa unaofaa, n.k. -------------------------------------------- * / #fafanua SSD1306_128_64 / / #fafanua SSD1306_128_32 // #fafanua SSD1306_96_16 / * ===================================== =============================== / /

Hatua ya 12: Nini cha Kufanya Ijayo?

Uonyesho wa OLED kama moduli ya pato inaweza kukupa fursa nzuri ya kutoa kiolesura cha uonekano wa kitaalam kwa miradi yako ya kupendeza. Unaweza kujaribu kufuata maoni kama mahali pa kuanzia kuonyesha data yenye maana juu yake au kumsaidia mtumiaji kujua kinachoendelea au ikiwa alihitaji kufanya kitu. Itakuwa wazi zaidi kwa mtumiaji kusoma ujumbe kwenye onyesho kuliko kutafsiri hali ya mradi / kifaa kupitia LED zingine.

Nini unaweza kufanya kama hatua ya kuanzia inaweza kuwa:

  • Soma thamani ya sensa ya joto na uionyeshe kwenye moduli ya OLED. Unaweza kuongeza shinikizo au sensorer ya unyevu na kuunda mradi kamili wa kituo cha hali ya hewa.
  • Jaribu kuteka kitu kwenye moduli ya onyesho ukitumia moduli ya fimbo ya kufurahisha kama kifaa cha kuingiza.
  • Jaribu kuteka uhuishaji kwenye onyesho kwa mlolongo wa kuchora / kuchelewesha simu za kazi au Arduino usumbue
  • Onyesha nembo yako ya kawaida kwenye uanzishaji wa mfumo wako (badala ya Nembo ya Adafruit)

Usisahau kuniambia juu ya maoni, ungefanya nini (au tayari umefanya) kwa kutumia moduli ya onyesho la OLED.

Ilipendekeza: