Scrivere su display e-ink 7.5 pollici

Ciao a tutti.
Ho acquistato un display e-paper da 7,5 pollici, ed il relativo modulo per il pilotaggio della Waveshare, per Raspberry PI.
Considerando che, nonostante sia per Raspberry, funziona anche per Arduino, ho provveduto al collaudo collegandolo ad un Arduino Mega seguendo le connessioni dichiarate a questo link, con l'eccezione di cambiare a livello di software il pin CS (o SS), inserendo il numero 53 sul codice, nella scheda "epdif.h".

A questo link potete scaricare la libreria. Una volta estratto il file e-Paper-master, andate nella cartella Arduino e poi cercate la cartella "epd7in5bc" (che dovrebbe risultare l'ultima).
Questo è il codice d'esempio per il mio display.

Caricandolo, viene correttamente mostrata l'immagine prevista, con il display diviso in 4 mostrando in alto a sinistra la schermata elaborata, e lasciando gli altri 3 rettangoli ai 3 colori del display (bianco, nero e rosso).

Ora, il mio obiettivo sarebbe quello di arrivare non solo se possibile a fare delle linee ad esempio (ma ancora non ho capito come fare), ma anche di scrivere semplici testi come se fosse un display LCD.
Leggendo la documentazione al primo link che vi ho inserito, sotto la scheda "Codes descriptions", se scorrete verso il basso arriverete ad un punto in cui si parla delle funzioni "Paint_DrawStringEN" e "Paint_DrawLine".
Ho provato ad inserirle nel codice, tuttavia mi restituisce l'errore "Font12 was not declared".
Tale errore viene restituito sia usando "font12", sia "Font12", sia "&font12", sia "&Font12".

Per comodità, il codice della documentazione è questo:

void Paint_DrawString_EN(UWORD Xstart, UWORD Ystart, const char * pString, sFONT* Font, UWORD Color_Foreground, UWORD Color_Background)
Parameters:
 	Xstart: X coordinate of left-top pixel of characters;
 	Ystart: Y coordinate of left-top pixel of characters;
 	pString;Pointer of string
 	Font: 5 fonts are available:
 	 	font8:5*8
 	 	font12:7*12
 	 	font16:11*16
 	 	font20:14*20
 	 	font24:17*24
 	Color_Foreground: color of string
 	Color_Background: color of background

Io ho provato a scrivere, con le varianti indicate prima, la seguente linea di codice:

Paint_DrawString_EN(0,0,"A", font12, 0x03, 0x00);  //0x03: bianco      0x00: nero

Non so se ci saranno altri errori, perchè mi fermo al font12.
Qualcuno riesce ad aiutarmi?

Grazie mille e buona serata a tutti

Leggendo la documentazione che è sul loro sito, si vede che indicano un esempio che (come mostrato nell'immagine) include i files dei font.

Vatti a guardare l'esempio per il epd2in13_V2 e scopri che dentro ci sono i font mancati ... :confused:

Piuttosto, visto che parli di modulo per Raspberry ... hai tenuto conto che la raspberry lavora a 3.3V ed Arduino a 5V ... perché, altrimenti, rischi di danneggiare il display.

Guglielmo

Il display è da 5,2 Volt
A quest'ora l'avrei già bruciato e non avrei neanche visto il codice di prova

Non ho capito.. Se intendi dire che in questo esempio l'immagine è intera, mentre nell'esempio del mio display non lo è, è normale: la divisione di 4 riquadri del display è voluta, è corretto che sia cosi
Se invece intendi dire che in questo esempio che hai citato trovo come scrivere sul display le frasi, allora non so dove guardare tra le schede

... vedo ... ti ho detto che, se ti studi tutti i files che sono in quell'esempio e come vengono richiamati, vedi che ci sono tutti i font che a te mancano (che sono quelli di default)!

Sul sito di Waveshare c'è anche un tutorial su come disegnarseli da soli di dimensioni diverse.

Guglielmo

Hai l'indirizzo web da indicarmi?

... è una pagina esterna che indicano loro inel WiKi ... QUESTA.

Ma, prima di avventurati in disegnare strani font ... hai capito come inserire già quelli di base? Perché, se non capisci quello, inutile disegnarne altri ... il meccansismo è sempre lo stesso.

Guglielmo

Io devo scrivere, non disegnare...
In ogni caso non ci ho ancora dato un occhio

Ma lo leggi quello che scrivo? ... perché IO ho capito che tu devi scrivere, mentre TU continui a non capire quello che ti dico ...

Guglielmo

P.S.: ... ed ignori anche che, su un display come quello, comunque "scrivere" è equivalente "disegnare" con una serie di pixel i caratteri di un font e che quindi un font si "disegna"con strumeti grafici.

1 Like

Si, leggo quel che scrivi: ma ti ho giá detto che non lo capisco.
Quindi perdonami se non sono al tuo livello.

... ma cosa c'è da capire? :open_mouth: ... c'è solo da studiare :roll_eyes:

Devi studiarti l'esempio che ti ho indicato .... in qull'esempio ci sono i font che a te mancano, quindi, ti studi i sorgenti, vedi come fanno ad usare i font (sono dei files.c e c'è un .h per includerli) e poi fai la stessa cosa nel tuo programma così puoi screieve le tue righe di testo.

Guglielmo

... ne sei convinto? Perché al link che TU hai messo parla di alimentazione a 3.3V e NON 5V ... dove hai trovato indicazioni che, quel display, può lavorare a 5V? Oppure stai usando un'altro display?

Guglielmo

Dietro al display stesso c'è scritta la tensione di funzionamento, oltre che esserci scritta anche nell'annuncio da cui l'ho acquistato
E ripeto: lo sketch d'esempio funziona correttamente

... allora metti il link a quest'annuncio, perché, quello che fa fede, NON sono gli annunci ma le caratteristiche fornite dal produttore. Se va a 5V è un'altro display ... quello per Raspberry NON può andare a 5V, perché, Raspberry lavora a 3.3V !

Inoltre, purtroppo, molti annunci fanno confusione tra la tensione che si può fornire sull'alimentazione e la tensione invece sopportata sui pin di I/O ... che può essere diversa.

Guglielmo

Lo ripeto... Il modulo è per Raspberry ma, come da sito ufficiale, viene utilizzato anche su Arduino: tant'è che c'è la piedinatura per Arduino stesso QUI

Il display è da 7,5 pollici e lavora a 5,2 volt, quindi è tutto corretto.
Il display è QUESTO
La shield di comunicazione è QUESTA

E ripeto, lo sketch d'esempio viene correttamente caricato e correttamente eseguito.
Poi, per quanto riguarda quel che mi dicevi qui:

Ho trovato i file che dicevi: peccato che manca sempre la funzione DrawStringAt.
Manca sia per l'esempio del mio display da 7,5 pollici, ma manca anche in quello che mi hai indicato tu: infatti, nonostante ci siano i font, se vado a scrivere nel codice:

epd.drawStringAt(10,10,"A",&Font16,UNCOLORED);

Ottengo come errore:
'class Epd' has no member named 'drawStringAt'

Qui il display con il codice d'esempio eseguito

Trovata la funzione: è nel file "epdpaint"

void Paint::DrawStringAt(int x, int y, const char* text, sFONT* font, int colored) {
    const char* p_text = text;
    unsigned int counter = 0;
    int refcolumn = x;
    
    /* Send the string character by character on EPD */
    while (*p_text != 0) {
        /* Display one character on EPD */
        DrawCharAt(refcolumn, y, *p_text, font, colored);
        /* Decrement the column position by 16 */
        refcolumn += font->Width;
        /* Point on the next character */
        p_text++;
        counter++;
    }
}

... ed io ti ripeto che ti stai sbagliando ... il sito infatti, nell'esempio che indichi, riporta la seguente frase:

We provide examples for four popular platforms: Arduino UNO, Jetson Nano, Raspberry Pi, and STM32. You can refer to the corresponding part according to the platform you use (This is a common template will be used by all types of the e-Paper, please refer to the corresponding type you have)

... ovvero, tra parentesi, ti dice chiaramente che le indicazioni sono "generiche" e che poi bisogna vedere in funzione dello specifico modello che si possiede ... ci sono quelli a 5V che puoi usare con Arduino e quelli a 3.3V per Raspberry e STM.

Poi sai che c'è ... fai come vuoi ... io t'ho messo in guardi su cosa verificare, per il resto ... fai tu.

Guglielmo

Non faccio come voglio: ho verificato e va bene anche con arduino, ci sono anche video in merito in rete!

Di emerite bojate è piena la rete ...
... devi vedere il modello ESATTO che è stampato sul display, andare nel sito di Waveshare, trovare il modello esatto e leggere LI le caratteristiche, il resto ... sono solo chiacchiere vuote, quello che fa testo è quanto dice il produttore.

Se il produttore lo da per i 5V bene, se lo da per i 3.3V ... male, prima o poi si danneggierà.

Guglielmo

Va bene, ottimo: non ripeto più di aver già verificato. Andrò di nuovo a verificare visto che insisti tanto.
Resta il problema del codice: la funzione è presente nel file sopra indicato, ma non riesco a richiamarla.
Te hai trovato il file di cui parlo?

Se NON è una funzione inclusa nella libreria, è una funzione che qualcuno ha scritto ... magari dovrai copiare la funzione nel tuo codice per poterla usare ... :roll_eyes:

Guglielmo

Ho incluso il file scrivendo

#include "epdpaint.h"

Il problema è che non so come si richiama: devo scrivere così?

Paint.DrawStringAt(10,10,"A",&Font16,UNCOLORED);

Perchè mi restituisce errore, ovvero "expected unqualified id before '.' token"
O non va bene includere il file in tal modo, e devo quindi scrivere proprio il programma nel codice stesso?