Inhoudsopgave:

Hoe u een E-Ink-display aan uw project toevoegt: 12 stappen (met afbeeldingen)
Hoe u een E-Ink-display aan uw project toevoegt: 12 stappen (met afbeeldingen)

Video: Hoe u een E-Ink-display aan uw project toevoegt: 12 stappen (met afbeeldingen)

Video: Hoe u een E-Ink-display aan uw project toevoegt: 12 stappen (met afbeeldingen)
Video: How to Ink Cardstock Edges | Add Depth to Layered Cards 2024, November
Anonim
Een E-Ink-display aan uw project toevoegen
Een E-Ink-display aan uw project toevoegen
Een E-Ink-display aan uw project toevoegen
Een E-Ink-display aan uw project toevoegen

Veel projecten hebben betrekking op het monitoren van bepaalde gegevens, zoals omgevingsgegevens, waarbij vaak een Arduino wordt gebruikt voor de besturing. In mijn geval wilde ik het zoutgehalte in mijn waterontharder in de gaten houden. Misschien wilt u toegang tot de gegevens via uw thuisnetwerk, maar u wilt ze ook weergeven waar ze worden gemeten. Of u kunt een altijd-aan op afstand aangesloten display op een handiger locatie hebben.

Er zijn nu verschillende soorten beeldschermen die u kunt gebruiken, allemaal vrij goedkoop, maar met verschillende voor- en nadelen:

  • Een alfanumeriek LCD-scherm is het goedkoopst maar ook het beperktst.
  • Een OLED-scherm kan afbeeldingen weergeven, maar de goedkope zijn erg klein. De tweede foto toont een 128x64 pixel OLED-display naast een E-Ink-display.
  • Een E-Ink (of E-Paper) display is wat groter en dus beter leesbaar, en heeft als voordeel dat de display ook bij uitgeschakelde toestand behouden blijft! Maar het duurt enkele seconden om het scherm opnieuw te tekenen.

Het E-Ink-display leek ideaal voor mijn toepassing, omdat ik de Arduino kon programmeren om slechts om de paar uur wakker te worden, een meting te doen en deze weer te geven voordat ik weer ging slapen. Het is dan niet van belang dat het enkele seconden duurt om de weergave opnieuw te tekenen.

In een dergelijke toepassing kan het gemiddelde stroomverbruik zo laag worden geregeld dat een 9V lithium-rookmelderbatterij 10 jaar meegaat! Bovendien zullen sommige van deze schermen drie kleuren weergeven: wit, zwart en rood (of geel). Ideaal als u een waarschuwing of waarschuwing in het rood wilt weergeven.

Benodigdheden

De goedkoopste E-Ink-displays die ik heb gevonden, worden verkocht door BuyDisplay, ook verkrijgbaar bij veel eBay-verkopers. Helaas laat de documentatie nogal wat te wensen over, dus nam ik het op mij om een tutorial te schrijven - lees verder!

Afhankelijk van uw wensen en uw budget heeft u de keuze uit verschillende maten:

  • 1,54" (152x152 = 23, 104 pixels)
  • 2,13" (212x104 = 22,048 pixels)
  • 2,6" (296 x 152 = 44, 992 pixels)
  • 2,7" (176x264 = 46, 464 pixels)
  • 2,9" (296x128 = 37, 888 pixels)
  • 4,2" (400x300 = 120.000 pixels)
  • 5,83" (640x480 = 307, 200 pixels)
  • 7,5" (880x528 = 464, 640 pixels)

(Het bereik is uitgebreid sinds de laatste keer dat ik keek, dus het kan zijn dat het nog verder is uitgebreid tegen de tijd dat je dit leest.)

Ze zijn verkrijgbaar in 2-kleuren (zwart/wit) of 3-kleuren (zwart/rood/wit of zwart/geel/wit). Deze Instructable gaat ervan uit dat je de rode gebruikt, maar als je de gele versie hebt gekozen, lees dan gewoon "geel" voor "rood".

Kies een SPI (4-draads) uitvoering. Ik gebruikte het 1.54 -model, wat een heel mooi formaat is.

Stap 1: Uw beeldscherm aansluiten

Uw beeldscherm aansluiten
Uw beeldscherm aansluiten

