funzioni varie per GLCD ST7565

?R:
non ne capisco molto il senso, mi sembra che ci siano più dati del necessario... però se è così, come devo fare per creare il carattere "?"?
grazie ancora :wink:

dati in più non ce ne sono: 16x16pixel fa 256pixel totali, 8bit*32byte totali fa ancora 256, essendo che 1bit=1pixel, i conti tornano :slight_smile:

Per il carattere, devi trattarlo come una bitmap 5x7: disegnalo su paint in bianco e nero, salvalo in bmp 1bpp e dallo in pasto a questo programma
http://en.radzio.dxp.pl/bitmap_converter/
che ti sputerà fuori un'array di byte da usare come bitmap con la lib. Gioca un po' con le impostazioni per trovare quelle giuste per la tua lib! :slight_smile:

dancol90:

?R:
non ne capisco molto il senso, mi sembra che ci siano più dati del necessario... però se è così, come devo fare per creare il carattere "?"?
grazie ancora :wink:

dati in più non ce ne sono: 16x16pixel fa 256pixel totali, 8bit*32byte totali fa ancora 256, essendo che 1bit=1pixel, i conti tornano :slight_smile:

ahn si vero! avevo sbagliato i conti :sweat_smile:

dancol90:
Per il carattere, devi trattarlo come una bitmap 5x7: disegnalo su paint in bianco e nero, salvalo in bmp 1bpp e dallo in pasto a questo programma
Bitmap converter for mono and color LCD displays
che ti sputerà fuori un'array di byte da usare come bitmap con la lib. Gioca un po' con le impostazioni per trovare quelle giuste per la tua lib! :slight_smile:

più tardi provo, grazie mille :wink:

sembra funzionare! :slight_smile: anche se non ho sotto mano il display e quindi non posso provare...
grazie mille! :wink:

sto provando ora, sto provando tutte le combinazioni con il programma che mi hai dato, ma nessuna sembra andare bene :frowning:

?R:
sto provando ora, sto provando tutte le combinazioni con il programma che mi hai dato, ma nessuna sembra andare bene :frowning:

Prova con:

Byte orientation: Vertical
Size: Width=5, Height=7
Include size: no
Size endianness: indifferente, visto che non usi "include size"
Pixel/byte: 7

Dovrebbe funzionare :slight_smile:

funziona!! :smiley: grazie ancora! :wink:
ma perchè 7 pixel/byte?

?R:
funziona!! :smiley: grazie ancora! :wink:
ma perchè 7 pixel/byte?

Prima di tutto: ogni byte rappresenta una colonna dell'immagine.
Se è più piccola di 8pixel, la libreria usa i primi n bit del byte, con n altezza dell'immagine, ignorando i restanti (nel nostro caso, 1 solo bit non viene considerato)
Se avessimo usato 8px/byte il programma avrebbe riempito anche quei bit in eccesso con le informazione della colonna successiva, sfalsando tutto.
Nel nostro caso, avrebbe messo un pixel della seconda colonna nel primo byte, quindi nel secondo byte avrebbe messo i restanti 6,
e riempito i due bit rimanenti con i primi due pixel della terza colonna, e così via.

Mentre con 7px/byte, forziamo il programma a saltare un bit in ogni byte, permettendoci di avere le colonne allineate correttamente :slight_smile:

ma questo solo se l'immagine è piccola, o no?

?R:
ma questo solo se l'immagine è piccola, o no?

Per come è implementata la lib, si.
Se devi usare immagini più grandi, se vuoi usare quella utility ti conviene farle con altezza multipla di 8 ed usare 8px/byte!

prima però avevo provato con una immagine 74x64 con 8pixel/byte e non andava, faceva sempre una rettangolo con pixel accesi e spenti a caso, magari dopo riprovo meglio...
grazie ancora :wink:

alla fine ho risolto in qualche mniera :slight_smile:
questo è uno dei risultati:

Ciao, mi unisco alla disussione. Anche io possiedo lo stesso display, appena acquistato da robot italy, e volevo togliere il logo Adafruit standard per mettercene uno mio personalizzato.
Sto utilizzando il file dell'esempio della libreria ST7565 "st7565lcd". Ho capito che bisogna andare a modificare l'array:

