Go Down

Topic: Problème écran LCD tactile (Read 460 times) previous topic - next topic

Pipix77400

Jun 17, 2018, 08:50 pm Last Edit: Jun 17, 2018, 08:51 pm by Pipix77400
Bonjour a tous,

J'essaye de faire fonctionner un écran LCD tactile. Pour le moment je ne suis pas encore attaqué mon projet, j'essaie juste de comprendre le fonctionnement au point de vue programmation. J'ai réussi à afficher du texte et à faire fonctionner un relais en interaction avec la parti tactile. J'ai raccordé sur l'arduino via un pont diviseur de tension une image de la tension de ma batterie de 12v, celle ci s'affiche bien au démarrage mais la tension finie par devenir illisible au fur et à mesure que celle ci change (les chiffres sont remplacé par des amas de pixels... De plus quand je clique sur l'un des deux boutons sur le pavé tactile, le relais s'enclenche  bien mais rien ne s'affiche à l'écran (que je veuille introduire du texte ou une changement de couleur rien ne marche), je pense que celui-ci ne se rafraîchi pas.. Auriez vous une idée de pourquoi ? Je n'arrive pas à comprendre.

Cordialement  

lesept

Pour afficher un texte qui change, il faut d'abord l'effacer : soit tu écris à la place des espaces, soit tu traces un rectangle de la couleur du fond. Ensuite tu écris le nouveau texte.
Quote
De plus quand je clique sur l'un des deux boutons sur le pavé tactile, le relais s'enclenche  bien mais rien ne s'affiche à l'écran (que je veuille introduire du texte ou une changement de couleur rien ne marche)
Ça, ça dépend de ton code. Poste le ça nous aidera à t'aider. Le "pavé tactile", c'est une zone de ton écran où tu as dessine des boutons ?
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

J-M-L

#2
Jun 18, 2018, 05:28 am Last Edit: Jun 18, 2018, 05:29 am by J-M-L
Vos images:





Oui typique du soucis d'effacement avant de déssiner quelque part mais sans code difficile de vous aider. il faut ré-afficher votre fond vert sous les chiffres
Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

Pipix77400

Bonjour,
Merci pour vos réponse, voici le code que j'ai crée, il permet d'afficher la tension d'une batterie de 12volts via un pont diviseur de tension et l'intensité via un tores à effet hall. J'ai également dessiné deux carré (rouge & vert) afin de simuler deux interrupteurs qui enclenche un relais.



#include <Adafruit_GFX.h>    // Core graphics library
//#include <Adafruit_TFTLCD.h> // Hardware-specific library
#include <TouchScreen.h>

#if defined(__SAM3X8E__)
    #undef __FlashStringHelper::F(string_literal)
    #define F(string_literal) string_literal
#endif


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

#define TS_MINY 75
#define TS_MAXY 930
#define TS_MINX 130
#define TS_MAXX 905

TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);

#define LCD_CS A3
#define LCD_CD A2
#define LCD_WR A1
#define LCD_RD A0
#define LCD_RESET A4

// 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



#define BOXSIZE 40
#define PENRADIUS 2
int oldcolor, currentcolor;
int PinAnalogiqueBatterie=8;
int PinAnalogiqueIntensite=7;
int PinAnalogiqueValeurDeReference=9;
float batterie;
float lectBatterie;
float intensite;
float valeureDeReference;

#include <MCUFRIEND_kbv.h>
MCUFRIEND_kbv tft;

void setup(void) {
  Serial.begin(9600);
  Serial.println(F("TFT LCD test"));
tft.reset();
 uint16_t identifier = tft.readID();
   pinMode(PinAnalogiqueBatterie, INPUT);
   pinMode(PinAnalogiqueIntensite, INPUT);
   pinMode(PinAnalogiqueValeurDeReference, INPUT);
   pinMode(pompe, OUTPUT);
   
 

 Serial.print(batterie);

 
    tft.begin(identifier);
 
   
  Serial.print("TFT size is "); Serial.print(tft.width()); Serial.print("x"); Serial.println(tft.height());
 tft.fillScreen(BLACK);
  tft.fillRect(300, 0, 25, 500, GREEN);

  #define MINPRESSURE 10
#define MAXPRESSURE 1000
}
void loop(){
 
  pinMode(XM, OUTPUT);
  pinMode(YP, OUTPUT);

 tft.setRotation(0);   // Rotation de l'écran

 
   
  tft.setRotation(1);
  tft.setCursor(80, 0);
  tft.setTextColor(WHITE);
  tft.setTextSize(2);
  tft.print("Volts:");
  tft.setCursor(250, 0);
  tft.print("Intensite:");


 
 lectBatterie = analogRead(PinAnalogiqueBatterie);
 float valeurVolt = (lectBatterie*5/1023);
 batterie = (valeurVolt*14.4/4.8);
 tft.setCursor(150, 0);
 tft.print(batterie);
 tft.print("V");

 
 intensite = analogRead(PinAnalogiqueIntensite);
 valeureDeReference = analogRead(PinAnalogiqueValeurDeReference);
 float intensiteconvertie = (intensite - valeureDeReference);
float intensiteconverties = intensiteconvertie/8.525;
tft.setCursor(380, 0);
tft.print(intensiteconverties);
tft.print("A");

tft.fillRect(200, 60, 50, 50, GREEN);
tft.fillRect(200, 200, 50, 50, RED);
  TSPoint p = ts.getPoint();
 
  if (p.z > ts.pressureThreshhold) {
     Serial.print("X = "); Serial.print(p.x);
     Serial.print("\tY = "); Serial.print(p.y);
     Serial.print("\tPressure = "); Serial.println(p.z);
  }

  if((p.x < 513 & p.x > 425) & (p.y < 388 & p.y > 254) & p.z > ts.pressureThreshhold){
   
   digitalWrite(pompe, LOW);
 
   
   
  }
 
if((p.x < 517 & p.x > 429) & (p.y < 744 & p.y > 623) & p.z > ts.pressureThreshhold){
  digitalWrite(pompe, HIGH);
}
}


Cordialement,

lesept

Un test 'et' c'est && (pas &) :
Code: [Select]
  if((p.x < 513 && p.x > 425) && (p.y < 388 && p.y > 254) && p.z > ts.pressureThreshhold){

  if((p.x < 517 && p.x > 429) && (p.y < 744 && p.y > 623) && p.z > ts.pressureThreshhold){
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

kamill

Bonjour,

Mets ton code entre balises

Pour effacer le caractère du dessous il faut préciser la couleur du fond.
remplace
Code: [Select]
tft.setTextColor(WHITE);
par
Code: [Select]
tft.setTextColor(WHITE,GREEN);

Pipix77400

Bonjour,

J'ai rajouté la commande "tft.setTextColor(WHITE,GREEN);" sur mes deux variables à afficher et sa fonctionne parfaitement. Merci beaucoup pour vos aides et votre réactivité !

Cordialement,

Go Up