Go Down

Topic: Problème d'affichage .bmp sur ST7735 (Read 114 times) previous topic - next topic

Enricobrancato

Bonjour,
je viens à vous car je planche depuis pas mal de temps sur une interface pour une caisse à outils automatisée. Celle ci commencerait par un petit text sur la 1ère page suivit d'une page ou seront affichées les valeurs de mon capteur DHT22 avec le logo de mon entreprise dans un coins de l'écran.

j'ai déjà réussis à tout configurer... Pas si mal pour un débutant mais je ne cache pas que j'y ai passé beaucoups de temps mais c'est très gratifiant quand cela prend forme..

La 1ère page de mon affichage est ok l'affichage de mon DHT22 mais je n'arrive pas à y afficher mon logo.

J'ai fais un programme avec les librairie <SD.h> <SPI.h> et <TFT.h> pas de soucis ,j'arrive à afficher ce logo depuis un arduino Mega sur un ST7735 carte SD incluse, mais je n'arrive pas à afficher les valeures de mon DHT11.




Des que j'insert   PImage logo; j'ai 'PImage does not a name type qui apparaît lors de la compilation.
ayant les mêmes librairies dans mes 2 programmes je n'arrive pas à comprendre pourquoi cela fonctionne dans 1 mais pas dans l'autre..!?

Inutile de vous précisez que j'ai plus ou moins tout essayé pendant plusieurs jours mais je n'arrive pas à passer ce cap malgré de nombreuses recherches sur la toile..
 
Code: [Select]
//Librairies>>

#include <SPI.h>
#include <SD.h>

//------------------BME280--------->

#include <Wire.h>
#include <Adafruit_BME280.h>   // include Adafruit BME280 sensor library
#define BME280_I2C_ADDRESS  0x77

Adafruit_BME280  bme280;

//-----------------ST7735---------->


const int SD_CS   = 4;
const int TFT_CS  = 10;
const int TFT_DC  = 9;
const int TFT_RST = 8;

#include <Adafruit_GFX.h>      // include Adafruit graphics library
#include <Adafruit_ST7735.h>  // include Adafruit ST7735 TFT library

// initialize ST7735 TFT library
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);

