j'ai un problème je veux qu'un Shield écran tactile 2,8'' TF028 positionner sur une carte arduino uno maitre affiche les valeurs du capteur de pollution positionner sur une carte arduino uno esclave grâce a une connexion par I2C. Mais l'écran reste blanc , j'ai fais des tests il marche avec tout type d'affichage (fixe et dynamique) et les valeurs reçus du capteur de pollution son correcte dans le moniteur serie de la carte maitre
voila le code de la carte maitre que j'ai pour l'instant:
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_TFTLCD.h>
#include <MCUFRIEND_kbv.h>
#define LCD_CS A3
#define LCD_CD A2
#define LCD_WR A1
#define LCD_RD A0
#define LCD_RESET A4
#define BLACK 0x0000
#define WHITE 0xFFFF
#define RED 0xF800
MCUFRIEND_kbv tft;
int valeurI2C = 0;
void setup() {
Serial.begin(9600);
Wire.begin();
tft.reset();
uint16_t identifier = tft.readID();
if (identifier == 0x0101) identifier = 0x9341;
tft.begin(identifier);
tft.setRotation(3);
tft.fillScreen(BLACK);
tft.setTextColor(WHITE);
tft.setTextSize(2);
tft.setCursor(30, 50);
tft.println("Valeur I2C:");
}
void loop() {
// Demande la valeur I2C à l'esclave (adresse 8)
Wire.requestFrom(8, 2);
if (Wire.available() == 2) {
byte highByte = Wire.read();
byte lowByte = Wire.read();
valeurI2C = (highByte << 8) | lowByte; // Reconstruction de la valeur
Serial.print("Valeur I2C reçue : ");
Serial.println(valeurI2C);
// **AFFICHAGE TEST SÉCURISÉ**
tft.setTextColor(RED, BLACK); // Efface automatiquement l'ancienne valeur
tft.setTextSize(3);
tft.setCursor(30, 80);
tft.print(" "); // Efface bien la zone avant d'afficher
tft.setCursor(30, 80);
tft.print(valeurI2C);
}
delay(1000);
}
et celui de la carte esclave:
#include <Wire.h>
#define CAPTEUR_AIR A0 // Broche du capteur de pollution
void setup() {
Wire.begin(8); // L'esclave utilise l'adresse 8
Wire.onRequest(sendData); // Définir la fonction de réponse
}
void loop() {
// Rien dans loop(), l'envoi se fait sur demande du maître
}
void sendData() {
int valeurCapteur = analogRead(CAPTEUR_AIR); // Lire le capteur
Wire.write(highByte(valeurCapteur)); // Octet de poids fort
Wire.write(lowByte(valeurCapteur)); // Octet de poids faible
}
j'aimerais savoir d'où vient le problème car c'est lorsque je veux afficher les valeur en direct du capteur que l'ecran reste blanc.
merci de me dire rapidement si il y a une solution pour que mon code fonctionne.
Bonjour,
Les balises de code ne sont pas 3 apostrophes mais 3 backstick.
Le plus simple c'est de cliquer sur l'icone <code/> dans la fenêtre d'édition du message.
Merci de corriger ton message pour rendre le code lisible.
Je n'avais pas vérifié le modèle de l'écran.
Cet écran utilise toutes les broches de la UNO (sauf A5). Tu ne peux rien connecter sur la carte lorsque cet écran est utilisé. Vendre cet écran comme pouvant être utilisé avec une UNO est à mon sens à la limite de l'arnaque.
Typiquement, dans ton cas, le fait de brancher un capteur I2C (qui utilise A4 et A5) sur ta carte va poser un problème car A4 sert au Reset de l'écran.
Pour vérifier le bon fonctionnement de l'écran, si tu déconnectes ton capteur et que tu supprimes le code lié à son utilisation l'écran devrait afficher du texte.
Non, l'I2C n'est disponible que sur A4 et A5 et de toutes les façons toutes les broches sont prises.
Si tu n'as pas peur de mettre les mains dans le cambouis, tu peux déplacer le reset de l'écran.
Il faudrait supprimer la broche A4 sur le shield, soit en la coupant, soit en la dessoudant et tirer un fil, sur le shield, vers le reset de la UNO.