// a bitmap of a 16x16 fruit icon
static unsigned char __attribute__ ((progmem)) logo16_glcd_bmp[]={
0x30, 0xf0, 0xf0, 0xf0, 0xf0, 0x30, 0xf8, 0xbe, 0x9f, 0xff, 0xf8, 0xc0, 0xc0, 0xc0, 0x80, 0x00, 
0x20, 0x3c, 0x3f, 0x3f, 0x1f, 0x19, 0x1f, 0x7b, 0xfb, 0xfe, 0xfe, 0x07, 0x07, 0x07, 0x03, 0x00, };

Ma qualsiasi cosa metto all'interno dell'array mi fa vedere sempre lo stesso logo Adafruit. Anche se cancello del tutto l'array il logo me lo visualizza sempre..... :fearful:, mi viene il dubbio che non sia memorizzato altrove. Peró tu dici che hai risolto, mi potresti spiegare come hai fatto? I dettagli sono graditi..... :slight_smile:

franhk77:
Ma qualsiasi cosa metto all'interno dell'array mi fa vedere sempre lo stesso logo Adafruit. Anche se cancello del tutto l'array il logo me lo visualizza sempre..... :fearful:, mi viene il dubbio che non sia memorizzato altrove. Peró tu dici che hai risolto, mi potresti spiegare come hai fatto? I dettagli sono graditi..... :slight_smile:

Il logo è scritto direttamente nel buffer quando questo viene dichiarato. Il buffer non è altro che un array che rappresenta tutti i pixel dello schermo, su cui la libreria lavora per poi inviare il tutto al display quando viene dato il comando di refresh. Per cambiare il logo quindi devi quindi andare a modificare la dichiarazione di st7565_buffer in ST7565.cpp, sostituendo con tutti 0x0 (per lo schermo bianco) o con i dati di un'immagine pari alla risoluzione dello schermo. L'importante è che siano in tutto esattamente 1024 elementi.

dancol90:

franhk77:
Ma qualsiasi cosa metto all'interno dell'array mi fa vedere sempre lo stesso logo Adafruit. Anche se cancello del tutto l'array il logo me lo visualizza sempre..... :fearful:, mi viene il dubbio che non sia memorizzato altrove. Peró tu dici che hai risolto, mi potresti spiegare come hai fatto? I dettagli sono graditi..... :slight_smile:

Il logo è scritto direttamente nel buffer quando questo viene dichiarato. Il buffer non è altro che un array che rappresenta tutti i pixel dello schermo, su cui la libreria lavora per poi inviare il tutto al display quando viene dato il comando di refresh. Per cambiare il logo quindi devi quindi andare a modificare la dichiarazione di st7565_buffer in ST7565.cpp, sostituendo con tutti 0x0 (per lo schermo bianco) o con i dati di un'immagine pari alla risoluzione dello schermo. L'importante è che siano in tutto esattamente 1024 elementi.

sono d'accordo, in alternativa per toglierlo proprio puoi fare un clear e display appena dopo il begin, così non apparirà più nessun logo all'inizio :wink:

uhm, come sospettavo! Ma quindi la mia nuova immagine/logo, supponiamo sia questa:

const unsigned char bnwmini [] = {
0x80, 0x00, 0x40, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x02, 0x49, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x05, 0x7B, 0x7D, 0xF7, 0xFD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x02, 0xFA, 0x17, 0xAF, 0x7F, 0xD6, 0xE8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x15, 0x4A, 0xBA, 0xF5, 0xAA, 0xB7, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xE9, 0x56, 0x6D, 0x5E, 0xF6, 0xA8, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x8A, 0xAB, 0x37, 0xD6, 0x96, 0xC0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x01, 0x22, 0x00, 0x49, 0x76, 0x07, 0x80, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x01, 0x02, 0x00, 0xC0, 0x36, 0x00, 0xC0, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x02, 0x04, 0x00, 0x40, 0x1C, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x02, 0x04, 0x00, 0x60, 0x14, 0x00, 0x40, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x02, 0x04, 0x00, 0x80, 0x3C, 0x00, 0x40, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x04, 0x04, 0x00, 0x60, 0x14, 0x00, 0x60, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x04, 0x04, 0x00, 0x40, 0x78, 0x00, 0xC0, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x04, 0x04, 0x2A, 0x20, 0x2E, 0xA8, 0x60, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x08, 0x0C, 0xB7, 0x40, 0x75, 0xFA, 0x94, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x0A, 0xA7, 0xC1, 0xB5, 0x5B, 0x55, 0xFF, 0xC2, 0xD4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x15, 0x5D, 0x75, 0xAF, 0xDD, 0xAB, 0xAB, 0x7B, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x10, 0x42, 0xAF, 0x94, 0xA4, 0x88, 0x10, 0x08, 0xA8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x02, 0x10, 0x6A, 0x82, 0x00, 0x20, 0x80, 0x02, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x20, 0x0A, 0x22, 0xA1, 0x28, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x49, 0x00, 0x03, 0x80, 0x01, 0x04, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x49, 0x51, 0x10, 0x68, 0x80, 0x00, 0x40, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x64, 0x41, 0x10, 0x10, 0x42, 0x01, 0x08, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x55, 0x25, 0x28, 0x89, 0x04, 0x00, 0x10, 0x00, 0x00, 0x24, 0x90, 0x00, 0x00, 0x00, 0x00,
0x00, 0x40, 0x4A, 0xAA, 0x40, 0x00, 0x20, 0x80, 0x42, 0x49, 0x00, 0x02, 0x10, 0x00, 0x00, 0x00,
0x00, 0x5D, 0x22, 0xAB, 0x55, 0x51, 0x00, 0x08, 0x10, 0x48, 0x24, 0x82, 0x88, 0x00, 0x00, 0x00,
0x00, 0xE5, 0x5D, 0x54, 0xAA, 0x04, 0x24, 0x22, 0x05, 0x12, 0x91, 0x24, 0x30, 0x00, 0x00, 0x00,
0x00, 0xF5, 0x55, 0xB5, 0x55, 0xE9, 0x00, 0xB4, 0xA8, 0x92, 0x14, 0x25, 0x6C, 0x00, 0x00, 0x00,
0x00, 0xCB, 0x6D, 0x56, 0xAA, 0x2A, 0x53, 0x55, 0x12, 0xAA, 0x95, 0xA5, 0xF4, 0x00, 0x00, 0x00,
0x00, 0xF5, 0x55, 0x5A, 0xAB, 0xAB, 0x51, 0xD6, 0xD5, 0x54, 0x80, 0x21, 0x68, 0x00, 0x00, 0x00,
0x01, 0xEB, 0x56, 0xD5, 0x6A, 0x54, 0xAF, 0xFB, 0x28, 0x00, 0x00, 0x0B, 0x80, 0x00, 0x00, 0x00,
0x01, 0xFA, 0xDA, 0xAB, 0x5A, 0xD6, 0xAF, 0x6D, 0x80, 0x01, 0x6F, 0xEA, 0xC0, 0x00, 0x00, 0x00,
0x01, 0xE5, 0x55, 0x6D, 0x55, 0x5A, 0xDB, 0x94, 0x05, 0xFF, 0xFF, 0xBF, 0xCC, 0x00, 0x00, 0x00,
0x01, 0x7A, 0xAA, 0xA5, 0x55, 0x55, 0x6A, 0x86, 0x7E, 0xFE, 0xFD, 0xFE, 0xF8, 0x00, 0x00, 0x00,
0x01, 0xF5, 0x55, 0x55, 0x5F, 0x2A, 0xB6, 0x06, 0xF5, 0xAB, 0xAB, 0x6B, 0x68, 0x00, 0x00, 0x00,
0x00, 0xFA, 0xAA, 0xAA, 0xBF, 0x9B, 0x57, 0xAC, 0xAF, 0x7E, 0xFF, 0x7F, 0xB0, 0x00, 0x00, 0x00,
0x01, 0xBA, 0xAA, 0xAA, 0xFF, 0xCA, 0xBB, 0xF1, 0xFA, 0xDB, 0xAB, 0xDA, 0xA8, 0x00, 0x00, 0x00,
0x00, 0xBE, 0xAA, 0xAA, 0x7F, 0xEA, 0xDA, 0xBA, 0xAF, 0x6E, 0xFE, 0xFF, 0xD0, 0x00, 0x00, 0x00,
0x01, 0xBF, 0x4A, 0xAA, 0xFF, 0xE6, 0xAD, 0xD3, 0x75, 0xDD, 0xAF, 0xB6, 0xE0, 0x00, 0x00, 0x00,
0x00, 0xFF, 0x6A, 0xAA, 0xFF, 0xF3, 0x6D, 0x55, 0xDE, 0xEF, 0xF5, 0xFF, 0x70, 0x00, 0x00, 0x00,
0x00, 0xFE, 0x2A, 0xAA, 0xFF, 0xF5, 0xB6, 0xB7, 0x6D, 0xBA, 0xBF, 0x55, 0xE0, 0x00, 0x00, 0x00,
0x00, 0x7E, 0x16, 0xAA, 0xFF, 0xF9, 0x5A, 0xDB, 0x77, 0xDF, 0xD5, 0xF6, 0xA0, 0x00, 0x00, 0x00,
0x00, 0x7C, 0x03, 0x5B, 0xFD, 0xFD, 0xB7, 0x55, 0xAD, 0x76, 0xFA, 0xBA, 0x90, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xD4, 0xFF, 0xFC, 0xDB, 0xBD, 0xEF, 0x5A, 0xAF, 0xDA, 0xC6, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x35, 0xED, 0xBF, 0x76, 0xEF, 0x73, 0xD7, 0xF5, 0x44, 0x0A, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x0F, 0xFE, 0xFF, 0x5F, 0xEB, 0x5A, 0xF5, 0x28, 0x20, 0x60, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x03, 0xFB, 0x7D, 0x62, 0x5E, 0xD5, 0x50, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01, 0xFF, 0xDF, 0x2B, 0x42, 0x50, 0x00, 0x17, 0xEF, 0xC0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xEE, 0xDF, 0x00, 0x80, 0x00, 0x17, 0xFD, 0xEF, 0xC0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xFB, 0xFE, 0x00, 0x00, 0x0B, 0xFF, 0x6F, 0x6F, 0x80, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xFF, 0x5F, 0xB7, 0x7F, 0xFF, 0x6D, 0xED, 0xAF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xF7, 0xDF, 0xFF, 0xEF, 0xFF, 0x77, 0xAF, 0xEE, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xED, 0x7F, 0xFF, 0xFF, 0xF5, 0x6D, 0x7A, 0x08, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x77, 0xFF, 0xFF, 0x00, 0x00, 0xF7, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x7B, 0xBF, 0xE0, 0x00, 0x00, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x7D, 0xBF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};

