Go Down

Topic: funzioni varie per GLCD ST7565 (Read 4194 times) previous topic - next topic

dancol90


funziona!! :D grazie ancora! ;)
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  :)

ƎR

ma questo solo se l'immagine è piccola, o no?
Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

dancol90


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!

ƎR

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 ;)
Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

ƎR

alla fine ho risolto in qualche mniera :)
questo è uno dei risultati:
Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

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:
Code: [Select]

// 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..... :smiley-eek-blue:, 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..... :)

dancol90


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..... :smiley-eek-blue:, 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..... :)



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.

ƎR



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..... :smiley-eek-blue:, 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..... :)



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 ;)
Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

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

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.... :smiley-yell: Grazie!

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

ƎR


Ok, funziona.... :smiley-yell: 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...
Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

dancol90


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.  :)

Ǝ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
Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

dancol90


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:

Code: [Select]

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  :)

Ǝ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:

Code: [Select]

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  :)


bella idea! ;) grazie mille! appena lo provo ti so dire ;)
Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

Go Up