PImage logo;                 //Variable du LOGO zuglogo7
PImage logo1;                //Variable du LOGO1 micro zug


 
void setup()
{

//---Initialisation du TFT------>

  tft.initR(INITR_BLACKTAB);     // initialize a ST7735S chip, black tab
  tft.fillScreen(ST7735_BLACK);
  tft.setRotation(1);           // Rotation de l'écran paysage

//---Initialisation du moniteur série à 115200 bauds

Serial.begin(115200);
 Serial.print(F("Initialisation du moniteur série...ok   "));

//Initialisation de la varte SD------>

Serial.print(F("Initialisation SD card..."));
  if (!SD.begin(SD_CS))
   {
    Serial.println(F("failed!"));
    return;
   }
    Serial.println(F("  OK!"));
  delay (500);




//void drawbitmap(uint8_t x, uint8_t y, const uint8_t *bitmap, uint8_t w, uint8_t h, uint8_t color);

//delay(5000);





tft.fillScreen(ST7735_BLACK);
 tft.drawRect(0,0,160,128,ST77XX_BLUE);
  tft.drawRect(120,88,30,30,ST77XX_BLUE);
   tft.setTextColor(ST7735_RED, ST7735_BLACK);

tft.println(                             );
 tft.println(F("                         "));
  tft.println(F("    Arduino TFT Bitmap   "));
   tft.println(F("            par          "));

tft.setTextColor(ST7735_WHITE);
 tft.println(F("                         "));
  tft.setTextSize(1); //taille des caracteres
   tft.println(F("  xxx@gmail.com "));

tft.println(F("                         "));
 tft.setTextColor(ST7735_BLUE);
  tft.println(F("         Ouverture       "));
   tft.println(F("     du Moniteur serie   "));
    tft.println(F("                         "));
     tft.println(F("                         "));
      tft.println(F("                         "));
       tft.println(F("    Lancement de la    "));
        tft.println(F("    procedure dans     "));
         tft.println(F("                         "));

 //---Compte à rebour initialisation--->>

tft.setTextSize(2); //taille des caracteres
 tft.setTextColor(ST7735_RED);
  tft.setCursor(130, 97);
   tft.print("5");
delay (1000);

tft.setTextColor(ST7735_BLACK);
 tft.setCursor(130, 97);
  tft.print("5");
   tft.setTextColor(ST7735_RED);
    tft.setCursor(130, 97);
     tft.print("4");
  delay (1000);
 
tft.setTextColor(ST7735_BLACK);
 tft.setCursor(130, 97);
  tft.print("4");
   tft.setTextColor(ST7735_RED);
    tft.setCursor(130, 97);
     tft.print("3");
  delay (1000);
 
tft.setTextColor(ST7735_BLACK);
 tft.setCursor(130, 97);
  tft.print("3");
   tft.setTextColor(ST7735_RED);
    tft.setCursor(130, 97);
     tft.print("2");;
  delay (1000);
tft.setTextColor(ST7735_BLACK);
 tft.setCursor(130, 97);
  tft.print("2");
   tft.setTextColor(ST7735_RED);
    tft.setCursor(130, 97);
     tft.print("1");
  delay (750);


//---Initialisation du BME280------>

 
  if( bme280.begin(BME280_I2C_ADDRESS) == 0 )
  {  // connection error or device address wrong!
   
  tft.setTextColor(ST7735_RED, ST7735_BLACK);   // set text color to red and black background
   tft.setTextSize(2);         // text size = 2
    tft.setCursor(8, 76);       // move cursor to position (5, 76) pixel
     tft.print("Connection");
      tft.setCursor(35, 100);     // move cursor to position (35, 100) pixel
       tft.print("Error");
  while(1);  // stay here
 }
 
tft.fillScreen(ST7735_BLACK);
 tft.setTextSize(1);


//---Initialisation des affichages statiques------>
 
 
  tft.setTextColor(ST7735_RED, ST7735_BLACK);     // set text color to red and black background
   tft.setCursor(5,7);  tft.print("TEMPERATURE =");             // move cursor to position (25, 39) pixel
   
   
   tft.setTextColor(ST7735_CYAN, ST7735_BLACK); 
    tft.setCursor(5,43); tft.print("HUMIDITE=");         
   
 
  tft.setTextColor(ST7735_GREEN, ST7735_BLACK); 
   tft.setCursor(5, 79);  tft.print("PRESION ATMOS. =");       
   
    tft.setTextSize(2);           

tft.drawRect(0,0,160,128,ST77XX_BLUE);

 
}
void loop()
{
  char _buffer[8];
  // read temperature, humidity and pressure from the BME280 sensor
  float temp = bme280.readTemperature();    // get temperature in °C
  float humi = bme280.readHumidity();       // get humidity in rH%
  float pres = bme280.readPressure();       // get pressure in Pa

  // affichage de la température(en °C)
 
  if(temp < 0)    // if temperature < 0
    sprintf( _buffer, "-%02u.%02u", (int)abs(temp), (int)(abs(temp) * 100) % 100 );
  else            // temperature >= 0
    sprintf( _buffer, " %02u.%02u", (int)temp, (int)(temp * 100) % 100 );
 
  tft.setTextColor(ST7735_YELLOW, ST7735_BLACK);  // set text color to yellow and black background
   tft.setCursor(0, 20); tft.print(_buffer);//Affiche la température à 1, 20
    tft.drawCircle(78, 22, 2, ST7735_YELLOW);  // print degree symbol ( ° )
     tft.setCursor(85, 22); tft.print("C");//print C de celsius a 85,20
 
  // 2: print humidity
  sprintf( _buffer, "%02u.%02u %%", (int)humi, (int)(humi * 100) % 100 );
 
   tft.setTextColor(ST7735_MAGENTA, ST7735_BLACK);  // set text color to magenta and black background
    tft.setCursor(15,58); tft.print(_buffer);
   
 
  // 3: print pressure (in hPa)
  sprintf( _buffer, "%04u.%02u", (int)(pres/100), (int)((uint32_t)pres % 100) );
 
   tft.setTextColor(0xFD00, ST7735_BLACK);  // set text color to orange and black background
    tft.setCursor(15, 92);tft.print(_buffer); //Print pression
     tft.setCursor(103, 92);tft.print("hPa");
     
 
  delay(1000);    // wait a second
   
}
 
 