La devo mettere nello sketch al posto dell'array esistente oppure la devo inserire nel buffer del file .cpp ?

Ok, funziona.... :stuck_out_tongue_closed_eyes: Grazie!

Ora volevo sapere se é possibile utilizzare nella stessa schermata font di dimensioni diverse.

franhk77:
Ok, funziona.... :stuck_out_tongue_closed_eyes: Grazie!

Ora volevo sapere se é possibile utilizzare nella stessa schermata font di dimensioni diverse.

intendi variare la dimensione del testo? anch'io volevo provare a farlo ma penso che bisogna scrivere il codice tutti i carattari perchè non penso sia previsto dalla libreria... ma non vorrei sbagliarmi...

?R:
intendi variare la dimensione del testo? anch'io volevo provare a farlo ma penso che bisogna scrivere il codice tutti i carattari perchè non penso sia previsto dalla libreria... ma non vorrei sbagliarmi...

Esattamente! La libreria ha un unico tipo di font al suo interno. Un modo è quindi quello di modificarsi la libreria con tanta pazienza, altrimenti si possono trattare i vari caratteri di un eventuale font come bitmap e gestire dallo sketch la visualizzazione in ordine di questi in base alla stringa...in ogni caso un lavoro non da pochi minuti, ma comunque fattibile. :slight_smile:

ho un'altra domanda, sto creando un menu e volevo fare che nella riga selezionata il testo apparisse a colori invertiti, ma non vedo la possibilità di farlo con la libreria... c'è qualche modo "semplice" per fare ciò o dovrei riscrivere tutte le lettere?
grazie

?R:
ho un'altra domanda, sto creando un menu e volevo fare che nella riga selezionata il testo apparisse a colori invertiti, ma non vedo la possibilità di farlo con la libreria... c'è qualche modo "semplice" per fare ciò o dovrei riscrivere tutte le lettere?
grazie

la libreria di suo mi pare non lo faccia, ma potresti modificarla, sostituendo la funzione drawchar in ST7565.cpp con:

void ST7565::drawchar(uint8_t x, uint8_t line, char c, uint8_t color) {
  for (uint8_t i =0; i<5; i++ ) {
    st7565_buffer[x + (line*128) ] = pgm_read_byte(font+(c*5)+i) ^ (color ? 0x00 : 0xFF);
    x++;
  }

  updateBoundingBox(x, line*8, x+5, line*8 + 8);
}

se color è 0, disegna il carattere in nero su sfondo bianco (con nero intendo pixel acceso, bianco spento),
se color è 1, disegna in bianco su sfondo nero (in poche parole disegna in negativo)

non l'ho provato questo codice ma dovrebbe funzionare...sappimi dire.

Ah, ricordati di modificare la dichiarazione di drawchar anche in ST7565.h :slight_smile: