Bonjour, Je voudrais vous présenter le terrarium que

return(s);. } //Triangle pour repérer ce qui est selectionné pour modification void Repere(int X_old,int Y_old,int X,int Y, uint16_t Color_rep, uint16_t Color_fond){.
913KB taille 120 téléchargements 263 vues
Bonjour,

Je voudrais vous présenter le terrarium que j'ai construit pour mon fils. Il souhaite avoir des dendrobates mais après s'être documenté, nous avons compris que cela nécessitait un milieu de vie tropical et que la difficulté était de maintenir la température et l'humidité sachant que l'humidité dépend beaucoup de la température. Je souhaitais un minimum d'interventions pour maintenir la vie dans ce terrarium et donc besoin d'automatiser tout ce qui peut l'être. Nous avons utilisé un terrarium de 45x45x60 puis créé un caisson sur le dessus qui cache les circuits électriques et électroniques.

Pour le chauffage, j'ai inséré dans le mur de pierre une résistance chauffante de 30W d'une longueur de 3m. Un éclairage à led composé de deux lampes avec une gestion indépendante pour chacune, ce qui permet d’allumer progressivement le matin et éteindre progressivement le soir. Une pompe permet de faire couler de l’eau en goutte à goutte le long du mur chauffant et une petite chute d’eau sur le fond à gauche. La pompe est aussi gérée par l’arduino.

Pour la partie automatisation : Utilisation d'une carte arduino mega et d'un petit écran tactile (capteur DHT22, une horloge DS3231, des relais statiques, un ventilateur PWM). Le programme contient deux boucles de régulation PID... Une pour la température agissant sur la résistance chauffante et l'autre pour gérer grossièrement l'humidité avec un ventilateur monté en extraction en fonction avec une sortie arduino PWM.

Pour la mesure d’humidité nous utilisons un capteur DHT22 fixé au plafond du terrarium ne supportant pas l’arrosage. Et pour la température un capteur DS18B20 transformé en liane et allant jusqu’au sol. Les régulateurs suivent des consignes préprogrammées via des écrans de paramétrages :

Toutes les 1/2h, la température peut être changée automatiquement et suivant 4 consignes de température. Il suffit de choisir une des 4 consignes à l'heure que l'on souhaite et pour un jour de la semaine voulu. Ensuite il est possible de copier un programme journalier vers un autre jour ou d’annuler les modifications. C'est identique pour la régulation d'humidité qui elle agie sur la vitesse du ventilateur d'extraction. Je gère aussi 4 sorties relais statiques pour les éclairages, la chute d'eau et goutte à goutte puis l'arrosage. C'est aussi un programme par 1/2h ou chaque 1/2h on peut agir sur une sortie durant 1s à 1800s (1/2h). Par exemple, si je veux arroser 5 seconde à 12h, je règle ma tempo d'une sortie à 5s et je lui dis que cela se passera à 12h00 et si je veux un éclairage permanent de 6h à 21h, je règle mon temps sur 1800s et j'active les pas de 1/2h de 6h à 21h.

Il y a aussi un écran permettant de visualiser les courbes de température et humidité:

Puis un écran pour configurer l'heure, date et les PID :

Le résultat à la mise en route :

La température varie de 21°C la nuit à 25°C vers midi et ça fonctionne avec mes 30W sans aucun souci. Le taux d’humidité avoisine les 75% dans la journée et va monter à environ 90% la nuit.

Le programme se trouvant dans l’ARDUINO : #include // Core graphics library #include // Hardware-specific library #include // Bibliothéque pour la partie tactile de l'écran #include //EEPROM mega #include //capteur DHT22 #include //bibliothéque de régulation PID #include //Horloge #include //PWM (vitesse ventilateur) #include //pour communiquer avec le capteur DS18B20 #include //capteur température DS18B20

//déclaration pour le capteur DS18B20 OneWire oneWire(32); //Bus One Wire sur la pin 32 de l'arduino DallasTemperature CapteurT(&oneWire); //DeviceAddress sensorDeviceAddress; //Vérifie la compatibilité des capteurs avec la librairie

//déclaration pour le capteur DHT22 #define DHTPIN 37

// Sur quelle entrée digitale est connecté le capteur

#define DHTTYPE DHT22 // Définir le type de capteur : DHT 22 (AM2302), AM2321

//déclaration de la sortie du régulateur température #define RELAIS_PIN_T 22 //#define RELAIS_PIN_H 23

// The control pins for the LCD can be assigned to any digital or // analog pins...but we'll use the analog pins as this allows us to // double up the pins with the touch screen (see the TFT paint example). #define LCD_CS A3 // Chip Select goes to Analog 3 #define LCD_CD A2 // Command/Data goes to Analog 2 #define LCD_WR A1 // LCD Write goes to Analog 1 #define LCD_RD A0 // LCD Read goes to Analog 0

#define LCD_RESET A4 // Can alternately just connect to Arduino's reset pin

// When using the BREAKOUT BOARD only, use these 8 data lines to the LCD: // For the Arduino Uno, Duemilanove, Diecimila, etc.: // D0 connects to digital pin 8 (Notice these are // D1 connects to digital pin 9 NOT in order!) // D2 connects to digital pin 2 // D3 connects to digital pin 3 // D4 connects to digital pin 4 // D5 connects to digital pin 5

// D6 connects to digital pin 6 // D7 connects to digital pin 7 // For the Arduino Mega, use digital pins 22 through 29 // (on the 2-row header at the end of the board).

// Assign human-readable names to some common 16-bit color values: #define BLACK 0x0000 #define BLUE 0x001F #define RED

0xF800

#define GREEN 0x07E0 #define CYAN 0x07FF #define MAGENTA 0xF81F #define YELLOW 0xFFE0 #define WHITE 0xFFFF

// Color definitions #define ILI9341_BLACK

0x0000

/* 0, 0, 0 */

#define ILI9341_NAVY

0x000F

/* 0, 0, 128 */

#define ILI9341_DARKGREEN 0x03E0

/* 0, 128, 0 */

#define ILI9341_DARKCYAN 0x03EF

/* 0, 128, 128 */

#define ILI9341_MAROON

/* 128, 0, 0 */

0x7800

#define ILI9341_PURPLE #define ILI9341_OLIVE

0x780F

/* 128, 0, 128 */

0x7BE0

/* 128, 128, 0 */

#define ILI9341_LIGHTGREY 0xC618

/* 192, 192, 192 */

#define ILI9341_DARKGREY 0x7BEF

/* 128, 128, 128 */

#define ILI9341_BLUE

0x001F

#define ILI9341_GREEN #define ILI9341_CYAN #define ILI9341_RED

0x07E0

/* 0, 255, 0 */

0x07FF 0xF800

#define ILI9341_MAGENTA #define ILI9341_YELLOW

/* 0, 0, 255 */

/* 0, 255, 255 */ /* 255, 0, 0 */

0xF81F 0xFFE0

/* 255, 0, 255 */ /* 255, 255, 0 */

#define ILI9341_WHITE

0xFFFF

#define ILI9341_ORANGE

0xFD20

/* 255, 255, 255 */ /* 255, 165, 0 */

#define ILI9341_GREENYELLOW 0xAFE5 #define ILI9341_PINK

/* 173, 255, 47 */

0xF81F

/* PARAMETRES MENU */ #define MENU_L 51 //longueur d'un bouton menu #define MENU_H 20 //hauteur d'un bouton menu

/* PARAMETRES PAGE ECRAN */ #define COLOR_PAGE BLACK //Couleur fond de page #define HAUTEUR_TFT tft.height() #define LARGEUR_TFT tft.width()

// DEFINITION DES CONSTANTES DE MESURES CAPTEUR TEMPERATURE, HUMIDITE et TOR POUR BARGRAPHE #define DEGRE_MIN 0 #define DEGRE_MAX 40 #define HUMID_MIN 0 #define HUMID_MAX 100 #define TOR_MIN 1 #define TOR_MAX 1800

// DEFINITION DES CONSTANTES POUR L'AFFICHAGE DE LA PAGE 0 (REGULATION) #define POS_REGT_X 30 #define POS_REGT_Y 31 #define POS_REGH_X 188 #define POS_REGH_Y 31 #define DECAL_BARME_X 47 #define DECAL_BARME_Y 60 #define DECAL_BARSP_X 25 #define DECAL_BARSP_Y 60

#define DECAL_BARS_Y -6 #define DECAL_AFF_ME_SP 20 //Décalage des cadres affichage des valeurs ME et SP #define DECAL_BP_X 5 //décalage des BP + et #define LARGEUR_BP_REG 16 #define HAUTEUR_BP_REG 48 //CADRE_BARG_V_H/2-1 #define LARGEUR_REGUL 100 //Largeur du cadre principal du régulateur #define HAUTEUR_REGUL 180 //Hauteur du cadre principal du régulateur #define CADRE_AFF_VAL_L 90 //largeur cadre affichage valeur alphanum #define CADRE_AFF_VAL_H 16 //hauteur cadre affichage valeur alphanum #define CADRE_OUT_VAL_L 89 // Largeur bargraphe sortie régul #define CADRE_OUT_VAL_H 10 // Hauteur bargraphe sortie régul #define CADRE_BARG_V_L 15 //largeur cadre bargraphe vertical #define CADRE_BARG_V_H 100 //hauteur cadre bargraphe vertical #define CADRE_TITLE_H 13 // Hauteur du cadre du titre du régulateur #define ECART_AFF_ME_SP 4 //Ecart entre les cadres ME et SP #define AFF_DECAL_L 47 //Decalage du texte ME et SP horizontalement dans les cadres #define AFF_DECAL_H 5 //décalage du texte ME et SP verticalement dans les cadres #define COLOR_FD_AFF ILI9341_BLACK //couleur fond cadre pour affichage ME et SP #define BARRE_TITRE_H 21 #define BARRE_TITRE_L 190 #define DECAL_BP_SP_X 81 //décalage BP consigne auto manu des regul #define DECAL_BP_SP_Y 90 //décalage BP consigne auto manu des regul #define LARG_BP_SP 28 //largeur BP consigne auto manu des regul #define HAUT_BP_SP 20 //hauteur BP consigne auto manu des regul

// DEFINITION DES CONSTANTES POUR L'AFFICHAGE DE LA PAGE 1 et 2 (CONSIGNES TEMPERATURES et HYGROMETRIE) #define DECAL_SELEC_X 22 // position iniatiale horizontale des selections des consignes par 1/2 heure #define DECAL_SELEC_Y 98 // position iniatiale verticale des selections des consignes par 1/2 heure #define BP_SELECT_L 9 #define BP_SELECT_H 9 #define Ecart_SELEC_X 3

#define Ecart_SELEC_Y 60 //70 #define POS_JOUR_X 50 //Position x du choix jour pour le paramètrage des consignes #define POS_JOUR_Y 42 //Position y du choix jour pour le paramètrage des consignes #define VAL_ECART_H 72 //Ecart entre les valeurs de consignes températures et humidités #define VAL_DECAL_H 40 //Décalage horizontal par rapport a l'origine des valeurs des consignes températures et humidités #define VAL_DECAL_V 197 //Décalage vertical par rapport a l'origine des valeurs des consignes températures et humidités #define VAL_LARG 40 //Largeur zone tactile selection consigne #define VAL_HAUT 30 //Hauteur zone tactile selection consigne #define BP_LARG 14 //Largeur des BP + et - pour incrémenter et décrémenter les consignes #define BP_HAUT 14 //Hauteur des BP + et - pour incrémenter et décrémenter les consignes #define DECAL_VAL_TXT_H -5 //décalage du texte afficher pour les 4 consignes #define DECAL_VAL_TXT_V -5 //décalage du texte afficher pour les 4 consignes #define ECART_JOUR_TRANS 130 //Ecatr entre le jour et le jour pour le transfert de programme

//DEFINITION DES CONSTANTES POUR L'AFFICHAGE DE LA PAGE SETUP #define HMSJMA_DECAL_H 30 //Décalage horizontal par rapport a l'origine des valeurs #define HMSJMA_DECAL_V 50 //Décalage vertical par rapport a l'origine des valeurs #define PID_DECAL_H 30 //Décalage horizontal par rapport a l'origine des valeurs KP KI KD #define PID_T_DECAL_V 110 //Décalage vertical par rapport a l'origine des valeurs KP KI KD #define PID_H_DECAL_V 170 //Décalage vertical par rapport a l'origine des valeurs KP KI KD const int Tabl_HMJMA_lim[] = {1,31,1,12,2000,2100,0,23,0,59}; //définir les limites pour le réglage de la date et heure const double Tabl_PID_lim[] = {1,999,1,999,1,999}; //définir les limites pour le réglage de KP KI KD

//pointer pour la définition des boutons tactiles const byte Pointer_M = 0; //pointer pour le menu en bas de page const byte Nbr_M = 6; //Nombre de boutons du menu en bas de page const byte Pointer_P0 = Pointer_M+Nbr_M; //pointer pour les boutons page regulation const byte Nbr_P0 = 10; //Nombre de boutons page de regulation const byte Pointer_P1 = Pointer_P0+Nbr_P0; //pointer pour les boutons page des consignes température const byte Nbr_P1 = 66; //Nombre de boutons page des consignes température const byte Pointer_P2 = Pointer_P1; //pointer pour les boutons page des consignes hygrométrie

const byte Nbr_P2 = Nbr_P1; //Nombre de boutons page des consignes hygrométrie const byte Pointer_P3 = Pointer_P2+Nbr_P2; //pointer pour les boutons de la page reglage const byte Nbr_P3 = 17; //Nombre de boutons page reglages const byte Pointer_P4 = Pointer_P1; //pointer pour les boutons de la page TOR const byte Nbr_P4 = Nbr_P1; //Nombre de boutons page TOR const byte Pointer_Pfin = Pointer_P3+Nbr_P3;

//pointer pour la sauvegarde en EEPROM const byte EEP_P_00 = 0; //adresse début sauvegarde des consignes horaires de température const byte EEP_L_00 = 84; //nombre de bytes sauvegarde des consignes horaires de température const byte EEP_P_01 = EEP_P_00 + EEP_L_00; //adresse début sauvegarde des consignes horaires d'hygrométrie const byte EEP_L_01 = 84; //nombre de bytes sauvegarde des consignes horaires d'hygrométrie const byte EEP_P_02 = EEP_P_01 + EEP_L_01; //adresse début sauvegarde des 4 consignes de température const byte EEP_L_02 = 16; //nombre de byte sauvegarde des 4 consignes de température (4 double = 4 byte * 4 byte = 16 byte) const byte EEP_P_03 = EEP_P_02 + EEP_L_02; //adresse début sauvegarde des 4 consignes d'hygrométrie const byte EEP_L_03 = 16; //nombre de byte sauvegarde des 4 consignes d'hygrométrie (4 double = 4 byte * 4 byte = 16 byte) const byte EEP_P_04 = EEP_P_03 + EEP_L_03; //adresse début sauvegarde des bits const byte EEP_L_04 = 1; //nombre de byte sauvegarde des bits (bit0=auto/manu SP température, bit1=auto/manu SP hygrométrie) const byte EEP_P_05 = EEP_P_04 + EEP_L_04; //nombre de byte sauvegarde de la consigne regul température const byte EEP_L_05 = 4; //nombre de byte sauvegarde de la consigne regul température (1 double = 4 byte) const byte EEP_P_06 = EEP_P_05 + EEP_L_05; //nombre de byte sauvegarde de la consigne regul hygrométrie const byte EEP_L_06 = 4; //nombre de byte sauvegarde de la consigne regul hygrométrie (1 double = 4 byte) const byte EEP_P_07 = EEP_P_06 + EEP_L_06; //nombre de byte sauvegarde de fonctionnement des relais TOR const byte EEP_L_07 = 168; //nombre de byte sauvegarde de fonctionnement des relais TOR (4 double = 4 byte * 4 byte = 16 byte) const byte EEP_P_08 = EEP_P_07 + EEP_L_07; //adresse début sauvegarde des 4 consignes de temps des relais const byte EEP_L_08 = 16; //nombre de byte sauvegarde des 4 consignes de temps des relais (4 double = 4 byte * 4 byte = 16 byte) const byte EEP_P_09 = EEP_P_08 + EEP_L_08; //adresse début sauvegarde des BP des relais TOR const byte EEP_L_09 = 4; //nombre de byte sauvegarde des BP des relais TOR

const byte EEP_P_10 = EEP_P_09 + EEP_L_09; //adresse début sauvegarde de Kp, Ki, Kd du PID température const byte EEP_L_10 = 12; //nombre de byte sauvegarde de Kp, Ki, Kd du PID température (3 double = 3 byte * 4 byte = 12 byte) const byte EEP_P_11 = EEP_P_10 + EEP_L_10; //adresse début sauvegarde de Kp, Ki, Kd du PID humidité const byte EEP_L_11 = 12; //nombre de byte sauvegarde de Kp, Ki, Kd du PID humidité (3 double = 3 byte * 4 byte = 12 byte)

//Definir les PIN en sorties pour les relais TOR const byte RELAIS_PIN_TOR[] = {24, 25, 26, 27};

#define YP A3 // must be an analog pin, use "An" notation! #define XM A2 // must be an analog pin, use "An" notation! #define YM 9 // can be a digital pin #define XP 8 // can be a digital pin

//RETOUR DES COORDONNEES DE L'ECRAN TACTILE (New ILI9341 TP) #define TS_MINX 119 //120 #define TS_MAXX 923 //900 #define TS_MINY 81 //70 #define TS_MAXY 921 //920

//DEFINIR LES SEUILS DE PRESSION SUR ECRAN #define MINPRESSURE 10 #define MAXPRESSURE 1000

//Déclaration des ports utilisés sur la carte arduino pour faire fonctionner l'écran FTP Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET); TouchScreen ts = TouchScreen(XP, YP, XM, YM, 10); // If using the shield, all control and data lines are fixed, and // a simpler declaration can optionally be used: // Adafruit_TFTLCD tft;

//déclararer les boutons à utiliser Adafruit_GFX_Button buttons[Pointer_Pfin+5];

//Création de x (Nbr_M) labels pour les boutons avec les couleurs associées pour les fonds des boutons char boutonlabels[Nbr_M][10] = {"Regul", "Temper", "Hygro", "TOR", "Courbe", "Set"}; uint16_t boutoncolors[Nbr_M] = {ILI9341_RED, ILI9341_BLUE, ILI9341_BLUE, ILI9341_BLUE, ILI9341_DARKGREEN, ILI9341_ORANGE};

//DEFINITION DES VARIABLES bool error_DHT = false; bool error_DS18B20 = false; int page = 0; double SPt, SPh, Old_SPt, Old_SPh; //Consigne actuelle byte Tabl_SPt[84]; //table pour mémoriser les consignes de température par 1/2h byte Tabl_SPh[84]; //table pour mémoriser les consignes d'hygrométrie par 1/2h byte Tabl_TOR[336]; //table pour mémoriser les consignes des relais TOR par 1/2h int Table_HMJMA[5]; //table datetime pour réglage int tab_pos_HMSJMA_X[5]={11+HMSJMA_DECAL_H, 47+HMSJMA_DECAL_H, 95+HMSJMA_DECAL_H, 143+HMSJMA_DECAL_H, 179+HMSJMA_DECAL_H}; double Table_PID_T[4]={0,0,0,0}; //table PID pour réglage KP KI KD regul température double Table_PID_H[4]={0,0,0,0}; //table PID pour réglage KP KI KD regul humidité int tab_pos_PID_X[3]={53+PID_DECAL_H, 137+PID_DECAL_H, 221+PID_DECAL_H}; double Consignes_t[4]; //table des consignes en température double Consignes_h[4]; //table des consignes en hygrométrie double Consignes_TOR[4]; //table des consignes temps des relais TOR byte BP_TOR[4]; //mémo on, off, auto des relais TOR float Old_ME_T = 0; float Old_ME_H = 0; byte Old_min = 0; byte Old_sec = 0;

double Humid, Temper, t1, t2, Output_T, Output_H; //Paramètres entrée et sortie PID température et humidité int WindowSizeT = 5000; //étendue de la sortie du PID température int WindowSizeH = 255; //étendue de la sortie du PID température unsigned long windowStartTimeT = millis(); unsigned long windowStartTimeH = millis(); unsigned long Time_DHT = millis(); uint16_t Color_out_t, Color_out_h; int PosX[48]; //pour l'affichage des triangles au dessus des consignes de température et humidité int PosY[48]; //pour l'affichage des triangles au dessus des consignes de température et humidité uint8_t OldBouton_t = Pointer_P1; //Mémoire de la consigne sélectionnée t uint8_t OldBouton_h = Pointer_P2; //Mémoire de la consigne sélectionnée h uint8_t OldBouton_TOR = Pointer_P4; //Mémoire de la consigne sélectionnée h uint8_t Old_HMJMA = 0; //Mémoire de la sélection Heure, minutes, jour, mois, année uint8_t Old_PID_T = 0; //Mémoire de la sélection KP KI KD uint8_t Old_PID_H = 0; //Mémoire de la sélection KP KI KD uint16_t COLOR_SPt[4] = {0xFFE0, 0xFFA0, 0xFEA0, 0xF800}; //definition de la couleur des barres de température dans la page des consignes °C uint16_t COLOR_SPh[4] = {0x01FF, 0x04FF, 0x077F, 0x07FF}; //definition de la couleur des barres de température dans la page des consignes hygrométrie uint16_t COLOR_TOR[4] = {ILI9341_GREEN, ILI9341_RED, ILI9341_CYAN, ILI9341_YELLOW}; //definition de la couleur des barres pour les consignes des relais TOR static char *str[] = {"---", "Lun", "Mar", "Mer", "Jeu", "Ven", "Sam", "Dim"}; byte EXP[4] = {1, 2, 4, 8}; //utilisé pour déterminer quel relais sera actif ou non dans la page des consignes relais TOR uint8_t Select_jour_t = 1; //Sélection du jour pour la configuration des températures uint8_t Select_jour_trans_t = 2; //Sélection du jour pour le transfert d'un programme de températures uint8_t Select_jour_h = 1; //Sélection du jour pour la configuration de hygrométrie uint8_t Select_jour_trans_h = 2; //Sélection du jour pour le transfert d'un programme de hygrométrie uint8_t Select_jour_TOR = 1; //Sélection du jour pour la configuration de relais TOR uint8_t Select_jour_trans_TOR = 2; //Sélection du jour pour le transfert d'un programme de relais TOR bool SaveEEP = false; bool SaveRTC=false; bool SavePID=false;

bool SP_ma_t = bitRead(EEPROM.read(EEP_P_04), 0); bool SP_ma_h = bitRead(EEPROM.read(EEP_P_04), 1); int mem_min; int increm = 10;

//variables trend const int L_trend=250;//Largeur du graphe const int NbPt_trend=L_trend/2;//nombre de points pour la courbe const int X1_trend=35; const int X2_trend=X1_trend+L_trend; const int H_trend=160;//Hauteur du graphe const int Y2_trend=38; const int Y1_trend=Y2_trend+H_trend; int Tabl_trend_T[NbPt_trend]; int Tabl_trend_H[NbPt_trend]; char HeureMinTrend[6]; char HeureMaxTrend[6]; byte NbMin=3; //un point toutes les N minutes pour tracer la courbe byte CptMin=NbMin; //Comptage des minutes écoulez jusqu'au prochain point enregistré

//variable pour PWM const int PinPWM = 44 ; // pin 44, 45 et 46 sont controlé par le timer 5 pour la fonction PWM bool HystPWM = false; //hystéresis pour empecher le ventilateur de tourner à fréquence trop faible

//déclaration des fonctions DHT dht(DHTPIN, DHTTYPE);

PID PID_T(&Temper, &Output_T, &SPt, 0, 0, 0, P_ON_M, DIRECT); PID PID_H(&Humid, &Output_H, &SPh, 0, 0, 0, P_ON_M, REVERSE);

/*************************************************** SETUP ********************************************************/ void setup(void) { Serial.begin(9600); Serial.println(F("TFT LCD test"));

#ifdef USE_ADAFRUIT_SHIELD_PINOUT Serial.println(F("Using Adafruit 2.4\" TFT Arduino Shield Pinout")); #else Serial.println(F("Using Adafruit 2.4\" TFT Breakout Board Pinout")); #endif

tft.reset();

uint16_t identifier = tft.readID(); if(identifier == 0x9325) { Serial.println(F("Found ILI9325 LCD driver")); } else if(identifier == 0x9328) { Serial.println(F("Found ILI9328 LCD driver")); } else if(identifier == 0x4535) { Serial.println(F("Found LGDP4535 LCD driver")); }else if(identifier == 0x7575) { Serial.println(F("Found HX8347G LCD driver")); } else if(identifier == 0x9341) { Serial.println(F("Found ILI9341 LCD driver")); } else if(identifier == 0x8357) { Serial.println(F("Found HX8357D LCD driver")); } else if(identifier==0x0101) { identifier=0x9341; Serial.println(F("Found 0x9341 LCD driver"));

}else { Serial.print(F("Unknown LCD driver chip: ")); Serial.println(identifier, HEX); Serial.println(F("If using the Adafruit 2.8\" TFT Arduino shield, the line:")); Serial.println(F(" #define USE_ADAFRUIT_SHIELD_PINOUT")); Serial.println(F("should appear in the library header (Adafruit_TFT.h).")); Serial.println(F("If using the breakout board, it should NOT be #defined!")); Serial.println(F("Also if using the breakout, double-check that all wiring")); Serial.println(F("matches the tutorial.")); identifier=0x9341; }

tft.begin(identifier); tft.setRotation(3);//orientation du texte par rapport à l'écran (3=paysage) tft.fillScreen(COLOR_PAGE); tft.setTextSize(1);

// creation des boutons du menu // initbutton(&tft, x, y, w, h, couleur cadre, couleur bouton, couleur texte, text, Taille texte) for (uint8_t i=Pointer_M; i