Voici l'erreur que j'obtient

'PImage' does not name a type



A savoir que si je re-compile le tout mais sans la déclaration de PImage logo, tout est ok..


Merci d'avance pour vos lumières..[/code]

hbachetti

Le problème est que la classe PImage fait partie d'une autre librairie : TFTLibrary qui est une surcouche de la librairie Adafruit ST7735.

Linux is like a wigwam: no Windows, no Gates, and an Apache inside ...

Enricobrancato

Merci à toi pour ta réponse je vois mieux le soucis, je me doutais bien de quelque chose comme ça, pas toujours facile de faire son chemin parmi toutes ces librairies et leurs subtilités.. Mais j'y arriverai c'est une question de temps et au début, faut pas le compter le temps... :o 


J'ai beau regarder dans les exemples de la librairie  <Adafruit_ST7735.h>  je n'arrive pas à trouver une fonction similaire, qui puisse me permettre d'afficher une image .bmp.. ou autre format..

STP, connaîtrais tu l'équivalent pour cette librairie!?

hbachetti

Il n'y a pas d'équivalent à la fonction loadImage() dans la libriarie AdaFruit.
Pourquoi ne pas utiliser TFTLibrary ?
Linux is like a wigwam: no Windows, no Gates, and an Apache inside ...

Enricobrancato

je pense que tu parles de cette librairie #include <TFT.h>

J'essay de ré-écrire mon code autour de cette librairie j'arrive à tout faire mais
 j'en suis à l'affichage du DHT22 et ca me pose un peut de problème..

j'ai bien quelque chose qui s'affiche mais ca part en vrille et finalement je n'ai qu'un gros trait..

voici mon code peut être seras tu en mesure de me donner une piste..

Code: [Select]
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>


#define BME280_I2C_ADDRESS  0x77

Adafruit_BME280  bme280;

#include <SD.h>
#include <TFT.h>  // Arduino LCD library

const int sd_cs = 4;
const int lcd_cs  = 10;
const int dc      = 9;
const int  rst     = 8;

TFT TFTscreen = TFT(lcd_cs, dc, rst);
PImage logo;                 //Variable du LOGO zuglogo7
PImage logo1;                //Variable du LOGO1 micro zug


void setup() {
  //---Initialisation du moniteur série----->

Serial.begin(9600);
  while (!Serial) {

//---Initialisation de l'écran TFT----->
  }
TFTscreen.begin();
 TFTscreen.background(0, 0, 0);

//---Page de lancement------>

Serial.print(F("Initialisation de l'ecran TFT..."));
TFTscreen.stroke(255, 0, 0);
 
TFTscreen.rect(0,0,TFTscreen.width(),128);
TFTscreen.rect(120,88,30,30);

TFTscreen.stroke(255, 0, 0);
  TFTscreen.println(                             );
  TFTscreen.println(F("                         "));
  TFTscreen.println(F("    Arduino TFT Bitmap   "));
  TFTscreen.println(F("            par          "));
  TFTscreen.stroke(255, 255, 255);
  TFTscreen.println(F("                         "));
  TFTscreen.setTextSize(1); //taille des caracteres
  TFTscreen.println(F("  e.brancato06@gmail.com "));
  TFTscreen.println(F("                         "));
  TFTscreen.stroke(255, 0, 0);
  TFTscreen.println(F("         Ouverture       "));
  TFTscreen.println(F("     du Moniteur serie   "));
  TFTscreen.println(F("                         "));
  TFTscreen.println(F("                         "));
  TFTscreen.println(F("                         "));
  TFTscreen.println(F("    Lancement de la    "));
  TFTscreen.println(F("    procedure dans     "));
  TFTscreen.println(F("                         "));
delay (2000);

//---Compte à rebour initialisation--->>

TFTscreen.setTextSize(2);
 TFTscreen.stroke(0, 0, 255);
 TFTscreen.text("5", 130, 97);
delay (1000);
 TFTscreen.stroke(0,0,0);
  TFTscreen.text("5", 130, 97);
   TFTscreen.stroke(0, 0, 255); //couleur des caracteres
    TFTscreen.text("4", 130, 97);
  delay (1000);
TFTscreen.stroke(0,0,0);
 TFTscreen.text("4", 130, 97);
  TFTscreen.stroke(0, 0, 255); //couleur des caracteres
    TFTscreen.text("3", 130, 97);
  delay (1000);
  TFTscreen.stroke(0,0,0);
   TFTscreen.text("3", 130, 97);
    TFTscreen.stroke(0, 0, 255);
     TFTscreen.text("2", 130, 97);
  delay (1000);
  TFTscreen.stroke(0,0,0);
   TFTscreen.text("2", 130, 97);
   TFTscreen.stroke(0, 0, 255);
     TFTscreen.text("1", 130, 97);
  delay (1000);


//Initialisation de la carte SD---->

  Serial.print(F("Initialisation SD card..."));
  if (!SD.begin(sd_cs))
   {
    Serial.println(F("failed!"));
    return;
  }
    Serial.println(F("OK!"));
  delay (500);
 
 TFTscreen.background(255, 255, 255);

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

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

  Serial.println(F("drawing image"));

int x = random(TFTscreen.width() - logo.width());
  int y = random(TFTscreen.height() - logo.height());

  TFTscreen.image(logo, x, 10);
delay (100);


TFTscreen.setTextSize(4);    //Cadre
 TFTscreen.stroke(255, 0, 0);
  TFTscreen.rect(1,1,158,126);
 
 TFTscreen.setTextSize(2);
  TFTscreen.stroke(255, 0, 0);
   TFTscreen.text("Willkommen!",20, 76);
delay (1000);
 
 TFTscreen.setTextSize(3);
  TFTscreen.text("Enrico",30, 95);
delay (1000);

 TFTscreen.background(255, 255, 255);

//---Interface finale------>>

 TFTscreen.noFill();
  TFTscreen.fill(0,0,0);
   TFTscreen.rect(0,0,160,128);
    TFTscreen.fill(255,255,255);
     TFTscreen.image(logo1,117, 99);  //microLogo


if( bme280.begin(BME280_I2C_ADDRESS) == 0 )
  {  // connection error or device address wrong!
   
  TFTscreen.fill(0,0,0);
   TFTscreen.setTextSize(2);        // text size = 2
    TFTscreen.text("connection",8, 76);
     TFTscreen.text("Erreur",35, 100);
  while(1);  // stay here
}

TFTscreen.background(255, 255, 255);

TFTscreen.noFill();
  TFTscreen.fill(0,0,0);
   TFTscreen.rect(0,0,160,128);
    TFTscreen.fill(255,255,255);
     TFTscreen.image(logo1,117, 99);  //microLogo

}




void loop() {
 char _buffer[8];
  // read temperature, humidity and pressure from the BME280 sensor
  float temp = bme280.readTemperature();    // get temperature in °C
  float humi = bme280.readHumidity();       // get humidity in rH%
  float pres = bme280.readPressure();       // get pressure in Pa

float var = temp;
 // affichage de la température(en °C)
 
  if(temp < 0)    // if temperature < 0
    sprintf( _buffer, "-%02u.%02u", (int)abs(temp), (int)(abs(temp) * 100) % 100 );
  else            // temperature >= 0
    sprintf( _buffer, " %02u.%02u", (int)temp, (int)(temp * 100) % 100 );


   TFTscreen.background(255, 255, 255);
   
   TFTscreen.text( 'temp' ,0, 20);
 
 delay(5000);
}   

Go Up