Boujour,
Je fais appelle aujourd'hui car pour la première fois j’inclue une bibliothèque dans une autre.
J'ai un écran tft Adafruit qui m'a ete donné avec une bibliothèque de fonctions qui permettent un affichage simple.
(fonction du style : tft.drawLine(x,y,x2,y2,couleur) )
J'ai écrit une bibliothèque permettant de dessiner un graphiques facilement en temps réel, avec un capteur on prélevé un valeur et cette valeur est ajoutée au graphique.
Pour cela j' ai inclue la bibliothèque de l'écran dans la bibliothèque nommée "Graphique" pour gérer l'affichage du graphique.
Voici le message d'erreur du compilateur lorsque je compile le code qui utilise ma bibliotheque:
Arduino : 1.5.5-r2 (Windows 8), Carte : "Arduino Uno"
Graphique\Graphique.cpp.o:(.bss.tft+0x0): multiple definition of `tft'
exemple_internet_pour_bitmap_et_SD.cpp.o:(.bss.tft+0x0): first defined here
Ici tft est apparemment déjà défini, le problème est qu il est défini dans la bibliothèque de l’écran et je n aimerais pas aller bidouiller dedans.
et puis ce message d’indique pas la ligne de l'erreur, il indique :(.bss.tft+0x0) que signifie ce code?
voici le code de ma bibliothèque (.cpp) :
#if ARDUINO<100
#include <WProgram.h>
#else
#include <Arduino.h>
#endif
#include "Graphique.h"
Graphique ::Graphique(){
resetVarGraph();
}
void Graphique::setTitleX(String x){
titrex=x;
}
void Graphique::setTitleY(String y){
titrey=y;
}
void Graphique::setTitle(String t){
titre=t;
}
void Graphique::setValueX(double xmax,double xmin){
xMax=xmax;
xMin=xmin;
}
void Graphique::setValueY(double ymax,double ymin){
yMax=ymax;
yMin=ymin;
}
void Graphique::resetVarGraph(){
titrex="Titre X";
titrey="Titre Y";
titre="Titre";
xMax=100.0;
xMin=0.0;
yMax=100.0;
yMin=0.0;
ori=1;
exDotX=7;
exDotY=35;
counter=0;
}
void Graphique::setOrientation(int r){
ori=r;
}
void Graphique::traceBase(){
int a;
int b;
int i;
double sousInter;
i=0;
a=titre.length();
b=titrex.length();
a=(320-a*6)/2;
b=315-b;
// tft.setRotation(1);
tft.fillScreen(ILI9340_BLACK);
tft.setTextColor(ILI9340_RED);
tft.setTextSize(1);
tft.drawLine(6, 0, 6, 240, ILI9340_WHITE);
tft.drawLine(5, 0, 5, 240, ILI9340_WHITE);
tft.drawLine(0, 236, 320, 236, ILI9340_WHITE);
tft.drawLine(0, 235, 320, 235, ILI9340_WHITE);
tft.drawLine(84, 240, 84, 35, ILI9340_WHITE);
tft.drawLine(163, 240, 163, 35, ILI9340_WHITE);
tft.drawLine(242, 240, 242, 35, ILI9340_WHITE);
tft.drawLine(318, 240, 318, 35, ILI9340_WHITE);
tft.drawLine(0, 35, 320, 35, ILI9340_WHITE);
tft.drawLine(0, 85, 320, 85, ILI9340_WHITE);
tft.drawLine(0, 135, 320, 135, ILI9340_WHITE);
tft.drawLine(0, 185, 320, 185, ILI9340_WHITE);
tft.fillTriangle(5, 0, 0, 5, 10, 5,ILI9340_WHITE);
tft.fillTriangle(315, 230, 315, 240, 320, 235,ILI9340_WHITE);
tft.setCursor(15, 3);
tft.println(titrey);
tft.setCursor(b,210);
tft.println(titrex);
tft.setTextColor(tft.Color565(0, 255, 255));
tft.setCursor(a,18);
tft.println(titre);
tft.setTextColor(ILI9340_YELLOW);
sousInter=(yMax-yMin)/4;
while (i<5){
tft.setCursor(15,225-i*50);
tft.println(sousInter*i+yMin);
i++;
}
i=0;
sousInter=(xMax-xMin)/4;
while (i<3){
tft.setCursor(280-i*78,225);
tft.println((xMax)-sousInter*i);
i++;
}
i=0;
}
void Graphique::traceNextDot(double x,double y,int red,int green,int blue){
dotY=35+(((yMax-y)*200)/(yMax-yMin));//convertion entre unitees et pixels ( equivalance dimentionnelle)
dotX=7+((311*(x-xMin))/(xMax-xMin));
if(counter>0){
tft.drawLine(exDotX, exDotY, dotX,dotY,tft.Color565(red,green,blue));
}
exDotY=dotY;
exDotX=dotX;
counter++;
}
(.h)
#ifndef Graphique_h
#define Graphique_h
#if ARDUINO<100
#include <WProgram.h>
#else
#include <Arduino.h>
#endif
#include "Adafruit_GFX.h"
#include "Adafruit_ILI9340.h"
#if defined(__SAM3X8E__)
#undef __FlashStringHelper::F(string_literal)
#define F(string_literal) string_literal
#endif
#define TFT_RST 8
#define TFT_DC 9
#define TFT_CS 10
#define SD_CS 4
Adafruit_ILI9340 tft = Adafruit_ILI9340(TFT_CS, TFT_DC, TFT_RST);
class Graphique{
public:
Graphique();// constructeur
void setTitleX(String x);
void setTitleY(String y);
void setTitle(String t);
void setValueX(double xmax,double xmin);
void setValueY(double ymax,double ymin);
void setOrientation(int ori);
void resetVarGraph();
void traceBase();
void traceNextDot(double x,double y,int red,int green,int blue);
private:
double xMax,xMin,yMax,yMin,dotX,dotY,exDotX,exDotY;
String titrex,titrey,titre;
int ori,counter;
};
#endif
Merci de votre aide.
stefano zampieri