Buenas noches.
Comentar que ahora he cambiado la asignación duplicada y cargado, no ha funcionado, pero con la modificación y al añadir la #define <MCUFRIEND_kbv.h> ha funcionado! Ya funciona el tft.
Solo falta el tft touch y cuando tenga mas tiempo conectare el servo.
Muchísimas gracias!
Colgare el proyecto en el vídeo del diseñador para que mas gente lo pueda disfrutar.
//Incluir la librería del servo
#include <Servo.h>
Servo servomotor;
//Incluir las librerías para utilizar la pantalla
#include <TouchScreen.h>
#include <Adafruit_GFX.h>
#include <MCUFRIEND_kbv.h>
#include <UTFTGLUE.h>
#include <stdint.h>
UTFTGLUE myGLCD(0x9486, A2, A1, A3, A4);
//Definir pines para controlar la pantalla
#define XP 9 //Pin de control digital
#define YP A8 //Pin análogo de control
#define XM A9 //Pin análogo de control
#define YM 8 //Pin digital de control
// Definir los niveles de presión mínima y máxima
#define MINPRESSURE 10
#define MAXPRESSURE 1000
//Definir los valores para calibrar la pantalla táctil
#define X_STPT 75 // Valor de X inicial
#define X_ENPT 905 // Valor de X final
#define Y_STPT 145 // Valor de Y inicial
#define Y_ENPT 880 // Valor de Y final
TouchScreen myTouch = TouchScreen(XP, YP, XM, YM, 300);
//Definir códigos de los colores más utilizados
#define NEGRO 0x0000
#define AZUL 0x001F
#define ROJO 0xF800
#define VERDE 0x07E0
#define CIAN 0x07FF
#define MAGENTA 0xF81F
#define AMARILLO 0xFFE0
#define BLANCO 0xFFFF
int led = 10; //Pin PWM donde va conectado el LED
//Define el ancho y largo de la pantalla en pixeles
int x_size = 480; int y_size = 320;
bool settscrsize(int w, int h) {
if ((w <= 0) || (h <= 0)) return false;
x_size = w; y_size = h;
return true;
}
int x, y; //Variables para obtener las coordenadas X y Y donde se presiona la pantalla
void setup() {
//Inicializacion de la pantalla
myGLCD.InitLCD(1); //Inicia en modo horizontal
myGLCD.clrScr();
//Rectángulo para el control del LED
myGLCD.setColor(ROJO);
myGLCD.drawRect(30, 60, 450, 90);
//Rectángulo para el control del servomotor
myGLCD.setColor(VERDE);
myGLCD.drawRect(30, 140, 450, 170);
//Rectangulos para los numeros del display 7 segmentos
myGLCD.setColor(AMARILLO);
myGLCD.drawRoundRect(30, 220, 100, 255);
myGLCD.drawRoundRect(30, 265, 100, 300);
myGLCD.drawRoundRect(110, 220, 180, 255);
myGLCD.drawRoundRect(110, 265, 180, 300);
myGLCD.drawRoundRect(190, 220, 260, 255);
myGLCD.drawRoundRect(190, 265, 260, 300);
myGLCD.drawRoundRect(270, 220, 340, 255);
myGLCD.drawRoundRect(270, 265, 340, 300);
myGLCD.drawRoundRect(350, 220, 420, 255);
myGLCD.drawRoundRect(350, 265, 420, 300);
//Textos
myGLCD.setTextColor(CIAN);
myGLCD.setTextSize(2);
myGLCD.print("Control LED", 30, 30);
myGLCD.print("Control servo", 30, 110);
myGLCD.print("Mostrar en display 7 segmentos:", 30, 190);
//Números en los rectángulos para control del 7 segmentos
myGLCD.setTextColor(CIAN);
myGLCD.print("0", 60, 230);
myGLCD.print("1", 140, 230);
myGLCD.print("2", 220, 230);
myGLCD.print("3", 300, 230);
myGLCD.print("4", 380, 230);
myGLCD.print("5", 60, 275);
myGLCD.print("6", 140, 275);
myGLCD.print("7", 220, 275);
myGLCD.print("8", 300, 275);
myGLCD.print("9", 380, 275);
//Inicialización de los pines del display 7 segmentos
pinMode(22, OUTPUT);
pinMode(23, OUTPUT);
pinMode(24, OUTPUT);
pinMode(25, OUTPUT);
pinMode(26, OUTPUT);
pinMode(27, OUTPUT);
pinMode(28, OUTPUT);
//Inicialización del pin PWM del LED
pinMode(led, INPUT);
//Declaración del pin PWM donde va conectado el servo
servomotor.attach(11); //Pin PWM 6 del Arduino
servomotor.write(10);
}
void loop() {
TSPoint p;
if (checktouch(&myTouch, &p))
{
x = p.x; y = p.y;
//Condicional para manejar la barra de control del LED
if (x >= 30 && x <= 450 && y >= 60 && y <= 90 )
{
myGLCD.setColor(ROJO);
myGLCD.fillRect(30, 60, p.x, 90);
myGLCD.setColor(NEGRO);
myGLCD.fillRect(p.x, 61, 449, 89);
int valor_brillo = map(p.x, 31, 449, 0, 255);
analogWrite(led, valor_brillo);
}
//Condicional para manejar la barra de control del servo
if (x >= 30 && x <= 450 && y >= 140 && y <= 170 )
{
myGLCD.setColor(VERDE);
myGLCD.fillRect(30, 140, p.x, 170);
myGLCD.setColor(NEGRO);
myGLCD.fillRect(p.x, 141, 449, 169);
int angulo_servo = map(p.x, 31, 449, 10, 180);
servomotor.write(angulo_servo);
}
if (x >= 30 && x <= 100 && y >= 220 && y <= 255 )
{
encender (1, 1, 1, 1, 1, 1, 0); //Muestra el numero 0
}
if (x >= 110 && x <= 180 && y >= 220 && y <= 255 )
{
encender (0, 1, 1, 0, 0, 0, 0); //Muestra el numero 1
}
if (x >= 190 && x <= 260 && y >= 220 && y <= 255 )
{
encender (1, 1, 0, 1, 1, 0, 1); //Muestra el numero 2
}
if (x >= 270 && x <= 340 && y >= 220 && y <= 255 )
{
encender (1, 1, 1, 1, 0, 0, 1); //Muestra el numero 3
}
if (x >= 350 && x <= 420 && y >= 220 && y <= 255 )
{
encender (0, 1, 1, 0, 0, 1, 1); //Muestra el numero 4
}
if (x >= 30 && x <= 100 && y >= 265 && y <= 300 )
{
encender (1, 0, 1, 1, 0, 1, 1); //Muestra el numero 5
}
if (x >= 110 && x <= 180 && y >= 265 && y <= 300 )
{
encender (1, 0, 1, 1, 1, 1, 1); //Muestra el numero 6
}
if (x >= 190 && x <= 260 && y >= 265 && y <= 300 )
{
encender (1, 1, 1, 0, 0, 0, 0); //Muestra el numero 7
}
if (x >= 270 && x <= 340 && y >= 265 && y <= 300 )
{
encender (1, 1, 1, 1, 1, 1, 1); //Muestra el numero 8
}
if (x >= 350 && x <= 420 && y >= 265 && y <= 300 )
{
encender (1, 1, 1, 0, 0, 1, 1); //Muestra el numero 9
}
}
}
//Funcion que permite mostrar los numeros del 0 al 9
void encender(int a, int b, int c, int d, int e, int f, int g)
{
//Asigna un segmento del display a cada pin
digitalWrite(22, a); //Asigna el segmento 'a' al pin 22
digitalWrite(23, b); //Asigna el segmento 'b' al pin 23
digitalWrite(24, c); //Asigna el segmento 'c' al pin 24
digitalWrite(25, d); //Asigna el segmento 'd' al pin 25
digitalWrite(26, e); //Asigna el segmento 'e' al pin 26
digitalWrite(27, f); //Asigna el segmento 'f' al pin 27
digitalWrite(28, g); //Asigna el segmento 'g' al pin 28
}
bool checktouch_core(TouchScreen *ts, TSPoint *pp, bool calflg) {
// variables
bool rlt = false;
int rtry = 10;
// Leer el sensor táctil de la pantalla
delay(1);
TSPoint p = ts->getPoint();
if ((p.z < MINPRESSURE) || (p.z > MAXPRESSURE)) goto rsmpt;
if (pp == 0) {
rlt = true;
goto rsmpt;
}
// Volver a leer el sensor táctil
if (p.x < (X_STPT + 100)) {
for (int i = 0 ; i < 2 ; i++) {
delay(1);
p = ts->getPoint();
if (p.x > (X_STPT + 100)) break;
if (p.x == 0) {
if (rtry > 0) {
rtry--;
i = 0;
}
}
}
}
if (p.x == 0) return false;
// Obtener las coordenadas X y Y en donde se toca la pantalla
if (pp != 0) {
#ifdef X_INVERSE
p.x = 1100 - p.x;
#endif
if (calflg) {
pp->x = p.x; pp->y = p.y;
} else {
pp->x = ((long)(p.x - X_STPT) * (long)x_size) / (long)(X_ENPT - X_STPT);
if (pp->x < 0) pp->x = 0;
pp->y = ((long)(p.y - Y_STPT) * (long)y_size) / (long)(Y_ENPT - Y_STPT);
if (pp->y < 0) pp->y = 0; if (pp->y >= y_size) pp->y = y_size - 1;
}
pp->z = p.z;
}
rlt = true;
// Restaurar los pines para volver a ser utilizados para la función táctil
rsmpt:
pinMode(XP, OUTPUT); pinMode(XM, OUTPUT);
pinMode(YP, OUTPUT); pinMode(YM, OUTPUT);
return rlt;
}
// Verificar el sensor touch para usarlo
bool checktouch(TouchScreen *ts, TSPoint *pp) {
return checktouch_core(ts, pp, false);
}