Inhoudsopgave:
- Benodigdheden
- Stap 1: Uw beeldscherm aansluiten
- Stap 2: Download de meegeleverde software
- Stap 3: De demo uitvoeren
- Stap 4: De verbeterde bibliotheek gebruiken
- Stap 5: Zelf programmeren
- Stap 6: Tekst schrijven
- Stap 7: Lijnen en rechthoeken tekenen
- Stap 8: Cirkels tekenen
- Stap 9: ONGEKLEURD op een GEKLEURDE achtergrond
- Stap 10: Rotatie
- Stap 11: Bitmaps tekenen
- Stap 12: Uw bitmap weergeven
Video: Hoe u een E-Ink-display aan uw project toevoegt: 12 stappen (met afbeeldingen)
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:14
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
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
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
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
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 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
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
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
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
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:
Hoe u een metalen slot aan uw Joycons toevoegt: 8 stappen
Hoe u een metalen slot aan uw Joycons kunt toevoegen: Om dit project te doen, heb ik dit product gebruikt https://www.amazon.es/dp/B07Q34BL8P?ref=ppx_pop_mo… of kan niet goedkoper zijn, afhankelijk van waar je woont voor verzendkosten. In dit instructable I
Hoe EL-draad aan een jas of ander kledingstuk toe te voegen: 10 stappen (met afbeeldingen) Antwoorden op al uw "Hoe?"
Hoe EL-draad aan een jas of ander kledingstuk toe te voegen: Als verlichte kostuumontwerper krijg ik veel vragen van mensen die willen weten hoe ze hun eigen EL-draadkostuums kunnen maken. Ik heb geen tijd om iedereen individueel te helpen, dus ik dacht dat ik mijn advies zou consolideren in één instructable. Hopelijk d
Hoe u gebruikersniveaus van NUMA toevoegt aan uw exemplaar van N met behulp van NumADD Firefox AddOn: 4 stappen
Gebruikersniveaus van NUMA toevoegen aan uw exemplaar van N NumADD Firefox-add-on gebruiken: Elke gebruiker van Metanet's N-database op gebruikersniveau NUMA weet hoe onhandig de interface is voor het kopiëren van door gebruikers gemaakte niveaus naar uw exemplaar van het spel. NumADD, elimineert de noodzaak van kopiëren en plakken en maakt het overzetten van niveaus het werk van één muisklik
Voeg een pc-synchronisatie-aansluiting toe aan een Nikon Sc-28 Ttl-kabel (gebruik de automatische instellingen voor een aan-cameraflits en trigger-uit-cameraflitsen!!): 4 stappen
Voeg een Pc Sync-aansluiting toe aan een Nikon Sc-28 TTL-kabel (gebruik Auto-instellingen voor een on Camera Flash en Trigger Off Camera Flashes !!): in deze instructable laat ik je zien hoe je een van die vervelende gepatenteerde 3-pins TTL-connectoren op de zijkant van een Nikon SC-28 off-camera TTL-kabel en vervang deze door een standaard pc-synchronisatieconnector. hierdoor kunt u een speciale flitser gebruiken, s
Bling Out Your Breadboard (hoe u een LED-stroomindicator toevoegt aan Solarbotics Transparant Breadboard): 7 stappen
Bling Out Your Breadboard (hoe voeg je een LED-stroomindicator toe aan Solarbotics Transparant Breadboard): Deze transparante breadboards lijken veel op elk ander elektronisch breadboard, maar ze zijn duidelijk! Dus, wat kun je doen met een duidelijk breadboard? Ik denk dat het voor de hand liggende antwoord is om power-LED's toe te voegen