Disegnare immagini .bmp sul display lcd tft

Ciao, nel progetto che sto pian piano realizzando (Resistenza interna batteria polimeri di litio (lipo) - Hardware - Arduino Forum) sto incontrando delle difficoltà.

Per ri-prendere dimestichezza con la programmazione, stavo usando lo sketch che visualizza il logo arduino sul display e ho semplicemente aggiunto nella sd-card 3 immagini .bmp che sono queste :

Le ho prese in rete, caricate su Paint, ridotte a 80x45 pixel e sono da 2KB quindi molto meno del logo di arduino.
Purtroppo però non viene visualizzato nulla e non mi segnala nessun errore.
Non ho fatto altro che sostituire nel codice dello sketch la riga dove scrive il logo arduino cambiando il nome e mettendo quello di tutte e 3 le immagini, ma nessuna viene visualizzata. Schermo bianco...

Sapete aiutarmi?

E' banale ma sei sicuro che l'estenzione sia davvero .bmp ? a volte windows ti dice che ha un estensione quando ne ha un altra.. Poi se puoi pubblica il codice e dicci che hardware usi e magari possiamo aiutarti in maniera più sostanziale, ciao

Uso Leonardo con il display lcd tft sempre di arduino.

Il codice è questo :

// include the necessary libraries
#include <SPI.h>
#include <SD.h>
#include <TFT.h>  // Arduino LCD library

 

// pin definition for the Leonardo
#define sd_cs  8
#define lcd_cs 7
#define dc     0
#define rst    1  

TFT TFTscreen = TFT(lcd_cs, dc, rst);

// this variable represents the image to be drawn on screen
PImage logo;


void setup() {
  // initialize the GLCD and show a message
  // asking the user to open the serial line
  TFTscreen.begin();
  TFTscreen.background(255, 255, 255);

  TFTscreen.stroke(255,0,0);
  TFTscreen.println();
  TFTscreen.println("Arduino prove lettura A0 A1");
  TFTscreen.stroke(255,0l, 0);
  TFTscreen.println("Open serial monitor");
  TFTscreen.println("to run the sketch");

  // initialize the serial port: it will be used to 
  // print some diagnostic info  
  Serial.begin(9600);
  // while (!Serial) {};
  delay (3000);

  // clear the GLCD screen before starting
  TFTscreen.background(255, 255, 255);
  
  // try to access the SD card. If that fails (e.g.
  // no card present), the setup process will stop.
  Serial.print("Initializing SD card...");
  if (!SD.begin(sd_cs)) {
    Serial.println("failed!");
    return;
  }
  Serial.println("OK!");
  
  // initialize and clear the GLCD screen
  TFTscreen.begin();
  TFTscreen.background(255, 255, 255);

  // now that the SD card can be access, try to load the
  // image file.
  logo = TFTscreen.loadImage("arduino.bmp");
  if (!logo.isValid()) {
    Serial.println("error while loading arduino.bmp");
  }
}

void loop() {
  // don't do anything if the image wasn't loaded correctly.
  if (logo.isValid() == false) {
    return;
  }
  
  Serial.println("drawing image");

  // get a random location where to draw the image.
  // To avoid the image to be draw outside the screen,
  // take into account the image size.
  //int x = random(TFTscreen.width() - logo.width());
  //int y = random(TFTscreen.height() - logo.height());
  
  int x = random(1,128);
  int y = random(1,160);

  // draw the image to the screen
  TFTscreen.image(logo, x, y);

  // wait a little bit before drawing again
  delay(1500);
  TFTscreen.background(255, 255, 255);
}

Nella riga logo = TFTscreen.loadImage("arduino.bmp"); vado a sostituire il file . Quando metto arduino.bmp questao viene visualizzato, quando metto un altro file no.
Non ti saprei dire se è un vero .bmp ma credo proprio di si : l'estensione è corretta. Di più non saprei. Ho espressamente detto a Paint di salvarla come bitmap

I file che hai allegato sono con estensione .jpg.

Duplica arduino.bmp, poi prova a modificare quello con paint. Quel logo è 48x48 per 6966 byte

Usa GIMP.

Fatta la rinomina ma non funziona neanche così. Sempre schermo bianco.
A me esplora risorse dice che sono bitmap. Forse risultano jpeg perchè caricate su picasa. Potrebbe essere?

Proverò anche GIMP ma non mi ci ero mai trovato bene

mgaproduction:
Fatta la rinomina ma non funziona neanche così. Sempre schermo bianco.
A me esplora risorse dice che sono bitmap. Forse risultano jpeg perchè caricate su picasa. Potrebbe essere?

Non so. Io ho solo cliccato su una di quelle immagini e sono Jpeg.

Proverò anche GIMP ma non mi ci ero mai trovato bene

Usa un qualunque programma di tuo gradimento. Ho suggerito GIMP perché è gratuito e completo.

Gimp non mi da la possibilità di salvare in .bmp
A parte questa cosa che mi sembra assurda, la domanda ora è : Arduino può usare solo foto .bmp o anche .jpg o altre estensioni?

mgaproduction:
Gimp non mi da la possibilità di salvare in .bmp
A parte questa cosa che mi sembra assurda, la domanda ora è : Arduino può usare solo foto .bmp o anche .jpg o altre estensioni?