Deze displays worden geleverd met een 2x4 pin header. De pinnummers zijn duidelijk gelabeld, pin 7, 5, 3 en 1 (van links naar rechts) langs de bovenste rij en 8, 6, 4, 2 langs de onderkant.

Uw display wordt mogelijk geleverd met een 8-polige patchkabel, waardoor de aansluiting eenvoudig is. (Mijn patchkabel heeft 2 rode draden en 2 bruine. Ze zijn niet uitwisselbaar!

Onderstaande tabel geeft de aansluitingen weer, die gelden voor de meeste typen Arduino (o.a. Uno, Pro Mini, Pro Micro en Nano).

E-inktmodule Arduino
Pin Naam Pin Naam
1 VDD Vcc 3.3/5V
2 VSS Gnd Gnd
3 Seriële gegevens in 11 MOSI
4 Seriële klok in 13 SCK
5 /Chip selecteren 10
6 Gegevens/Instructie 9
7 Resetten 8
8 Apparaat bezet 7

Stap 2: Download de meegeleverde software

U kunt de meegeleverde software gebruiken zoals beschreven in deze stap, of u kunt mijn uitgebreide bibliotheek gebruiken in de volgende stap.

Vind uw apparaat op BuyDisplay.com. Onderaan de pagina vindt u een download ZIP-bestand "Arduino-bibliotheek en voorbeeld voor 4-draads SPI". Klik hierop om te downloaden en te openen in Windows Verkenner.

Windows Verkenner toont dit als een enkele map op het hoogste niveau "Libraries-Examples_ER-EPM0154-1R". (De naam zal iets anders zijn als de jouwe niet het 1.54"-model is.)

Kopieer deze map op het hoogste niveau naar uw Arduino-bibliothekenmap. Klik met de rechtermuisknop om de naam van de map te wijzigen en verwijder "Bibliotheken-Voorbeelden_" uit de naam.

(Om uw Arduino-bibliothekenmap te vinden, klikt u in de Arduino IDE op Bestand … Voorkeuren en noteert u de locatie van het schetsboek. Navigeer hierheen en u zult de map Arduino "bibliotheken" vinden tussen uw schetsmappen.)

Open deze map en open daarin de map "Bibliotheken". Sleep alle bestanden in deze map naar de bovenliggende map een niveau hoger ("ER-EPM0154-1R"). Verwijder de (nu lege) map "Bibliotheken".

Je hebt nu de bestanden en een voorbeeldschets als Arduino-bibliotheek geïnstalleerd. Merk op dat als uw display niet de 1,54 is, het enige verschil lijkt te zijn twee regels in ER-ERM*-1.h die WIDTH en HEIGHT definiëren.

Klik in de Arduino IDE op File… Exampes en scrol omlaag naar ER-EPM0154-1R voor de demo-schets, die u zou moeten kunnen compileren en uitvoeren zodra u uw display op uw Arduino hebt aangesloten.

Stap 3: De demo uitvoeren

De demo uitvoeren
De demo uitvoeren
De demo uitvoeren
De demo uitvoeren

Klik in de Arduino IDE op Bestand… Voorbeelden… ER-EPM0154-1R.

Verbind je Arduino met je computer met een USB-kabel, of zoals je normaal doet.

Stel onder Tools het bord, de processor en de poort in.

Klik onder Schets op Uploaden.

Er zal een kleine vertraging optreden nadat het uploaden is voltooid, en tien keer zal de vertraging een aantal keer knipperen terwijl het de eerste afbeelding schildert. Kijk terwijl het door de demo gaat.

Stap 4: De verbeterde bibliotheek gebruiken

Je kunt mijn verbeterde bibliotheek downloaden van github op

NB Ik heb er veel vertrouwen in dat mijn bibliotheek zal werken met elk formaat compatibel beeldscherm, maar ik heb het alleen getest met het 1,54 -model. Als je een andere gebruikt, laat het me dan weten in de opmerkingen aan het einde van deze Instructable, om te bevestigen dat het werkt. Maar als het niet werkt, zal ik mijn best doen om je op weg te helpen.

Download en bewaar het zip-bestand. Klik in de Arduino IDE op Sketch… Include Library… Add. ZIP Library en selecteer het opgeslagen zipbestand.

Mijn bibliotheek bevat een aantal kleine verbeteringen:

  • Hiermee kunnen verschillende Arduino-pinnummers worden gebruikt (behalve MOSI).
  • Dezelfde bibliotheek kan worden gebruikt voor elk formaat apparaat.
  • Er is een nieuwe 50% gearceerde vulling en een gespikkelde vulling (willekeurige set pixels) beschikbaar.

De bibliotheek wordt geleverd als een standaard Arduino gecomprimeerd (zip) bestand. Download het naar je Downloads-map (of waar je maar wilt) en klik in de Arduino IDE op Sketch… Include Library… Add ZIP Library.

Onder Voorbeelden vindt u nu E-ink_ER-EPM. Er zijn 3 voorbeeldschetsen:

  • ER_EPM154-1R-Test: De originele door de leverancier geleverde demonstratie
  • E-ink_demo: De schets ontwikkeld in de volgende stappen
  • E-ink_rotate: een demonstratie van beeldrotatie.

Stap 5: Zelf programmeren

Er is helaas geen documentatie met de door de leverancier geleverde code, en de voorbeeldcode is ook niet adequaat becommentarieerd. Dit maakt het moeilijker dan het zou moeten zijn om te gebruiken, en het belangrijkste doel van deze Instructable is om dat recht te zetten.

Basisconcepten

Aangezien een Arduino beperkt is in de beschikbare hoeveelheid RAM, kunt u met de bibliotheek in kleine delen van het scherm tegelijk tekenen of schrijven, en deze afzonderlijk uploaden naar het interne geheugen van het apparaat. Pas als je alle porties hebt geüpload die je nodig hebt, vertel je het om weer te geven wat het in het geheugen heeft.

Deze secties van het scherm staan bekend als "Paint"-objecten. Je hebt er maar één nodig en voor elk deel van het scherm definieer je de hoogte, breedte en rotatie. Als je klaar bent, upload je het, definieer je de positie op het scherm om het te laden en of het zwart-wit of rood-wit moet zijn.

De linkerbovenhoek van het scherm heeft horizontale (x) en verticale (y) coördinaten (0, 0), linksonder is (0, 151) en rechtsboven is (151, 0).

Initialisatie

Open de E-ink_demo-schets in de Arduino IDE en volg deze terwijl ik beschrijf hoe de bibliotheek te gebruiken.

Bovenaan de schets zie je de volgende lijnen, die altijd nodig zijn:

#include <SPI.h #include "ER-ERM0154-1.h" #include "imagedata.h" #include "epdpaint.h" #define COLORED 0 #define UNCOLORED 1 Epd epd;

De #include-regels halen de vereiste bibliotheken binnen. SPI.h is een standaard Arduino-bibliotheek, maar de andere maken deel uit van de e-ink-bibliotheek.

We definiëren namen voor ONGEKLEURDE (witte) pixels en GEKLEURDE (zwarte of rode). (Opmerking voor mijn mede-Europeanen: de Amerikaanse spelling van COLOR wordt gebruikt.)

De EPD-epd; lijn maakt het elektronische papieren apparaatobject, waarop we zullen weergeven. Dit moet hier aan het begin van de schets staan om het beschikbaar te maken voor de functies setup() en loop().

Als u een ander formaat display heeft, kunt u de EPD-regel vervangen door:

Epd epd (BREEDTE, HOOGTE);

(met eerder gedefinieerde WIDTH en HEIGHT in #define statements.)

Op dezelfde manier kunt u niet-standaard pinnummers opgeven met:

Epd epd (BREEDTE, HOOGTE, BUSY_PIN, RESET_PIN, DC_PIN, CS_PIN);

Binnen setup() moeten we het apparaat als volgt initialiseren:

Serieel.begin(9600)

if (epd. Init() != 0) { Serial.print("e-Paper init mislukt"); opbrengst; }

(In feite retourneert epd. Init() nooit een fout, maar een toekomstige verbetering kan de afwezigheid van een of een niet-functionerend scherm detecteren.)

Stap 6: Tekst schrijven

Tekst schrijven
Tekst schrijven

Richt in de E-ink_demo uw aandacht op loop(). Laten we eerst het scherm wissen:

epd. ClearFrame()

(Dit is niet echt nodig als u op het punt staat uw eigen afbeelding weer te geven.)

Voordat we iets kunnen tekenen (tekst of afbeeldingen), moeten we een Paint-object maken om op te tekenen:

niet-ondertekende char-afbeelding [1024]

Verf verf (afbeelding, 152, 18); //breedte moet het veelvoud van 8. zijn

Dit reserveert wat ruimte (1024 bytes) en wijst deze toe aan het Paint-object, aangegeven door de tweede regel. Dit is voorlopig geconfigureerd als 152 pixels breed en 18 pixels diep. We kunnen het later opnieuw configureren voor hergebruik indien nodig, maar let op: de breedte moet een veelvoud van 8 zijn, aangezien 8 pixels per byte worden opgeslagen en we bytes niet kunnen splitsen. (Het zal het indien nodig zelfs afronden, maar het kan dan een raadsel zijn als uw scherm er niet uitziet zoals het zou moeten.

Nu moeten we het verfobject wissen naar ONGEKLEURD (wit), dan schrijven we op positie (x, y) = (22, 2) "e-ink Demo" met een 16-pixel hoog lettertype, en GEKLEURD (om te laten zien tegen de ONGEKLEURDE achtergrond.

verf. Duidelijk (ONGEKLEURD)

paint. DrawStringAt (12, 2, "e-paper Demo", &Font16, GEKLEURD);

Merk op dat de coördinaten (22, 2) de linkerbovenhoek van het eerste teken van de tekenreeks zijn, en 22 pixels in en 2 pixels lager zijn ten opzichte van de linkerbovenhoek van het verfobject, niet het hele scherm. Tekst ziet er het beste uit ten minste één pixel naar beneden vanaf de bovenkant van het verfobject.

De volgende lettertypen zijn beschikbaar:

Lettertype8 - 5x8 pixelsLettertype12 - 7x12 pixelsLettertype16 - 11x16 pixelsLettertype20 - 14x20 pixelsLettertype24 - 17x24 pixels

We hoeven nu alleen het verfobject ("verf") naar het apparaat ("epd") te sturen:

epd. SetPartialWindowBlack(paint. GetImage(), 0, 3, paint. GetWidth(), paint. GetHeight());

SetPartialWindowBlack is een methode die we toepassen op het epd-object, gebruikmakend van de afbeelding en de breedte- en diepte-eigenschappen van het paint-object. We vertellen het om deze afbeelding naar het apparaat te schrijven op (x, y) = (0, 3). En we zeggen dat de GEKLEURDE pixels zwart moeten zijn.

Dat was toch niet zo moeilijk? Laten we een andere proberen.

verf. Duidelijk (GEKLEURD);

paint. DrawStringAt(20, 2, "(Wit op kleur)", &Font12, ONGEKLEURD); epd. SetPartialWindowRed(paint. GetImage(), 0, 24, paint. GetWidth(), paint. GetHeight());

We hergebruiken hetzelfde verfobject, en dezelfde breedte en hoogte, maar laten we het deze keer wissen naar GEKLEURD en er een ONGEKLEURDE string naar schrijven. En voor de verandering maken we de GEKLEURDE pixels rood en schrijven deze naar het apparaat op (0, 24), net onder de eerste.

We hebben de twee verfobjecten naar het geheugen van het apparaat geschreven, maar nog niet verteld om ze weer te geven. Dit doen we met de volgende stelling:

epd. DisplayFrame();

(In de E-ink_demo-schets laten we dit eigenlijk tot het einde, na wat meer dingen te hebben getekend, maar je zou het hier kunnen invoegen als je wilt, mybe gevolgd door delay (10000); om je tijd te geven om je handwerk te bewonderen.

Stap 7: Lijnen en rechthoeken tekenen

Lijnen en rechthoeken tekenen
Lijnen en rechthoeken tekenen

Laten we eens kijken hoe we lijnen en rechthoeken kunnen tekenen. We gaan hetzelfde verfobject gebruiken, maar we moeten het opnieuw configureren als 40 pixels breed en 36 pixels hoog. We zullen het wissen in ONGEKLEURD.

verf. SetWidth(40);

verf. SetHeight(36); verf. Clear (ONGEKLEURD);

We gaan zoals gewoonlijk een (GEKLEURDE) rechthoek tekenen met de linkerbovenhoek (5, 3) en rechtsonder (35, 33), relatief ten opzichte van het verfobject. We zullen de diagonalen ook tekenen als lijnen van (5, 3) tot (35, 33) en van (35, 3) tot (5, 33). Ten slotte zullen we het hele verfobject (rood) naar het scherm schrijven bij (32, 42).

//BOVENSTE RIJ:

// Rechthoekige verf. Helder (ONGEKLEURD); verf. DrawRectangle (5, 3, 35, 33, GEKLEURD;) verf. DrawLine (5, 3, 35, 33, GEKLEURD); verf. DrawLine(35, 3, 5, 33, GEKLEURD); epd. SetPartialWindowRed(paint. GetImage(), 32, 42, paint. GetWidth(), paint. GetHeight());

De bibliotheek, zoals die kwam, bood ook een gevulde rechthoek, maar hey, ik wilde een gearceerde, dus ik voegde een nieuwe methode toe. We maken nog twee rechthoeken, één gearceerd en één gevuld, en plaatsen ze rechts van de eerste, afwisselend zwart en rood.

// Shaded Rectange paint. Clear (ONGEKLEURD); verf. DrawShadedRectangle (5, 3, 35, 33); epd. SetPartialWindowBlack(paint. GetImage(), 72, 42, paint. GetWidth(), paint. GetHeight()); // Gevulde rechthoekverf. Duidelijk (ONGEKLEURD); verf. DrawFilledRectangle (5, 3, 35, 33, GEKLEURD); epd. SetPartialWindowRed(paint. GetImage(), 112, 42, paint. GetWidth(), paint. GetHeight());

Stap 8: Cirkels tekenen

Cirkels tekenen
Cirkels tekenen

Cirkels zijn net zo gemakkelijk te tekenen. In plaats van de coördinaten van twee hoeken, moeten we de coördinaten van het middelpunt en de straal opgeven. We wissen het verfobject en plaatsen dan een cirkel op (20, 15) (ten opzichte van het verfobject) en straal 15. En herhaal voor een gearceerde en een gevulde cirkel.

//TWEEDE RIJ

// Cirkelverf. Helder (ONGEKLEURD); verf. DrawCircle (20, 18, 15, GEKLEURD); epd. SetPartialWindowBlack(paint. GetImage(), 32, 78, paint. GetWidth(), paint. GetHeight()); // Shaded Circle-verf. Helder (ONGEKLEURD); verf. DrawShadedCircle (20, 18, 15); epd. SetPartialWindowRed(paint. GetImage(), 72, 78, paint. GetWidth(), paint. GetHeight()); // Gevulde cirkelverf. Duidelijk (ONGEKLEURD); verf. DrawFilledCircle (20, 18, 15, GEKLEURD); epd. SetPartialWindowBlack(paint. GetImage(), 112, 78, paint. GetWidth(), paint. GetHeight());

Stap 9: ONGEKLEURD op een GEKLEURDE achtergrond

ONGEKLEURD op een GEKLEURDE achtergrond
ONGEKLEURD op een GEKLEURDE achtergrond

We gaan hier beroemd! Dus terwijl we bezig zijn, laten we nog 3 cirkels op een rij hieronder doen, deze keer ONGEKLEURD op een GEKLEURD verfobject, zoals we deden met de tweede regel tekst.

//DERDE RIJ

// Cirkelverf. Helder (GEKLEURD); verf. DrawCircle (20, 18, 15, ONGEKLEURD); epd. SetPartialWindowRed(paint. GetImage(), 32, 114, paint. GetWidth(), paint. GetHeight()); // Shaded Circle-verf. Duidelijke (GEKLEURDE) verf. DrawShadedCircle (20, 18, 15); epd. SetPartialWindowBlack(paint. GetImage(), 72, 114, paint. GetWidth(), paint. GetHeight()); // Gevulde cirkelverf. Duidelijk (GEKLEURD); verf. DrawFilledCircle (20, 18, 15, ONGEKLEURD); epd. SetPartialWindowRed(paint. GetImage(), 112, 114, paint. GetWidth(), paint. GetHeight());

Naast de gearceerde vulling is er ook een gespikkelde vulling, die willekeurige pixels kleurt. Dus in plaats van de gearceerde cirkel hierboven hadden we kunnen plaatsen

verf. DrawSpeckledCircle (20, 18, 15, 25);

De laatste parameter (25) is de dichtheid, d.w.z. het percentage pixels dat moet worden gekleurd. Indien weggelaten, wordt uitgegaan van 50%.

Er is ook een DrawSpeckledRectangle, met een optionele extra parameter die de dichtheid specificeert.

Stap 10: Rotatie

Rotatie
Rotatie
Rotatie
Rotatie

Alles wat we kunnen tekenen, kunnen we 90, 180 of 270 graden draaien. (We tellen rotaties met de klok mee.)

We kunnen een ROTATE-eigenschap toepassen op een paint-object, maar het is belangrijk om te begrijpen dat niet het paint-object wordt geroteerd, maar alles wat u ernaar schrijft. Dus als u verticale tekst wilt, moet u uw verfobject zo lang en dun configureren in verticale richting in plaats van horizontaal.

Dus als u wilt dat uw tekst 90 graden met de klok mee wordt gedraaid, zodat deze van boven naar beneden wordt gelezen (in plaats van van links naar rechts), is de rechterbovenhoek van het verfobject (0, 0) voor alles wat u schrijft of teken erin, met x gemeten vanaf die hoek naar beneden, en y vanuit die hoek naar links.

Je hebt waarschijnlijk gemerkt dat we een spatie aan de linkerkant van het scherm hebben gelaten. Dus laten we daar wat tekst schrijven, 270 graden gedraaid, d.w.z. van onder naar boven lezen. Hierdoor wordt (0, 0) in de linkerbenedenhoek geplaatst.

Merk op dat hoe u een verfobject ook draait, de rotatie alleen van toepassing is als u er pixels op tekent. Als je het naar het apparaat gaat schrijven, zijn het nog steeds de coördinaten van de linkerbovenhoek die je aan SetPartialWindow moet geven.

Dus om samen te vatten, laten we ons verfobject configureren om breedte 32 en hoogte 110 te hebben, en we geven het een ROTATE_270-eigenschap. Niet dat we dit allemaal moeten doen voordat we er iets op schrijven of tekenen.

verf. SetWidth(32);

verf. SetHeight(110); verf. SetRotate(ROTATE_270);

We wissen het naar COLORED en schrijven er een ONGEKLEURDE string naar toe, en plaatsen het dan op (0, 42). (Dat is de linkerbovenhoek, onthoud. Vergeet elke rotatie van de pixels erin.)

verf. Duidelijk (GEKLEURD); paint. DrawStringAt(8, 8, "Zijwaarts!", &Font16, ONGEKLEURD); epd. SetPartialWindowBlack(paint. GetImage(), 0, 42, paint. GetWidth(), paint. GetHeight());

Ten slotte moeten we het apparaat vertellen om alle pixels weer te geven die we het hebben gegeven. En als we het een tijdje niet willen veranderen en de batterij willen sparen, kunnen we het in de slaapstand zetten, en waarom niet de Arduino ook in de slaapstand zetten, om gewekt te worden wanneer het tijd is om een andere te nemen en weer te geven meting.

epd. DisplayFrame();

epd. Slaap();

Een tweede voorbeeldschets toont rotatie over 90, 180 en 270 graden. Je zou het nu zelf moeten kunnen volgen.

Stap 11: Bitmaps tekenen

Bitmaps tekenen
Bitmaps tekenen

De demo van de leverancier omvat de weergave van een aantal bitmapafbeeldingen. Deze zijn eenvoudig te maken met behulp van een tool die kan worden gedownload van

www.buydisplay.com/image2lcd

Het wordt geleverd als een zipbestand met een.exe-installatiebestand en een tekstbestand met een licentiesleutel. Vouw het uit en dubbelklik vervolgens op het.exe-bestand om het te installeren.

Het is duidelijk dat er vrij strenge beperkingen zijn aan wat u kunt weergeven, aangezien E-ink-pixels alleen aan of uit kunnen zijn en dus geen grijsniveaus kunnen vertegenwoordigen. Maar het is mogelijk om een rechthoekig verfobject op een afbeelding te leggen. Misschien wilt u een logo, symbolen of vaste tekst weergeven in een fraai lettertype, waarop u variabele tekst of afbeeldingen, zoals een staaf- of cirkeldiagram, kunt plaatsen, bijvoorbeeld om een vloeistofniveau aan te geven.

U kunt uw afbeelding maken met elke tekensoftware waarmee u bekend bent, of u kunt een schets of tekening inscannen, maar in beide gevallen moet u deze kunnen verkleinen tot slechts 2 niveaus. Sla het op als.gif,-j.webp

Start Image2Lcd. Onderaan ziet u een tabblad Registreren. Klik hierop en voer de registratiecode in die in een tekstbestand kwam in het zip-bestand dat u hebt gedownload. Hiermee wordt een overlay op de afbeelding verwijderd.

Open in Image2Lcd uw afbeeldingsbestand. Zorg er in het linkerdeelvenster voor dat u:

  • Uitvoer bestandstype: C-array
  • Scanmodus: Horizontale scan
  • BitsPixel: Monochroom
  • Max Breedte en Hoogte: de grootte van uw scherm, en
  • Hoofdgegevens opnemen moet uitgeschakeld zijn.

Klik op de knop naast Max Breedte en Hoogte om te verwerken. Het resultaat van de verwerking wordt getoond. Mogelijk moet u de schuifregelaars Helderheid en Contrast aanpassen om de beste resultaten te krijgen.

Klik op het selectievakje Kleur omkeren boven de schuifregelaar Helderheid, waardoor het een negatieve afbeelding wordt, wat om de een of andere reden nodig is, en klik vervolgens op Opslaan om het op te slaan als imagedata.cpp in de map met uw Arduino-schets. De volgende keer dat u de schets opent met de Arduino IDE, zou u deze als een nieuw tabblad moeten zien.

Stap 12: Uw bitmap weergeven

Uw bitmap weergeven
Uw bitmap weergeven

In het hoofdbestand van je Arduino-schets, onmiddellijk na de #include-regels bovenaan, voeg je in:

#include "imagedata.h"

Maak een nieuw tabblad (klik op het pijltje naar beneden aan het einde van de tabs-regel) en noem het imagedata.h. Voeg daarin de volgende 2 regels in:

extern const unsigned char IMAGE_BLACK;

extern const unsigned char IMAGE_RED;

In uw imagedata.cpp-bestand begint de eerste regel met

const unsigned char gImage_image[2888] = {

(Het getal tussen vierkante haken zal anders zijn als u het 1,54” scherm niet gebruikt.) Vervang dit door

const unsigned char IMAGE_BLACK PROGMEM = {

Dit is voor een zwart-wit afbeelding. Als je het rood en wit wilt, verander het dan in

const unsigned char IMAGE_RED PROGMEM = {

Voeg net voor deze regel toe

#erbij betrekken

#include "imagedata.h"

U bent nu klaar om uw afbeelding weer te geven. In loop() in je hoofdbestand, voeg. toe

epd. ClearFrame();

epd. DisplayFrame (IMAGE_BLACK, NULL);

Of, als het een rode afbeelding was die je had gemaakt, zou de tweede regel moeten zijn:

epd. DisplayFrame (NULL, IMAGE_RED);

In feite kunt u een gecombineerde rode en zwarte afbeelding maken door de rode en zwarte delen afzonderlijk te converteren met Image2Lcd, en ze beide weer te geven met

epd. DisplayFrame (IMAGE_BLACK, IMAGE_RED);

Pixels die echter zowel zwart zijn gespecificeerd in de zwart-witafbeelding als rood in de rood-witte afbeelding, worden rood weergegeven.

Ten slotte kunt u uw afbeelding overlappen met een van de tekst- of grafische functies waarover we eerder hebben geleerd. Ik wilde mijn Twitter-handvat toevoegen, dus ik heb toegevoegd

Verf verf (afbeelding, 20, 152); //breedte moet het veelvoud van 8. zijn

verf. SetRotate(ROTATE_270); verf. Clear (ONGEKLEURD); paint. DrawStringAt(20, 2, "@pleriche", &Font16, GEKLEURD); epd. SetPartialWindowRed(paint. GetImage(), 0, 0, paint. GetWidth(), paint. GetHeight()); epd. SetPartialWindowRed(paint. GetImage(), 0, 0, paint. GetWidth(), paint. GetHeight()); epd. DisplayFrame();

Aanbevolen: