Sommario:

Come aggiungere un display E-Ink al tuo progetto: 12 passaggi (con immagini)
Come aggiungere un display E-Ink al tuo progetto: 12 passaggi (con immagini)

Video: Come aggiungere un display E-Ink al tuo progetto: 12 passaggi (con immagini)

Video: Come aggiungere un display E-Ink al tuo progetto: 12 passaggi (con immagini)
Video: Maranza cerca di prendermi la moto 2024, Novembre
Anonim
Come aggiungere un display E-Ink al tuo progetto
Come aggiungere un display E-Ink al tuo progetto
Come aggiungere un display E-Ink al tuo progetto
Come aggiungere un display E-Ink al tuo progetto

Molti progetti prevedono il monitoraggio di alcuni tipi di dati, come i dati ambientali, spesso utilizzando un Arduino per il controllo. Nel mio caso, volevo monitorare il livello di sale nel mio addolcitore d'acqua. Potresti voler accedere ai dati sulla tua rete domestica, ma allo stesso modo potresti volerlo visualizzare dove viene misurato. Oppure potresti avere un display sempre connesso in remoto in una posizione più comoda.

Ora ci sono diversi tipi di display che puoi usare, tutti abbastanza economici, ma con diversi vantaggi e svantaggi:

  • Un display LCD alfanumerico è il più economico ma anche il più limitato.
  • Un display OLED può visualizzare la grafica ma quelli economici sono molto piccoli. La seconda foto mostra un display OLED da 128x64 pixel accanto a uno E-Ink.
  • Un display E-Ink (o E-Paper) è un po' più grande e quindi più facile da leggere, e ha il vantaggio che il display viene mantenuto anche quando è spento! Ma ci vogliono diversi secondi per ridisegnare il display.

Il display E-Ink sembrava l'ideale per la mia applicazione in quanto potevo programmare l'Arduino per svegliarsi solo ogni poche ore, fare una lettura e visualizzarlo prima di tornare a dormire. Non è quindi importante che occorrano diversi secondi per ridisegnare il display.

In tale applicazione, il consumo medio di corrente può essere impostato in modo che sia così basso che una batteria per rilevatore di fumo al litio da 9V può durare per 10 anni! Inoltre, alcuni di questi display mostreranno tre colori: bianco, nero e rosso (o giallo). Ideale se desideri visualizzare un avviso o un avviso in rosso.

Forniture

I display E-Ink più economici che ho trovato sono venduti da BuyDisplay, disponibile anche da molti venditori eBay. Sfortunatamente la documentazione lascia molto a desiderare, quindi ho deciso di scrivere un tutorial - continua a leggere!

A seconda delle tue esigenze e del tuo budget, puoi scegliere tra varie dimensioni:

  • 1,54" (152x152 = 23, 104 pixel)
  • 2.13" (212x104 = 22, 048 pixel)
  • 2,6" (296x152 = 44, 992 pixel)
  • 2,7" (176x264 = 46, 464 pixel)
  • 2,9" (296x128 = 37.888 pixel)
  • 4.2" (400x300 = 120.000 pixel)
  • 5.83" (640x480 = 307, 200 pixel)
  • 7,5" (880x528 = 464, 640 pixel)

(L'intervallo si è ampliato dall'ultima volta che ho guardato, quindi potrebbe essersi ampliato ulteriormente quando leggerai questo.)

Sono disponibili a 2 colori (nero/bianco) oa 3 colori (nero/rosso/bianco o nero/giallo/bianco). Questo Instructable presuppone che tu stia usando quello rosso, ma se hai scelto la versione gialla, leggi semplicemente "giallo" per "rosso" in tutto.

Scegli una versione SPI (4 fili). Ho usato il modello da 1,54 , che è una taglia molto bella.

Passaggio 1: collegamento del display

Collegamento del display
Collegamento del display

Questi display sono dotati di un'intestazione 2x4 pin. I numeri dei pin sono chiaramente etichettati, i pin 7, 5, 3 e 1 (da sinistra a destra) lungo la riga superiore e 8, 6, 4, 2 lungo la parte inferiore.

Il display potrebbe essere dotato di un cavo patch a 8 vie, che semplifica la connessione. (Il mio cavo patch ha 2 fili rossi e 2 marroni. Non sono intercambiabili!

La tabella seguente fornisce le connessioni che si applicano alla maggior parte dei tipi di Arduino (inclusi Uno, Pro Mini, Pro Micro e Nano).

Modulo inchiostro elettronico Arduino
Spillo Nome Spillo Nome
1 VDD Vcc 3.3/5V
2 VSS Gnd Gnd
3 Ingresso dati seriali 11 MOSI
4 Ingresso orologio seriale 13 SCK
5 /Selezione chip 10
6 Dati/Istruzioni 9
7 Ripristina 8
8 Dispositivo occupato 7

Passaggio 2: scaricare il software fornito

È possibile utilizzare il software fornito come descritto in questo passaggio oppure è possibile utilizzare la mia libreria avanzata nel passaggio successivo ma uno.

Trova il tuo dispositivo su BuyDisplay.com. Nella parte inferiore della pagina troverai un file ZIP per il download "Libreria Arduino ed esempio per SPI a 4 fili". Fare clic su questo per scaricare e aprire in Esplora risorse.

Windows Explorer mostrerà questo come contenente una singola cartella di primo livello "Libraries-Examples_ER-EPM0154-1R". (Il nome sarà leggermente diverso se il tuo non è il modello da 1,54".)

Copia questa cartella di primo livello nella cartella delle librerie Arduino. Fare clic con il pulsante destro del mouse per rinominare la cartella ed eliminare "Librerie-Esempi_" dal nome.

(Per trovare la cartella delle librerie di Arduino, nell'IDE di Arduino, fare clic su File… Preferenze e annotare la posizione dello Sketchbook. Naviga fino a questo e troverai la cartella "librerie" di Arduino tra le tue cartelle di sketch.)

Apri questa cartella e apri la cartella "Librerie" al suo interno. Trascina e rilascia tutti i file in questa cartella nella cartella principale di un livello superiore ("ER-EPM0154-1R"). Elimina la cartella "Librerie" (ora vuota).

Ora hai installato i file e uno schizzo di esempio come libreria Arduino. Nota che se il tuo display non è quello da 1,54 , l'unica differenza sembra essere due righe in ER-ERM*-1.h che definiscono WIDTH e HEIGHT.

Nell'IDE di Arduino, fai clic su File… Exampes e scorri verso il basso fino a ER-EPM0154-1R per lo sketch demo, che dovresti essere in grado di compilare ed eseguire non appena avrai collegato il display ad Arduino.

Passaggio 3: eseguire la demo

Esecuzione della demo
Esecuzione della demo
Esecuzione della demo
Esecuzione della demo

Nell'IDE Arduino, fare clic su File… Esempi… ER-EPM0154-1R.

Collega il tuo Arduino al computer con un cavo USB, o come fai normalmente.

In Strumenti, imposta la scheda, il processore e la porta.

In Schizzo, fai clic su Carica.

Ci sarà un leggero ritardo dopo il completamento del caricamento e dieci il ritardo lampeggerà un numero di volte mentre dipinge la prima immagine. Guarda mentre passa attraverso la demo.

Passaggio 4: utilizzo della libreria avanzata

Puoi scaricare la mia libreria avanzata da github su

N. B. Ho un alto grado di fiducia che la mia libreria funzionerà con qualsiasi display compatibile con qualsiasi dimensione, ma in realtà l'ho testato solo con il modello da 1,54 . Se ne usi uno diverso, faccelo sapere nei commenti alla fine di questo Instructable, per confermare che funziona. Ma in caso contrario, farò del mio meglio per farti andare avanti.

Scarica e salva il file zip. Nell'IDE di Arduino, fare clic su Schizzo… Includi libreria… Aggiungi libreria. ZIP e selezionare il file zip salvato.

La mia libreria contiene diversi miglioramenti minori:

  • Consente di utilizzare diversi numeri di pin Arduino (tranne MOSI).
  • La stessa libreria può essere utilizzata per dispositivi di qualsiasi dimensione.
  • Vengono forniti un nuovo riempimento ombreggiato al 50% e un riempimento punteggiato (set di pixel casuali).

La libreria viene fornita come file compresso (zip) Arduino standard. Scaricalo nella cartella Download (o dove preferisci) e nell'IDE di Arduino, fai clic su Schizzo… Includi libreria… Aggiungi libreria ZIP.

In Esempi, ora troverai E-ink_ER-EPM. Ci sono 3 schizzi di esempio:

  • ER_EPM154-1R-Test: la dimostrazione originale fornita dal fornitore
  • E-ink_demo: lo schizzo sviluppato nei passaggi successivi
  • E-ink_rotate: una dimostrazione della rotazione dell'immagine.

Passaggio 5: programmarlo da soli

Sfortunatamente non c'è documentazione con il codice fornito dal fornitore, né il codice di esempio è commentato adeguatamente. Questo lo rende più difficile di quanto dovrebbe essere da usare, e lo scopo principale di questo Instructable è quello di rimediare.

Concetti basilari

Poiché un Arduino è limitato nella quantità di RAM disponibile, la libreria consente di disegnare o scrivere in piccole sezioni dello schermo alla volta, caricandole singolarmente nella memoria interna del dispositivo. Solo una volta che hai caricato tutte le porzioni che ti servono gli dici di visualizzare ciò che ha in memoria.

Queste sezioni dello schermo sono note come oggetti "Paint". Ne basta uno e per ogni sezione dello schermo ne definisci l'altezza, la larghezza e la rotazione. Al termine, lo carichi, definendo la posizione sullo schermo in cui caricarlo e se deve essere bianco e nero o rosso e bianco.

L'angolo in alto a sinistra dello schermo ha coordinate orizzontali (x) e verticali (y) (0, 0), in basso a sinistra (0, 151) e in alto a destra (151, 0).

Inizializzazione

Apri lo schizzo E-ink_demo nell'IDE di Arduino e seguilo mentre descrivo come utilizzare la libreria.

Nella parte superiore dello schizzo vedrai le seguenti linee, che sono sempre necessarie:

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

Le linee #include richiamano le librerie richieste. SPI.h è una libreria Arduino standard ma le altre fanno parte della libreria e-ink.

Definiamo i nomi per i pixel NON COLORATI (bianchi) e COLORATI (neri o rossi). (Nota per i miei concittadini europei: viene utilizzata l'ortografia americana di COLORE.)

L'EPD; line crea l'oggetto dispositivo cartaceo elettronico, su cui verrà visualizzato. Questo deve essere qui all'inizio dello schizzo per renderlo disponibile per le funzioni setup() e loop().

Se hai un display di dimensioni diverse puoi sostituire la riga EPD con:

Epd epd(LARGHEZZA, ALTEZZA);

(avendo precedentemente definito WIDTH e HEIGHT nelle istruzioni #define.)

Allo stesso modo puoi specificare numeri pin non predefiniti con:

Epd epd(WIDTH, HEIGHT, BUSY_PIN, RESET_PIN, DC_PIN, CS_PIN);

All'interno di setup() dobbiamo inizializzare il dispositivo come segue:

Serial.begin(9600)

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

(In effetti, epd. Init() non restituisce mai un errore, ma un miglioramento futuro potrebbe rilevare l'assenza di un display o uno non funzionante.)

Passaggio 6: scrittura del testo

Scrivere testo
Scrivere testo

In E-ink_demo, rivolgi la tua attenzione a loop(). Per prima cosa, puliamo il display:

epd. ClearFrame()

(Questo non è effettivamente necessario se stai per visualizzare la tua immagine.)

Prima di poter disegnare qualsiasi cosa (testo o grafica) dobbiamo creare un oggetto Paint su cui disegnare:

immagine char senza segno[1024]

Vernice vernice (immagine, 152, 18); //la larghezza dovrebbe essere il multiplo di 8

Questo riserva dello spazio (1024 byte) e lo alloca all'oggetto Paint, ceduto dalla seconda riga. Questo è configurato provvisoriamente come 152 pixel di larghezza e 18 pixel di profondità. Possiamo riconfigurarlo in seguito per il riutilizzo se necessario, ma nota: la larghezza deve essere un multiplo di 8 poiché 8 pixel sono memorizzati per byte e non possiamo dividere i byte. (In effetti lo arrotonderà se necessario, ma può essere sconcertante quando il display non ha l'aspetto che dovrebbe.

Ora dobbiamo cancellare l'oggetto di pittura su UNCOLORE (bianco), quindi nella posizione (x, y) = (22, 2) scriviamo "e-ink Demo" usando un carattere alto 16 pixel e COLORATO (per mostrare contro il Sfondo NON COLORATO.

vernice. Clear (UNCOLORE)

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

Nota che le coordinate (22, 2) sono l'angolo in alto a sinistra del primo carattere della stringa e sono 22 pixel dentro e 2 pixel in basso rispetto all'angolo in alto a sinistra dell'oggetto di pittura, non l'intero display. Il testo ha un aspetto migliore almeno un pixel in basso dalla parte superiore dell'oggetto di pittura.

Sono disponibili i seguenti caratteri:

Font8 - 5x8 pixelFont12 - 7x12 pixelFont16 - 11x16 pixelFont20 - 14x20 pixelFont24 - 17x24 pixel

Ora non ci resta che inviare l'oggetto paint ("paint") al dispositivo ("epd"):

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

SetPartialWindowBlack è un metodo che applichiamo all'oggetto epd, utilizzando l'immagine e le sue proprietà di larghezza e profondità dell'oggetto paint. Gli stiamo dicendo di scrivere questa immagine sul dispositivo a (x, y) = (0, 3). E stiamo dicendo che i pixel COLORATI devono essere neri.

Non è stato troppo difficile, vero? Proviamone un altro.

paint. Clear(COLORE);

paint. DrawStringAt(20, 2, "(Bianco su colore)", &Font12, NON COLORATO); epd. SetPartialWindowRed(paint. GetImage(), 0, 24, paint. GetWidth(), paint. GetHeight());

Riutilizziamo lo stesso oggetto di pittura e la stessa larghezza e altezza, ma questa volta ripuliamolo su COLORATO e scriviamoci una stringa NON COLORATA. E per cambiare, renderemo i pixel COLORATI rossi e li scriveremo sul dispositivo a (0, 24), appena sotto il primo.

Abbiamo scritto i due oggetti di vernice nella memoria del dispositivo ma non gli abbiamo ancora detto di visualizzarli. Lo facciamo con la seguente affermazione:

epd. DisplayFrame();

(Nello schizzo E-ink_demo in realtà lo lasciamo fino alla fine, dopo aver disegnato altre cose, ma potresti inserirlo qui se vuoi, magari seguito da delay(10000); per darti il tempo di ammirare il tuo lavoro.

Passaggio 7: tracciare linee e rettangoli

Disegnare linee e rettangoli
Disegnare linee e rettangoli

Vediamo come disegnare linee e rettangoli. Useremo lo stesso oggetto di pittura, ma dobbiamo riconfigurarlo come 40 pixel di larghezza e 36 pixel di altezza. Lo cancelleremo in UNCOLOR.

paint. SetWidth(40);

paint. SetHeight(36); paint. Clear(UNCOLORE);

Disegneremo un rettangolo (COLORE) con l'angolo in alto a sinistra (5, 3) e in basso a destra (35, 33), relativo all'oggetto vernice, come al solito. Disegneremo anche le sue diagonali come linee da (5, 3) a (35, 33) e da (35, 3) a (5, 33). Infine, scriveremo l'intero oggetto di pittura (rosso) sullo schermo in (32, 42).

//RIGA SUPERIORE:

// Vernice rettangolare. Clear(UNCOLORED); paint. DrawRectangle(5, 3, 35, 33, COLORED;) paint. DrawLine(5, 3, 35, 33, COLORED); paint. DrawLine(35, 3, 5, 33, COLORATO); epd. SetPartialWindowRed(paint. GetImage(), 32, 42, paint. GetWidth(), paint. GetHeight());

La libreria, così com'è, forniva anche un rettangolo pieno, ma ehi, ne volevo uno ombreggiato, quindi ho aggiunto un nuovo metodo. Faremo altri due rettangoli, uno sfumato e uno riempito, e li collocheremo a destra del primo, alternandoli nero e rosso.

// Vernice ombreggiata rettangolo. Clear(UNCOLORED); paint. DrawShadedRectangle(5, 3, 35, 33); epd. SetPartialWindowBlack(paint. GetImage(), 72, 42, paint. GetWidth(), paint. GetHeight()); // Rettangolo pieno paint. Clear(UNCOLORED); paint. DrawFilledRectangle(5, 3, 35, 33, COLORATO); epd. SetPartialWindowRed(paint. GetImage(), 112, 42, paint. GetWidth(), paint. GetHeight());

Passaggio 8: disegnare cerchi

Cerchi di disegno
Cerchi di disegno

I cerchi sono altrettanto facili da disegnare. Invece delle coordinate di due angoli, dobbiamo fornire le coordinate del centro e del raggio. Cancelleremo l'oggetto vernice, quindi metteremo un cerchio a (20, 15) (relativo all'oggetto vernice) e raggio 15. E ripetiamo per un cerchio ombreggiato e uno pieno.

//SECONDA FILA

// Pittura circolare. Clear(UNCOLORED); paint. DrawCircle(20, 18, 15, COLORATO); epd. SetPartialWindowBlack(paint. GetImage(), 32, 78, paint. GetWidth(), paint. GetHeight()); // Vernice cerchio ombreggiato. Clear(UNCOLORED); paint. DrawShadedCircle(20, 18, 15); epd. SetPartialWindowRed(paint. GetImage(), 72, 78, paint. GetWidth(), paint. GetHeight()); //Pittura cerchio pieno. Clear(UNCOLORED); paint. DrawFilledCircle(20, 18, 15, COLORATO); epd. SetPartialWindowBlack(paint. GetImage(), 112, 78, paint. GetWidth(), paint. GetHeight());

Passaggio 9: NON COLORATO su sfondo COLORATO

NON COLORATO su sfondo COLORATO
NON COLORATO su sfondo COLORATO

Stiamo diventando famosi qui! Quindi, mentre siamo su un rotolo, facciamo altri 3 cerchi su una riga in basso, questa volta NON COLORATI su un oggetto di pittura COLORATO, come abbiamo fatto con la seconda riga di testo.

//TERZA FILA

// Pittura circolare. Clear(COLORED); paint. DrawCircle(20, 18, 15, NON COLORATO); epd. SetPartialWindowRed(paint. GetImage(), 32, 114, paint. GetWidth(), paint. GetHeight()); // Vernice Shaded Circle. Vernice Clear(COLORED). DrawShadedCircle(20, 18, 15); epd. SetPartialWindowBlack(paint. GetImage(), 72, 114, paint. GetWidth(), paint. GetHeight()); //Pittura cerchio pieno. Clear(COLORED); paint. DrawFilledCircle(20, 18, 15, NON COLORATO); epd. SetPartialWindowRed(paint. GetImage(), 112, 114, paint. GetWidth(), paint. GetHeight());

Oltre al riempimento sfumato, c'è anche un riempimento maculato, che colora i pixel casuali. Quindi al posto del cerchio ombreggiato sopra avremmo potuto mettere

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

Il parametro finale (25) è la densità, cioè la percentuale di pixel che devono essere colorati. Se omesso, si assume il 50%.

C'è anche un DrawSpeckledRectangle, con un parametro aggiuntivo facoltativo che specifica la densità.

Passaggio 10: rotazione

Rotazione
Rotazione
Rotazione
Rotazione

Qualsiasi cosa possiamo disegnare, possiamo ruotarla di 90, 180 o 270 gradi. (Contiamo le rotazioni in senso orario.)

Possiamo applicare una proprietà ROTATE a un oggetto di pittura, ma è importante capire che non è l'oggetto di pittura che viene ruotato ma tutto ciò che ci scrivi. Quindi, se vuoi un testo verticale, devi configurare il tuo oggetto di pittura lungo e sottile in una direzione verticale anziché orizzontalmente.

Quindi, se vuoi che il tuo testo sia ruotato in senso orario di 90 gradi in modo che venga letto dall'alto verso il basso (invece che da sinistra a destra), l'angolo in alto a destra dell'oggetto di pittura sarà (0, 0) ai fini di tutto ciò che scrivi o disegnaci dentro, con x misurato da quell'angolo in giù, e y da quell'angolo verso sinistra.

Probabilmente avrai notato che abbiamo lasciato uno spazio lungo il lato sinistro del display. Quindi scriviamo del testo ruotato di 270 gradi, cioè leggendo dal basso verso l'alto. Questo metterà (0, 0) nell'angolo in basso a sinistra.

Nota che comunque ruoti un oggetto di pittura, la rotazione si applica solo quando disegni i pixel su di esso. Quando arrivi a scriverlo sul dispositivo sono ancora le coordinate dell'angolo in alto a sinistra che devi dare a SetPartialWindow.

Quindi, per ricapitolare, configuriamo il nostro oggetto paint in modo che abbia larghezza 32 e altezza 110 e gli daremo una proprietà ROTATE_270. Non che dobbiamo fare tutto questo prima di scrivere o disegnare qualcosa.

paint. SetWidth(32);

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

Lo cancelleremo in COLORATO e ci scriveremo una stringa NON COLORATA, quindi lo posizioneremo su (0, 42). (Questo è l'angolo in alto a sinistra, ricorda. Dimentica qualsiasi rotazione dei pixel al suo interno.)

paint. Clear(COLORE); paint. DrawStringAt(8, 8, "Sideways!", &Font16, NON COLORATO); epd. SetPartialWindowBlack(paint. GetImage(), 0, 42, paint. GetWidth(), paint. GetHeight());

Infine, dobbiamo dire al dispositivo di visualizzare tutti i pixel che gli abbiamo assegnato. E se non vogliamo cambiarlo per un po' e vogliamo risparmiare la carica della batteria, possiamo metterlo in sospensione, e perché non mettere in sospensione anche Arduino, per essere svegliato quando è il momento di prendere e visualizzare un altro misurazione.

epd. DisplayFrame();

epd. Sleep();

Un secondo schizzo di esempio mostra la rotazione di 90, 180 e 270 gradi. Ormai dovresti essere in grado di seguirlo da solo.

Passaggio 11: disegno di bitmap

Bitmap di disegno
Bitmap di disegno

La demo del venditore include la visualizzazione di un paio di immagini bitmap. Questi sono facili da creare utilizzando uno strumento che può essere scaricato da

www.buydisplay.com/image2lcd

Si presenta come un file zip contenente un file di installazione.exe e un file di testo contenente una chiave di licenza. Espandilo, quindi fai doppio clic sul file.exe per installarlo.

Chiaramente, ci sono restrizioni abbastanza severe su ciò che puoi visualizzare poiché i pixel E-ink possono essere solo accesi o spenti e quindi non possono rappresentare i livelli di grigio. Ma è possibile sovrapporre un oggetto di pittura rettangolare su un'immagine. Potresti voler visualizzare un logo, simboli o testo fisso in un carattere fantasioso, su cui potresti sovrapporre testo variabile o grafica come una barra o un grafico a torta, magari indicando qualcosa come un livello di liquido.

Puoi creare la tua immagine con qualsiasi software di disegno con cui hai familiarità, oppure puoi scansionare uno schizzo o un disegno, ma in entrambi i casi devi essere in grado di ridurlo a soli 2 livelli. Salvalo come.gif,-j.webp

Avvia Image2Lcd. Nella parte inferiore, vedrai una scheda Registrati. Fare clic su questo e inserire il codice di registrazione fornito in un file di testo nel file zip scaricato. Questo rimuoverà una sovrapposizione sull'immagine.

In Image2Lcd, apri il file immagine. Nel riquadro di sinistra, assicurati di avere

  • Tipo di file di output: array C
  • Modalità di scansione: scansione orizzontale
  • BitPixel: Monocromatico
  • Larghezza e altezza massime: le dimensioni del display e
  • Includi dati testa deve essere deselezionato.

Fare clic sul pulsante accanto a Larghezza massima e Altezza per elaborare. Verrà visualizzato il risultato dell'elaborazione. Potrebbe essere necessario regolare i cursori Luminosità e Contrasto per ottenere i migliori risultati.

Fai clic sulla casella di controllo Inverti colore sopra il cursore Luminosità, rendendola un'immagine negativa, che per qualche motivo è necessaria, quindi fai clic su Salva per salvarla come imagedata.cpp nella cartella contenente il tuo schizzo Arduino. La prossima volta che aprirai lo schizzo con l'IDE Arduino dovresti vederlo come una nuova scheda.

Passaggio 12: visualizzazione della bitmap

Visualizzazione della bitmap
Visualizzazione della bitmap

Nel file principale del tuo schizzo Arduino, subito dopo le righe #include in alto, inserisci:

#include "imagedata.h"

Crea una nuova scheda (fai clic sulla freccia giù alla fine della riga delle schede) e chiamala imagedata.h. Inserisci le seguenti 2 righe al suo interno:

extern const unsigned char IMAGE_BLACK;

extern const unsigned char IMAGE_RED;

Nel tuo file imagedata.cpp, la prima riga inizierà con

const unsigned char gImage_image[2888] = {

(Il numero tra parentesi quadre sarà diverso se non si utilizza il display da 1,54 pollici). Sostituiscilo con

const unsigned char IMAGE_BLACK PROGMEM = {

Questo è per un'immagine in bianco e nero. Se lo vuoi rosso e bianco, cambialo in

const unsigned char IMAGE_RED PROGMEM = {

Appena prima di questa riga, aggiungi

#includere

#include "imagedata.h"

Ora sei pronto per visualizzare la tua immagine. In loop() nel tuo file principale, aggiungi

epd. ClearFrame();

epd. DisplayFrame(IMAGE_BLACK, NULL);

Oppure, se era un'immagine rossa che hai creato, la seconda riga dovrebbe essere

epd. DisplayFrame(NULL, IMAGE_RED);

Infatti è possibile creare un'immagine combinata rosso e nero convertendo separatamente le parti rosse e nere con Image2Lcd, e visualizzandole entrambe con

epd. DisplayFrame(IMAGE_BLACK, IMAGE_RED);

Tuttavia, tutti i pixel specificati sia come neri nell'immagine in bianco e nero, sia come rossi in quella rossa e bianca, risulteranno rossi.

Infine, puoi sovrapporre la tua immagine con una qualsiasi delle funzioni di testo o grafica che abbiamo appreso in precedenza. Volevo aggiungere il mio account Twitter, quindi ho aggiunto

Dipingi vernice (immagine, 20, 152); //la larghezza dovrebbe essere il multiplo di 8

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

Consigliato: