problema con display elegoo

buonasera a tutti. ho un problema con un display touch della elegoo, caricando i programmi da cd arrivato assieme al display funziona bene sia con ARDUINO 1 CHE CON ARDUINO MEGA. sul forum ho trovato un programma che andrebbe bene per quello che voglio realizzare,purtroppo una volta caricato mi da schermo bianco e non so come risolvere,ringrazio anticipatamente chi mi vorrà aiutare.

#include <stdint.h>
#include <SeeedTouchScreen.h>
#include <TFTv2.h>
#include <SPI.h>

TouchScreen ts = TouchScreen(XP, YP, XM, YM);
int rele1 = 22;
int rele2 = 24;
int rele3 = 26;
int rele4 = 28;

void setup()
{
  TFT_BL_ON;      // turn on the background light
  Tft.TFTinit();  // init TFT library  
  Tft.drawRectangle(5,5,70,48,RED);
  Tft.drawRectangle(5,65,70,48,RED);
  Tft.drawRectangle(5,125,70,48,RED);
  Tft.drawRectangle(5,185,70,48,RED);
  Tft.drawString("OUT 1",10,24,2,RED);
  Tft.drawString("OUT 2",10,84,2,RED);
  Tft.drawString("OUT 3",10,144,2,RED);
  Tft.drawString("OUT 4",10,204,2,RED);
  pinMode(rele1, OUTPUT);
  pinMode(30, OUTPUT);
  pinMode(rele2, OUTPUT);
  pinMode(32, OUTPUT);
  pinMode(rele3, OUTPUT);
  pinMode(34, OUTPUT);
  pinMode(rele4, OUTPUT);
  pinMode(36, OUTPUT);
  pinMode(53, OUTPUT);
}
int on1 = 0;
int on2 = 0;
int on3 = 0;
int on4 = 0;

void loop()
{
Point p = ts.getPoint();
p.x = map(p.x, TS_MINX, TS_MAXX, 0, 240);
p.y = map(p.y, TS_MINY, TS_MAXY, 0, 320);
  
if (p.z > __PRESURE) {
if ( p.x > 5 && p.x < 70 && p.y > 5 && p.y <48) {
      on1 = !on1;
      delay(500);
      digitalWrite(rele1, on1 ? HIGH : LOW);
      digitalWrite(30, on1 ? HIGH : LOW);
      on1 ? Tft.fillRectangle(5,5,70,48,RED) : Tft.fillRectangle(5,5,70,48,BLACK);
      on1 ? Tft.drawString("OUT 1",10,24,2,BLACK) : Tft.drawString("OUT 1",10,24,2,RED);
      on1 ? Tft.drawRectangle(5,5,70,48,RED) : Tft.drawRectangle(5,5,70,48,RED);
    }
  }
  else if ( p.x > 5 && p.x < 70 && p.y > 70 && p.y <118) {
      on2 = !on2;
      delay(500);
      digitalWrite(rele2, on2 ? HIGH : LOW);
      digitalWrite(32, on2 ? HIGH : LOW);
      on2 ? Tft.fillRectangle(5,65,70,48,RED) : Tft.fillRectangle(5,65,70,48,BLACK);
      on2 ? Tft.drawString("OUT 2",10,84,2,BLACK) : Tft.drawString("OUT 2",10,84,2,RED);
      on2 ? Tft.drawRectangle(5,65,70,48,RED) : Tft.drawRectangle(5,65,70,48,RED);
  }
  else if ( p.x > 5 && p.x < 70 && p.y > 130 && p.y <178) {
      on3 = !on3;
      delay(500);
      digitalWrite(rele3, on3 ? HIGH : LOW);
      digitalWrite(34, on3 ? HIGH : LOW);
      on3 ? Tft.fillRectangle(5,125,70,48,RED) : Tft.fillRectangle(5,125,70,48,BLACK);
      on3 ? Tft.drawString("OUT 3",10,144,2,BLACK) : Tft.drawString("OUT 3",10,144,2,RED);
      on3 ? Tft.drawRectangle(5,125,70,48,RED) : Tft.drawRectangle(5,125,70,48,RED);
  }
  else if ( p.x > 5 && p.x < 70 && p.y > 190 && p.y <238) {
      on4 = !on4;
      delay(500);
      digitalWrite(rele4, on4 ? HIGH : LOW);
      digitalWrite(36, on4 ? HIGH : LOW);
      on4 ? Tft.fillRectangle(5,185,70,48,RED) : Tft.fillRectangle(5,185,70,48,BLACK);
      on4 ? Tft.drawString("OUT 4",10,204,2,BLACK) : Tft.drawString("OUT 4",10,204,2,RED);
      on4 ? Tft.drawRectangle(5,185,70,48,RED) : Tft.drawRectangle(5,185,70,48,RED);
  }
}

>LUCA79: ti ricordo che in conformità al regolamento, punto 7, devi editare il tuo post (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More → Modify che si trova in basso a destra del tuo post) e racchiudere il codice all’interno dei tag CODE (… sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra) e NON all’interno dei tag QUOTE (… e devi eliminare anche tutti i tag relativi al colore).

In pratica, tutto il tuo codice (e solo esso senza altri attributi) dovrà trovarsi racchiuso tra due tag: [code] _il _tuo_ codice_ [/code] così da non venire interpretato e non dare adito alla formazione di caratteri indesiderati o cattiva formattazione del testo. Grazie.

Guglielmo

Non avendo quel display, potremmo aiutarti se posti un programma di quelli che funzionano per capire le differenze.

il display della elegoo non è ne I2C ne SPI (perlomeno quelli dei vari kit che conosco sono degli lcd normali e non touch) . Devi collegarlo e usarlo in altro modo, come ti dice appunto l'esempio della elegoo. Questo tra l'altro è per un touch screen :wink:

se al contrario è realmente un touch screen... come non detto :slight_smile:

Come richiesto posto un programma che funziona.
Non ho capito come modificare il post precedente.

phonecal-1.ino (10.4 KB)

LUCA79:
Non ho capito come modificare il post precedente.

Se leggi CON ATTENZIONE il mio post #1 trovi esattamente tutte le indicazioni su cosa devi fare ... ::slight_smile:

Ripeto ... tutto il tuo codice dovrà trovarsi racchiuso tra due tag: [code] _il _tuo_ codice_ [/code] così da non venire interpretato e non dare adito alla formazione di caratteri indesiderati o cattiva formattazione del testo. Devi quindi sostituire i tag QUOTE che hai usato ed inoltre eliminare tutti i tag relativi al colore che troverai quando andrai a modificare.

Guglielmo

Spero di aver modificato correttamente il mio primo post.

Patrick_M:
se al contrario è realmente un touch screen… come non detto :slight_smile:

Sì è realmente un touch screen e con il suo programma di prova funziona come tale.

facendo un confronto veloce tra il tuo programma e quello dell'esempio vedo ci sono una serie di cose "mancanti"...tipo l'inclusione di alcune librerie con, derivante, mancanza di creazione oggetti...come mai?

Quindi cosa mancherebbe nel mio programma per funzionare?

ciao LUCA79,

io non ho capito…nel tuo primo post dici di aver trovato un esempio qui nel forum che farebbe, più o meno, quello che vuoi…ma è riferito allo stesso hardware che hai tu?

nel tuo esempio includi la SPI che poi non usi…o almeno io non ho visto righe che richiamano la SPI.
poi nel codice di esempio c’è scritto (prime righe):

// IMPORTANT: Elegoo_TFTLCD LIBRARY MUST BE SPECIFICALLY
// CONFIGURED FOR EITHER THE TFT SHIELD OR THE BREAKOUT BOARD.
// SEE RELEVANT COMMENTS IN Elegoo_TFTLCD.h FOR SETUP.
//Technical support:goodtft@163.com

#include <Elegoo_GFX.h>    // Core graphics library
#include <Elegoo_TFTLCD.h> // Hardware-specific library
#include <TouchScreen.h>

e quindi devi dare un’occhio a cosa c’è scritto nel Elegoo_TFTLCD.h
poi, nel codice di esempio, ci sono tutta una serie di #define per definire, appunto, cosa fanno certi pin di arduino…che da te non vedo…poi anche #define per colori e dimensioni elementi del touch (pulsanti, testo etc)…

Buongiorno, qualcuno può gentilmente I dicarmi che display ordinare in modo da poter utilizzare il programma del primo post? Il mio della elegoo mi da problemi, e non ho conoscenze sufficienti per modificare le librerie,grazie mille

Ciao,

purtroppo non so indicarti un touch screen adeguato...però, se non ricordo male, con uno sketch di esempio il tutto funzionava...giusto?...era con quello che avevi trovato "in giro" che non funzionava...giusto?
se è così NON devi moficiare la libreria...dei usare la libreria nel modo corretto...penso che se ti hanno fornito un kit con touch screen e libreria...in qualche modo deve funzionare...e comunque nel mio ultimo post c'era anche una mail del loro "technical support" (vedi la parte commentata del codice postato).

Grazie, proverò a contattarli e a chiedere consiglio a loro

Buongiorno a tutti,
continuando a provare sono riuscito ad arrivare ad un programma funzionante in cui ho messo dei pulsanti sul touch screen, che al primo tocco accendono un led ed al secondo lo spengono, o almeno dovrebbero.

il problema è che ne funziona solo uno, il primo, mentre i successivi rilevano il tocco (verificato con il monitor seriale) ma non danno la risposta.

se qualcuno sa darmi una dritta per capire perché succede così e come posso fare per risolvere il problema gliene sarei grato.

modifica_2.ino (10.3 KB)

ciao...da quel che ho visto hai creato un array di oggetti chiamati buttons di 15 elementi (0-14)...ma poi ne inizializzi 8 (?); alla fine del programma, tramite due cicli for() identici ma separati, verifichi questi 8 elementi (0-7)...subito dopo ogni uno di questi due cicli for() hai messo due verifiche if() per vedere se un (uno solo e preciso) pulsante è od era premuto...i due pulsanti sono rispettivamente buttons[1] e buttons[2]...tralasciando lo stile di scrittura...tu che pulsanti stai premendo?

altra cosa dalle varie digitalWrite() in questi if()...stai usando una MEGA?

Ciao, si sto usando un MEGA, sto modificando un programma esistente, i pulsanti che servono sono solo 8, (quel 15 era da correggere) e devono essere 8 uscite separate.
I pulsanti che premo sono quelli che ho costruito sul display.

I pulsanti che premo sono quelli che ho costruito sul display.

ok...ma sono il pulsante 1 e 2 (attenzione che si parte a contare da 0)?
cioè mentre per tutti scrivi se sono stati premuti o meno (due cicli for), solo per quei due pulsanti fai qualche cosa a livello di digitalWrite()...che è più o meno quello che descrivi come "problema".

Ho messo solo 1 e 2 perché ho cominciato con quelli e poi se funziona aggiungo gli altri.

ORSO2001:
ok...ma sono il pulsante 1 e 2 (attenzione che si parte a contare da 0)?

comincerò con il pulsante 0