Bonjour,
J'ai pour projet de piloter un funiculaire (celui de Montmartre pour être précis) et de gérer les commandes via un écran TFT Elegoo tactile 320x240 connecté à une mega 2560 de chez AZ_Delivry.
Pour débuter, je veux faire une animation avec une ligne verticale sur laquelle se déplace un triangle pour représenter le mouvement du funiculaire. J'ai 2 boutons, un start qui lance le mouvement, un stop qui l'arrête. Le mouvement doit se répéter dans une boucle pour visualiser au mieux ce qui doit se passer en réalité.
Mon problème est que, même si la boucle s'effectue correctement (semble-t-il) l'affichage n'efface jamais le premier passage et donc on ne voit pas le mouvement se répéter. Je ne comprends pas ce qui dysfonctionne et comme je cherche depuis quelques heures, je pense que je ne vois pas ce qui pourrait vous paraître évident.
Merci pour votre aide
Cordialement.
Voici mon code, pour les branchements, l'écran est simplement placé sur la carte Mega
#include <Elegoo_GFX.h>
#include <Elegoo_TFTLCD.h>
#include <TouchScreen.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 BLUE 0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF
#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
//Touch For New ILI9341 TP
#define TS_MINX 150
#define TS_MAXX 920
#define TS_MINY 150
#define TS_MAXY 920
// We have a status line for like, is FONA working
//#define STATUS_X 10
//#define STATUS_Y 65
//#define SUPPORT_8347D
#define MINPRESSURE 10
#define MAXPRESSURE 1000
Elegoo_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);
boolean boutonstart = true; //valeur du bouton start
boolean boutonstop = false; //valeur du bouton stop
int j = 50; //compteur pour la boucle de la fleche descendante
void setup() {
Serial.begin(9600);
Serial.println("Starting...");
tft.reset();
uint16_t identifier = 0x9341;
tft.begin(identifier);
tft.setRotation(3);
tft.fillScreen(BLACK); //ecrab noir debut
tft.drawRect(0, 0, 319, 240, WHITE); //dessin d'un rectangle général
tft.fillRect(0, 0, 319, 240, BLACK); //dessin d'un rectangle général
//Print "Bienvenue" Text
tft.setCursor(156, 30); //position du texte
tft.setTextColor(WHITE); //couleur du texte
tft.setTextSize(2); //taille du texte
tft.print("Bienvenue"); //texte affich
bstartp(); //dessin du bouton start
bstopp(); //dessin du bouton stop
}
void bstartp() {
// bouton Start en bleu
tft.fillRect(100, 50, 70, 25, BLUE);
tft.drawRect(100, 50, 70, 25, WHITE);
tft.setCursor(105, 55); //largeur, hauteur
tft.setTextColor(WHITE);
tft.setTextSize(2);
tft.print("Start");
delay(10);
}
void bstopp() {
// bouton Stop en rouge
tft.fillRect(200, 50, 70, 25, RED);
tft.drawRect(200, 50, 70, 25, WHITE);
tft.setCursor(205, 55); //largeur, hauteur
tft.setTextColor(BLACK);
tft.setTextSize(2);
tft.print("Stop");
delay(10);
}
void fleb(int k){
// mouvement de la fleche descendante
Serial.println(" fleb efface");
j = k;
while (j<=80) {
Serial.print(j);
Serial.println(" fleb ");
tft.fillRect(45, 50, 11, 100, BLACK); // x,y,w,h
tft.drawFastVLine(50,50,100,WHITE); // x,y,h
tft.drawTriangle(45,j,55,j,50,j+5,WHITE); // x0,y0,x1,y1,x2,y2
delay(10);
j = j + 5;
}
Serial.println(" fin fleb ");
}
void flebs(){
tft.fillRect(45, 50, 11, 100, BLACK); // x,y,w,h
tft.drawFastVLine(50,50,100,RED); // x,y,h
tft.drawTriangle(45,50,55,50,50,55,RED); // x0,y0,x1,y1,x2,y2
}
void loop()
{
if (boutonstart == 1) {
tft.fillRect(45, 50, 11, 100, WHITE); // x,y,w,h
delay(10);
fleb(50);
}
if (boutonstart == 0) {
flebs();
}
digitalWrite(13, HIGH);
TSPoint p = ts.getPoint();
digitalWrite(13, LOW);
if(p.z > MINPRESSURE && p.z < MAXPRESSURE)
{ // touch press?
// X=p.x, Y=p.y; // analyse si appui dans la touche
p.x = map(p.x, TS_MAXX, TS_MINX, 320, 0);
p.y = map(p.y, TS_MAXY, TS_MINY, 240, 0);
// Z = map(p.z, 0, 1000, 0, 10);
Serial.print("Boutonstart = ");
Serial.print(boutonstart);
Serial.print(" large ");
Serial.print(tft.width());
Serial.print(" haut ");
Serial.print(tft.height());
Serial.print(" , X=");
Serial.print(p.x);
Serial.print(" , Y=");
Serial.println(p.y);
if (p.x >= 57 && p.x <= 100 && p.y >= 68 && p.y <= 100){
boutonstop = false;
boutonstart = true;
Serial.println(" bstart ");
}
if (p.x >= 57 && p.x <= 100 && p.y >= 100 && p.y <= 200){
boutonstart = false;
boutonstop = true;
Serial.println(" bstop ");
}
p.x = 0;
p.y = 0;
}
}