Non dipende dalle estensioni ma del modo come viene memorizzato l' immagine.
bmp ha 3 valori di rosso verde blu per ogni pixel, mentre gli altri modi di memmorizzare immagini li elaborano per diminuire lo spazio neccessario.
Per visualizzare un immagine memorizzata in formato jpg devi decompresarla. Arduino non ha la memoria e il codice per farlo.

Ciao Uwe

mgaproduction:
Gimp non mi da la possibilità di salvare in .bmp
A parte questa cosa che mi sembra assurda, la domanda ora è : Arduino può usare solo foto .bmp o anche .jpg o altre estensioni?

Il formato bildmapp non é compresso come altri formati per esempio GIF o jpg. Per questo Arduino riesce a gestirlo.
Ciao Uwe

Supponevo che non potesse proprio per i motivi che hai esposto.
Quindi foto solo .bmp.

Non che voglia fare chissà quali cose; mi servono giusto solo dei simboletti come quelli di cui sopra.

Ora devo quindi però cercare di capire perchè quelle foto non me le visualizza.
Vi posto qui il link di dropbox Dropbox - Arduino - Simplify your life dove ci sono le foto che sto usando. Qualcuno riesce per caso a scoprire che cos'hanno che non va? Ce ne sono 6 ; ovviamente quelle che uso sono quelle con le dimensioni più piccole.

il nome ?
prova 8 caratteri

mgaproduction:
Fatta la rinomina ma non funziona neanche così. Sempre schermo bianco.

Cioè?
Scusa ma io intendo farti fare la cosidetta prova dello "scemo" (non rivolto a te, giuro) :grin:
Se il demo funziona con arduino.bmp di 48x48, allora fatti una copia di backup di quel file, poi modifichi arduino.bmp con paint incollandoci una parte del tuo disegno. Se così funziona, allora può essere un problema di dimensioni (ma non credo) oppure del nome del file quando lo cambi.
Se invece non funziona allora paint modifica in qualche modo il file bmp che non è più come prima.
Ti allego file arduino.bmp modificato con paint. (win Xp)

P.S. tra l'altro le tue img da 80x45 affermi siano 2K, mentre il arduino.bmp è circa 7K ma è solo 48x48, come fa ad essere più grosso? Se passi da un gif, quello che diventa un bmp allora è a 256 colori e non a 24milioni di colori (profondità colore).

arduino.bmp (6.8 KB)

mgaproduction:
Gimp non mi da la possibilità di salvare in .bmp
A parte questa cosa che mi sembra assurda,

Non te ne offendere, ma non sai usare il programma. Apri un qualunque file JPG, poi clicchi su "File/Esporta come.." e scegli il nome e dai l'estensione .bmp e GIMP te lo salva in automatico in quel formato. Alternativamente, puoi solo mettere il nome e poi scegliere dal menu a tendina più sotto il formato con cui vuoi salvare.

sarebbe stato assurdo che un programma grafico non salvasse nel formato piu' comune del mondo :slight_smile:

:wink:

nid69ita:

mgaproduction:
Fatta la rinomina ma non funziona neanche così. Sempre schermo bianco.

Cioè?
Scusa ma io intendo farti fare la cosidetta prova dello "scemo" (non rivolto a te, giuro) :grin:
Se il demo funziona con arduino.bmp di 48x48, allora fatti una copia di backup di quel file, poi modifichi arduino.bmp con paint incollandoci una parte del tuo disegno. Se così funziona, allora può essere un problema di dimensioni (ma non credo) oppure del nome del file quando lo cambi.
Se invece non funziona allora paint modifica in qualche modo il file bmp che non è più come prima.
Ti allego file arduino.bmp modificato con paint. (win Xp)

P.S. tra l'altro le tue img da 80x45 affermi siano 2K, mentre il arduino.bmp è circa 7K ma è solo 48x48, come fa ad essere più grosso? Se passi da un gif, quello che diventa un bmp allora è a 256 colori e non a 24milioni di colori (profondità colore).

Con la foto che mi hai mandato funziona benissimo e ti ringrazio molto.
Per quanto riguarda Gimp, ho scritto anche io che mi sembrava assurdo ma ho anche scritto che non mi ci sono mai trovato un granchè...

In ogni caso ho trovato la soluzione che spero quindi possa essere di aiuto a molti : con PAINT basta fare un salva come .bmp a 24 bit di profondità colore e funziona.

Ora mi rimetto in marcia per cercare di andare avanti con lo sketch :blush:

Un grazie a tutti davvero e se non riesco di nuovo in qualcosa chiederò di nuovo aiuto

Che non ti ci trovi bene con la sua interfaccia è ben diverso dal dire che non lo può fare:

Gimp non mi da la possibilità di salvare in .bmp

Tu questo hai scritto, non io :wink:

Lo so quello che ho scritto :slight_smile:
Ma ho anche scritto che mi sembrava assurdo non potesse farlo e in effetti lo fa e ho anche scritto che con quel sw io non mi ci trovo. Quella funziona in tutti i sw del genere, in effetti, è nel "salva con nome" mentre con Gimp devi andartela a trovare da un'altra parte...che è assolutamente legittima...ma è un pò "fuori dal comune".
Tutto li :slight_smile:
In ogni caso, l'importante è che Gimp lo faccia ma soprattutto che io abbia risolto il problema e di quetso vi ringrazio tutti :wink: