Aide pour modifier un code pour l'utiliser avec un autre type d'ecran

Bonjour,
je souhaite utiliser un uno pour piloter un ventilateur avec un capteur DHT22 et un écran 1.8 TFT SPI.

J'ai trouvé mon bonheur dans la personne de Ookpik, mais l'écran utilisé est un ST7735 1.8 TFT, donc je n'ai rien qui s'affiche sur l'écran. (normal) Son tuto date de 2016 et il ne réponds plus malheureusement.

Voici le code utilisé sans la modification de l'écran. (je n'y arrive pas, avec la doc de l'écran j'arrive à écrire des choses mais pas à mettre les informations de la sonde DHT22).
Si quelqu'un pouvait m'aider ?
Documentation écran : Guide to 1.8 TFT Display with Arduino | Random Nerd Tutorials
LED/SCK/SDA/AO/RESET/CS/GND/VCC
3.3v/13/11/10/9/8/GND/5V

/*
Hygrométrie et température
Contrôle de ventilation/chauffage (fonction thermostat)
Librairies à télécharger et à décompresser dans le répertoire arduino/libraries : 
*Librairie Adafruit pour le DHT22 https://github.com/adafruit/DHT-sensor-library
*Librairie Adafruit pour l'afficheur TFT 1.8" https://github.com/adafruit/Adafruit-ST7735-Library/archive/master.zip
*Librairie Adafruit pour la gestion des opérations graphiques https://github.com/adafruit/Adafruit-GFX-Library/archive/master.zip
Pour utiliser la fonction "radiateur" (second relai IN2, pin Arduino #3), décommentez toutes les lignes correspondantes pour activer la fonction.
Écrit par Ookpik (www.epingle.info) - 2016-02-06
*/

#include "DHT.h"
#include <Adafruit_GFX.h>    // Bibliothèque graphique de base
#include <Adafruit_ST7735.h> // bibliothèque spécifique à la puce ST7735
#include <SPI.h>
#include "Wire.h"
// Définition des pin SainSmart
#define sclk 13 // SainSmart: SCL
#define mosi 11 // SainSmart: SDA
#define cs 10   // SainSmart: CS
#define dc 9    // SainSmart: RS/DC
#define rst 8   // SainSmart: RES // peut être connecté a la RAZ arduino
Adafruit_ST7735 tft = Adafruit_ST7735(cs, dc, rst);

// Définition des pin DHT22
// Pin 1 (a gauche) +5V
// Pin 2 data DHTPIN -> pin 4 Arduino
// Placer une résistance de 10K entre les Pins 1 et 2
// Pin 4 Masse
#define DHTPIN 4
#define DHTTYPE DHT22 // DHT 22 (AM2302)
DHT dht(DHTPIN, DHTTYPE);

// Définition des consignes :
const int intTimePause = 3000; // Actualisation des valeurs toutes les 3 secondes
int relai_humi = 7; // Relier le pin IN1 du relai au pin 7 de l'Arduino
int cons_humi = 53; // Consigne d'humidité
int relai_temp = 3; // Si installation d'un radiateur, relier le pin IN2 du relai au pin 3 de l'Arduino
int cons_temp = 20; // Consigne température

void setup(void) {
 Serial.begin(9600);
 Serial.print("Hello! ST7735 TFT Test");
 Serial.println("DHTxx test!");
 pinMode (relai_humi,OUTPUT);
 //pinMode (relai_temp,OUTPUT); // À décommenter pour activer le relai radiateur
 
 Serial.begin(9600);
 // Utilisez ce code pour un 1.8" TFT
 tft.initR(INITR_BLACKTAB); // initialise le ST7735S chip, black tab
 // Utilisez ce code pour un 1.44" TFT
 //tft.initR(INITR_144GREENTAB); // initialise le ST7735S chip, black tab
 Serial.println("Initialized");
 tft.setRotation(45); 
 uint16_t time = millis();
 tft.fillScreen(ST7735_BLACK);

 dht.begin();
}

void loop() {
 float h = dht.readHumidity();
 float t = dht.readTemperature();

 // Paramètres de l'affichage
 tft.setTextSize(2);
 tft.setCursor(10, 10);
 tft.setTextColor(ST7735_MAGENTA);
 tft.print("Temperature ");
 tft.setTextColor(ST7735_WHITE);
 tft.setTextSize(2);
 tft.setCursor(30, 30);
 tft.fillRect (0,30,100,20,0x0000);
 tft.print(t);
 tft.print("C");
 tft.setTextSize(2);
 tft.setTextColor(ST7735_YELLOW);
 tft.setCursor(20,60);
 tft.print("Humidite");
 tft.setCursor(30,80);
 tft.setTextColor(ST7735_CYAN);
 tft.fillRect (0,80,100,20,0x0000);
 tft.print(h);
 tft.print("%");
 tft.setTextSize(1);
 tft.setTextColor(ST7735_GREEN);
 tft.setCursor(30,110);
 tft.print("Salle de bain");
 
 // Affichage sur moniteur série Arduino ou par BlueTooth
 Serial.print ("Humidité : ");
 Serial.println (h);

 Serial.print ("Température : ");
 Serial.println (t);
 Serial.println(" ");

 if (digitalRead(relai_humi)==HIGH)
 {
 Serial.println ("Ventilateur arret");
 }
 else
 {
 Serial.println ("Ventilateur en marche");
 }
 Serial.println(" ");

 if (digitalRead(relai_temp)==HIGH)
 {
 Serial.println ("Chauffage en marche");
 }
 else
 {
 Serial.println ("Chauffage arret");
 Serial.println(" ");
 }

 Serial.println(" ");
 Serial.println(" ");

 // Commande des relais
 // Humidité : mise en marche/arrêt de la ventilation
 if (h >= (cons_humi + 2.00)) // Si la mesure h est > ou + à la consigne +2.00 : allumage extracteur
 {
 digitalWrite (relai_humi,LOW); // Si la mesure h est < à la consigne +1.00 : arrêt extracteur
 }
 else
 if (h < (cons_humi - 1))
 {
 digitalWrite (relai_humi,HIGH);
 }
 delay (intTimePause);

 // Température : mise en marche/arrêt du radiateur // Décommenter toutes les lignes ci dessous
 //if (t >= (cons_temp + 2)) // Si la mesure t est > ou = à la consigne +2.00 : allumage chauffage
 //{
 // digitalWrite (relai_temp,LOW);
 //}
 //else
 //if (t < (cons_temp - 1)) // Si la mesure t est < à la consigne -1.00 : arrêt chauffage
 //{
 // digitalWrite (relai_temp,HIGH);
 //}
 //delay (intTimePause);
 //}
}

Ton écran c'est bien le même que celui de ton lien (Random Nerd Tutorial) ?

Si oui, as-tu déjà testé le code qui se trouve dans ce lien ?
Si ça fonctionne, c'est bon signe.

Tu dois alors adapter ton code :

  • enlever la ligne #include <Adafruit_ST7735.h> // bibliothèque spécifique à la puce ST7735
  • ajouter à la place #include <TFT.h>
  • changer la ligne Adafruit_ST7735 tft = Adafruit_ST7735(cs, dc, rst); par TFT TFTscreen = TFT(cs, dc, rst);
  • a priori enlever la ligne tft.initR(INITR_BLACKTAB); // initialise le ST7735S chip, black tab
  • compiler et prier pour que ça fonctionne...

Oui c'est bien celui-là.
Je test tout ce que tu m'as dis et je reviens te dire.
Merci pour ces informations.

j'ai une erreur sur la ligne : ' tft.setTextSize(2);' elle est en rouge au moment de compiler :

In file included from C:\Program Files (x86)\Arduino\libraries\TFT\src/TFT.h:37:0,
                 from C:\Users\xxxxx\OneDrive\Documents\Arduino\ventilo_humidite\ventilo_humidite.ino:15:
C:\Program Files (x86)\Arduino\libraries\TFT\src/utility/Adafruit_ST7735.h: In member function 'uint16_t Adafruit_ST7735::Color565(uint8_t, uint8_t, uint8_t)':
C:\Program Files (x86)\Arduino\libraries\TFT\src/utility/Adafruit_ST7735.h:118:63: error: 'newColor' was not declared in this scope
   uint16_t Color565(uint8_t r, uint8_t g, uint8_t b) { return newColor(r, g, b);}
                                                               ^~~~~~~~
C:\Program Files (x86)\Arduino\libraries\TFT\src/utility/Adafruit_ST7735.h:118:63: note: suggested alternative: 'pushColor'
   uint16_t Color565(uint8_t r, uint8_t g, uint8_t b) { return newColor(r, g, b);}
                                                               ^~~~~~~~
                                                               pushColor
C:\Users\xxxx\OneDrive\Documents\Arduino\ventilo_humidite\ventilo_humidite.ino: In function 'void setup()':
ventilo_humidite:52:2: error: 'tft' was not declared in this scope
  tft.setRotation(45);
  ^~~
C:\Users\xxxx\OneDrive\Documents\Arduino\ventilo_humidite\ventilo_humidite.ino: In function 'void loop()':
ventilo_humidite:64:2: error: 'tft' was not declared in this scope
  tft.setTextSize(2);
  ^~~
exit status 1
'tft' was not declared in this scope

Je vois que la bibliothèque TFT renvoie automatiquement vers la Adafruit_ST7735. Donc ma proposition ne fonctionne pas.
Re teste le code complet...

Pourquoi dis-tu :

l'écran utilisé est un ST7735 1.8 TFT, donc je n'ai rien qui s'affiche sur l'écran. (normal)

Tu connais la référence du driver de l'écran ? Pour ces dimensions, c'est normalement le ST7735.
Si c'est un ILI9163, tu peux tester cette bibliothèque :

je disais ça car je pense que l'écran 1.8 TFT SPI n'a pas la même base que le ST7735 (mais je me trompe si je comprends mieux) ^^

avec ton code, j'ai bien un affichage sur l'écran, mais pas dans les bonnes dimensions et beaucoup de perturbation sur l'écran.

Je ne sais pas ce que tu appelles des perturbations... mais s'il affiche quelque chose c'est probablement parce que c'est bien un ST7735.
Tu as le choix entre 2 bibliothèques : Adafruit_ST7735 et TFT. Je pense que la première est mieux.

Si tu l'as installée, tu dois trouver des exemples que tu peux tester. Regarde si tu arrives à avoir quelque chose qui s'affiche avec l'un de ces exemples (comme graphicstest), que tu peux aussi trouver ici :

j'ai vu que certains utilisent des résistances avant de connecter l'écran pour éviter des artefacts sur l'écran (surement du a la platine que j'ai).

j'arrive a ecrire avec les tests sans problemes :slight_smile: maitenant faut que je modifie le code pour la bonne taille de police et d'emplacement sur l'écran.
Merci pour ton savoir et le temps passé.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.