Go Down

Topic: Algunos consejos para usar TFT´s (Read 56829 times) previous topic - next topic

Xabicarba

Muchas gracias, seguro que me es de gran ayuda!!

ansclaudio3

Hola, se puede hacer un dashboard con una tft de 5 pulgadas que hay en mercadolibre? Es para un auto de rally.

daniboy93

#167
Nov 18, 2017, 12:23 am Last Edit: Nov 18, 2017, 03:20 am by surbyte Reason: Enlace sin etiqueta.
Hola buen día a todos, tengo una TFT  que quiero utilizar en un proyecto. la adquirí en ebay dejo el link:

3-5-inch-TFT-LCD-Resistive-Touch-Shield-for-Arduino-Due-MEGA-2560-w-Library


estaba intentando cargar el código de prueba de la librería que esta en la pagina, y no me lo permitía, hasta que desconecte la TFT con su shield,  cargue el programa en mi Mega 2560 y mi sorpresa funcionó, pero al querer modificar el código y cargarlo no me permite cargar a menos que desconecte  el shield. intente ya utilizar adaptador externo,  inclusive para evitar la alimentación de bajo amperaje doblar el pin de 3.3v  y nada.

alguna idea  de cual pueda ser el problema ??   dejo el código de prueba (es un teclado numerico)  para que corroboren que esta correcto.   creo que es mas un problema de alimentación o interferencia al cargar el código

Code: [Select]

/***************************************************
// Web: http://www.buydisplay.com
EastRising Technology Co.,LTD
Examples for ER-TFTM035-6 with Resistive Touch Panel
Software SPI/8080 16-bit Parallel Interface 3.3V Power Supply
****************************************************/

#include <UTFT.h>
#include <UTouch.h>

// parallel 8080 16BIT
// Initialize display
// Library only supports software SPI at this time
//Arduino DUE,Arduino mega2560
UTFT myGLCD(ILI9488_16,7,38,9,10);    //(byte model, int RS, int WR, int CS, int RST, int SER)
UTouch  myTouch( 2, 6, 3, 4, 5);      //RTP: byte tclk, byte tcs, byte din, byte dout, byte irq

// Declare which fonts we will be using
extern uint8_t BigFont[];

int x, y;
char stCurrent[20]="";
int stCurrentLen=0;
char stLast[20]="";

/*************************
**   Custom functions   **
*************************/

void drawButtons()
{
// Draw the upper row of buttons
  for (x=0; x<5; x++)
  {
    myGLCD.setColor(0, 0, 255);
    myGLCD.fillRoundRect (10+(x*60), 10, 60+(x*60), 60);
    myGLCD.setColor(255, 255, 255);
    myGLCD.drawRoundRect (10+(x*60), 10, 60+(x*60), 60);
    myGLCD.printNumI(x+1, 27+(x*60), 27);
  }
// Draw the center row of buttons
  for (x=0; x<5; x++)
  {
    myGLCD.setColor(0, 0, 255);
    myGLCD.fillRoundRect (10+(x*60), 70, 60+(x*60), 120);
    myGLCD.setColor(255, 255, 255);
    myGLCD.drawRoundRect (10+(x*60), 70, 60+(x*60), 120);
    if (x<4)
      myGLCD.printNumI(x+6, 27+(x*60), 87);
  }
  myGLCD.print("0", 267, 87);
// Draw the lower row of buttons
  myGLCD.setColor(0, 0, 255);
  myGLCD.fillRoundRect (10, 130, 150, 180);
  myGLCD.setColor(255, 255, 255);
  myGLCD.drawRoundRect (10, 130, 150, 180);
  myGLCD.print("Clear", 40, 147);
  myGLCD.setColor(0, 0, 255);
  myGLCD.fillRoundRect (160, 130, 300, 180);
  myGLCD.setColor(255, 255, 255);
  myGLCD.drawRoundRect (160, 130, 300, 180);
  myGLCD.print("Enter", 190, 147);
  myGLCD.setBackColor (0, 0, 0);
}

void updateStr(int val)
{
  if (stCurrentLen<20)
  {
    stCurrent[stCurrentLen]=val;
    stCurrent[stCurrentLen+1]='\0';
    stCurrentLen++;
    myGLCD.setColor(0, 255, 0);
    myGLCD.print(stCurrent, LEFT, 224);
  }
  else
  {
    myGLCD.setColor(255, 0, 0);
    myGLCD.print("BUFFER FULL!", CENTER, 192);
    delay(500);
    myGLCD.print("            ", CENTER, 192);
    delay(500);
    myGLCD.print("BUFFER FULL!", CENTER, 192);
    delay(500);
    myGLCD.print("            ", CENTER, 192);
    myGLCD.setColor(0, 255, 0);
  }
}

// Draw a red frame while a button is touched
void waitForIt(int x1, int y1, int x2, int y2)
{
  myGLCD.setColor(255, 0, 0);
  myGLCD.drawRoundRect (x1, y1, x2, y2);
  while (myTouch.dataAvailable())
    myTouch.read();
  myGLCD.setColor(255, 255, 255);
  myGLCD.drawRoundRect (x1, y1, x2, y2);
}

/*************************
**  Required functions  **
*************************/

void setup()
{// The following two lines are needed for the  display
// module to enable the backlight. If you are using any other
// display module these lines should be commented out.
// -------------------------------------------------------------
//  pinMode(41, OUTPUT);
//  digitalWrite(41, HIGH);
// -------------------------------------------------------------
// Initial setup
  myGLCD.InitLCD();
  myGLCD.clrScr();

  myTouch.InitTouch();
  myTouch.setPrecision(PREC_MEDIUM);

  myGLCD.setFont(BigFont);
  myGLCD.setBackColor(0, 0, 255);
  drawButtons();  
}

void loop()
{
  while (true)
  {
    if (myTouch.dataAvailable())
    {
      myTouch.read();
      x=myTouch.getX();
      y=myTouch.getY();
      
      if ((y>=10) && (y<=60))  // Upper row
      {
        if ((x>=10) && (x<=60))  // Button: 1
        {
          waitForIt(10, 10, 60, 60);
          updateStr('1');
        }
        if ((x>=70) && (x<=120))  // Button: 2
        {
          waitForIt(70, 10, 120, 60);
          updateStr('2');
        }
        if ((x>=130) && (x<=180))  // Button: 3
        {
          waitForIt(130, 10, 180, 60);
          updateStr('3');
        }
        if ((x>=190) && (x<=240))  // Button: 4
        {
          waitForIt(190, 10, 240, 60);
          updateStr('4');
        }
        if ((x>=250) && (x<=300))  // Button: 5
        {
          waitForIt(250, 10, 300, 60);
          updateStr('5');
        }
      }

      if ((y>=70) && (y<=120))  // Center row
      {
        if ((x>=10) && (x<=60))  // Button: 6
        {
          waitForIt(10, 70, 60, 120);
          updateStr('6');
        }
        if ((x>=70) && (x<=120))  // Button: 7
        {
          waitForIt(70, 70, 120, 120);
          updateStr('7');
        }
        if ((x>=130) && (x<=180))  // Button: 8
        {
          waitForIt(130, 70, 180, 120);
          updateStr('8');
        }
        if ((x>=190) && (x<=240))  // Button: 9
        {
          waitForIt(190, 70, 240, 120);
          updateStr('9');
        }
        if ((x>=250) && (x<=300))  // Button: 0
        {
          waitForIt(250, 70, 300, 120);
          updateStr('0');
        }
      }

      if ((y>=130) && (y<=180))  // Upper row
      {
        if ((x>=10) && (x<=150))  // Button: Clear
        {
          waitForIt(10, 130, 150, 180);
          stCurrent[0]='\0';
          stCurrentLen=0;
          myGLCD.setColor(0, 0, 0);
          myGLCD.fillRect(0, 224, 319, 239);
        }
        if ((x>=160) && (x<=300))  // Button: Enter
        {
          waitForIt(160, 130, 300, 180);
          if (stCurrentLen>0)
          {
            for (x=0; x<stCurrentLen+1; x++)
            {
              stLast[x]=stCurrent[x];
            }
            stCurrent[0]='\0';
            stCurrentLen=0;
            myGLCD.setColor(0, 0, 0);
            myGLCD.fillRect(0, 208, 319, 239);
            myGLCD.setColor(0, 255, 0);
            myGLCD.print(stLast, LEFT, 208);
          }
          else
          {
            myGLCD.setColor(255, 0, 0);
            myGLCD.print("BUFFER EMPTY", CENTER, 192);
            delay(500);
            myGLCD.print("            ", CENTER, 192);
            delay(500);
            myGLCD.print("BUFFER EMPTY", CENTER, 192);
            delay(500);
            myGLCD.print("            ", CENTER, 192);
            myGLCD.setColor(0, 255, 0);
          }
        }
      }
    }
  }
}

TFTLCDCyg

#168
Nov 18, 2017, 09:10 pm Last Edit: Nov 18, 2017, 09:20 pm by TFTLCDCyg
No parece un tema de librerías, pero quizás puedas intentarlo, me da que es un tema de fallo físico.

Mi recomendación es que contactes al vendedor. En segundo lugar intenta usando la librería oficial del fabricante:

http://www.buydisplay.com/default/arduino-3-5-tft-lcd-touch-shield-serial-spi-example-for-mega-due

Ese comportamiento es posible que tenga que ver con la configuración del shield, en la página del fabricante está disponible la documentación.

Quizás alguno (o algunos) de los pines del shield no está haciendo buen contacto con la placa arduino, verifica que no haya alguno doblado y trata de alinearlos lo más posible.

Eso lo estoy experimentando ahora en el proyecto en curso con una STM32F746IG (Core7XXI),  un solo hilo que falle en el contacto, basta para hacer fallar a todo el arreglo...



He notado que los headers de las placas arduino, últimamente son muy débiles, sobre todo en las placas clones. En este caso solo queda cambiarlos por headers nuevos, todo un lío.

Es una pena pensé que esos TFT tendrían mejores estándares de calidad.

TFTLCDCyg

#169
Dec 12, 2017, 09:22 am Last Edit: Dec 12, 2017, 09:24 am by TFTLCDCyg
Luego de un tiempo va reduciéndose la carga de urgentes en el trabajo y permite espacio para retomar los hobbies.

Hace un tiempo he estado tratando de entender como es que se puede hacer funcionar la librería para gameduino 2 en placas STM32. Parece que los progresos en el equipo FT81xmania nos han ocupado con mas tiempo aún. Viene un cisma con el inminente arribo del shield oficial gameduino 3, así como la librería oficial respectiva, que llevará al límite las capacidades de las pantallas FT8XX.

ILI9341 en ESP32

Con el arribo de las placas ESP32, también le he dedicado un tiempo a entender como funciona el bus SPI en ellas, poco a poco van saliendo a la luz las librerías porteadas desde librerías conocidas, y con las que ya estamos familiarizados en el entorno arduino, teensy o STM32.

Uno de los chips controladores de pantallas es el ILI9341; conservo aún varias pantallas SPI con este controlador y decidí darle una oportunidad más, para poder hacerlo funcionar en placas ESP32, en específico en la placa ESP32 Dev Module o DOIT ESP32 DEVKIT V1.

La mejor librería que podemos usar es esta TFT_eSPI, desarrolada y soportada por un forero frecuente: bodmer


DAVID2134

Buenos días,

Soy algo nuevo en esto de las pantallas TFT. He comprando un a pantalla de 4D SYSTEMS FT843 con ADAM. Cargue la libreria de GAMEDUINO2 y funciona bastante bien, pero lo que veo es que el tactil no esta calibrado, en los ejemplos, no responde a la zona en donde tocas. ¿a que puede ser debido? hay alguna forma de calibrarla?

Gracias

TFTLCDCyg

¿Qué MCU estas usando?

Por allí podemos partir para averiguar qué está pasando. La combinación FT843+ADAM es bastante noble

DAVID2134

Para hacer unas pruebas estoy usando Arduino UNO, pero para el proyecto final tengo un Mega. Ya he conseguido calibrarla, lo había hecho mal desde el principio.


DAVID2134

#173
Jun 04, 2018, 07:04 pm Last Edit: Jun 04, 2018, 11:59 pm by DAVID2134

Tengo otro pequeño problemilla, por si me puedes ayudar. Quiero mediante pulsadores digitales encender unos reles, estoy haciendo unas pruebas para encender unos led. El primer led me lo enciende y me lo apaga bien, pero en el otro pulsador no me funciona. Me podrías ayudar con el código.

EL CÓDIGO QUE ESTOY USANDO ES EL SIGUIENTE.
Code: [Select]


#include <EEPROM.h>
#include <SPI.h>
#include <GMD2.h>

int a = 0;
int led = 8;
int led1 = 7;

void setup()
{
pinMode(led,OUTPUT);
pinMode(led1,OUTPUT);
Serial.begin (9600);
GD.begin(0);
//  GD.Clear();
GD.begin(RECTS);

}

void loop()
{

GD.cmd_gradient(0,0, 0x0060c0,0, 271, 0x06000);

GD.cmd_text( 240, 12, 29, OPT_CENTER, "CONTROL ENCENDIDO APARATOS");
GD.PointSize(16*30);
GD.Begin(POINTS);
GD.ColorA(128);
GD.ColorRGB(0xff8000);
GD.Tag(100);
GD.Vertex2ii(220,50);
GD.ColorRGB(0x0080ff);
//GD.Tag(255);
GD.Tag(101);
GD.Vertex2ii(260,170);
GD.ColorRGB(0x000000);
GD.cmd_text( 260, 170, 31, OPT_CENTER, "2");
//GD.Tag(255);
//GD.LineWidth(10*16); /// curvatura de las esquinas cuadrado
GD.Begin(RECTS);
GD.ColorRGB(0xC5C7F4);
GD.Tag(102);
GD.Vertex2ii(400,80); // X-inixio Y-inicio
GD.Vertex2ii(350, 130); // X-final Y-final


GD.swap();


GD.get_inputs();
Serial.println(GD.inputs.tag);

if (GD.inputs.tag==101){
        delay(195);
       if (a==0){
                           
        Serial.println("led apagado");
      digitalWrite(led,LOW);
      a = 1;
        delay(500);
        }
        else if (a==1){
        Serial.println("led encendido");
        digitalWrite(led,HIGH);          
       a = 0;
        delay (500);
        }

if (GD.inputs.tag==102){
        delay(195);
       if (a==0){
                           
        Serial.println("led apagado");
      digitalWrite(led1,LOW);
      a = 1;
        delay(500);
        }
        else if (a==1){
        Serial.println("led encendido");
        digitalWrite(led1,HIGH);          
       a = 0;
        delay (500);
        }


Gracias

       
   

TFTLCDCyg

Tengo otro pequeño problemilla, por si me puedes ayudar. Quiero mediante pulsadores digitales encender unos reles, estoy haciendo unas pruebas para encender unos led. El primer led me lo enciende y me lo apaga bien, pero en el otro pulsador no me funciona. Me podrías ayudar con el código.

EL CÓDIGO QUE ESTOY USANDO ES EL SIGUIENTE.
Code: [Select]


#include <EEPROM.h>
#include <SPI.h>
#include <GMD2.h>

int a = 0;
int led = 8;
int led1 = 7;

void setup()
{
pinMode(led,OUTPUT);
pinMode(led1,OUTPUT);
Serial.begin (9600);
GD.begin(0);
//  GD.Clear();
GD.begin(RECTS);

}

void loop()
{

GD.cmd_gradient(0,0, 0x0060c0,0, 271, 0x06000);

GD.cmd_text( 240, 12, 29, OPT_CENTER, "CONTROL ENCENDIDO APARATOS");
GD.PointSize(16*30);
GD.Begin(POINTS);
GD.ColorA(128);
GD.ColorRGB(0xff8000);
GD.Tag(100);
GD.Vertex2ii(220,50);
GD.ColorRGB(0x0080ff);
//GD.Tag(255);
GD.Tag(101);
GD.Vertex2ii(260,170);
GD.ColorRGB(0x000000);
GD.cmd_text( 260, 170, 31, OPT_CENTER, "2");
//GD.Tag(255);
//GD.LineWidth(10*16); /// curvatura de las esquinas cuadrado
GD.Begin(RECTS);
GD.ColorRGB(0xC5C7F4);
GD.Tag(102);
GD.Vertex2ii(400,80); // X-inixio Y-inicio
GD.Vertex2ii(350, 130); // X-final Y-final


GD.swap();


GD.get_inputs();
Serial.println(GD.inputs.tag);

if (GD.inputs.tag==101){
        delay(195);
       if (a==0){
                          
        Serial.println("led apagado");
      digitalWrite(led,LOW);
      a = 1;
        delay(500);
        }
        else if (a==1){
        Serial.println("led encendido");
        digitalWrite(led,HIGH);          
       a = 0;
        delay (500);
        }

if (GD.inputs.tag==102){
        delay(195);
       if (a==0){
                          
        Serial.println("led apagado");
      digitalWrite(led1,LOW);
      a = 1;
        delay(500);
        }
        else if (a==1){
        Serial.println("led encendido");
        digitalWrite(led1,HIGH);          
       a = 0;
        delay (500);
        }


Gracias

      
  

La programación de estas pantallas es diferente a lo que has podido usar hasta antes de tu FT843. Hay que adaptarse al sistema de refresco que tiene el chip controlador.

Si usas la programación habitual la pantalla no responderá.

Code: [Select]
#include <EEPROM.h>
#include <SPI.h>
#include <GMD2.h>

int a, b;

void setup()
{
   GD.begin();
   MP();
}
void loop(){}

void MP()
{
 while(1){
 GD.get_inputs();
 GD.Clear();
 GD.cmd_gradient(0,0, 0x0060c0,0, GD.h/1.5, 0x06000);
 
 GD.cmd_text( GD.w/2, 12, 29, OPT_CENTER, "CONTROL ENCENDIDO APARATOS");
  
 
  GD.Begin(POINTS);  GD.PointSize(16*40);    
    
  GD.RestoreContext();

  GD.SaveContext();    
  if(a==0)
    {
     GD.ColorRGB(0x550000);
     GD.Begin(RECTS);
     GD.Vertex2f(16*350,16*65); // X-inixio Y-inicio
     GD.Vertex2f(16*400, 16*105); // X-final Y-final

     GD.Begin(POINTS);  GD.PointSize(16*40);
     GD.ColorRGB(0xff8000);
     GD.Tag(100); GD.Vertex2ii(220,85);
          
     GD.ColorRGB(0x000000);  GD.cmd_text( 220, 85, 31, OPT_CENTER, "Off");
     GD.Tag(255);
    }

  if(a==1)
    {
     GD.ColorRGB(0x005500);
     GD.Begin(RECTS);
     GD.Vertex2f(16*350,16*65); // X-inixio Y-inicio
     GD.Vertex2f(16*400, 16*105); // X-final Y-final

     GD.Begin(POINTS);  GD.PointSize(16*40);
     GD.ColorRGB(0xff8000);
     GD.Tag(100); GD.Vertex2ii(220,85);
    
     GD.ColorRGB(0x000000);  GD.cmd_text( 220, 85, 31, OPT_CENTER, "On");
     GD.Tag(255);
    }
  GD.RestoreContext();


  GD.SaveContext();
  if(b==0)
    {
     GD.ColorRGB(0x550000);
     GD.Begin(RECTS);
     GD.Vertex2f(16*350,16*150); // X-inixio Y-inicio
     GD.Vertex2f(16*400, 16*190); // X-final Y-final

     GD.Begin(POINTS);  GD.PointSize(16*40);
     GD.ColorRGB(0x0080ff);
     GD.Tag(101); GD.Vertex2ii(220,170);
          
     GD.ColorRGB(0x000000);  GD.cmd_text( 220, 170, 31, OPT_CENTER, "Off");
     GD.Tag(255);
    }

  if(b==1)
    {
     GD.ColorRGB(0x005500);
     GD.Begin(RECTS);
     GD.Vertex2f(16*350,16*150); // X-inixio Y-inicio
     GD.Vertex2f(16*400, 16*190); // X-final Y-final

     GD.Begin(POINTS);  GD.PointSize(16*40);
     GD.ColorRGB(0x0080ff);
     GD.Tag(101); GD.Vertex2ii(220,170);
          
     GD.ColorRGB(0x000000);  GD.cmd_text( 220, 170, 31, OPT_CENTER, "On");
     GD.Tag(255);
    }
   GD.RestoreContext();

 if (GD.inputs.tag==100){delay(195);  a=a+1;  if(a>=2){a=0;}}
 if (GD.inputs.tag==101){delay(195);  b=b+1;  if(b>=2){b=0;}}
 
 GD.swap();
 }
}


El uso del loop principal causa algunos errores bastante difíciles de rastrear, es mejor usar un sistema de funciones independientes, de esta forma la pantalla no entra en conflictos. Dale una mirada al ejemplo anterior para que te des una idea. Tiene dos pulsadores con dos leds simulados, bastará con que ingreses los llamados de los leds que quieres controlar

DAVID2134

En la pantalla los led simulados se enciende y apagan correctamente, solo he tenido que cambiar "GD.h/1.5" y "GD.w/2" por los valores, porque me daba error. He configurado la salida del led, pero no se enciende. ¿hay que hacer algo mas? Te dejo en código con lo que he añadido.



Code: [Select]


#include <EEPROM.h>
#include <SPI.h>
#include <GMD2.h>

int a, b;
const int ledPIN = 8;

void setup()
{
   GD.begin();
   MP();
   pinMode(ledPIN,OUTPUT);
   
   
}
void loop(){}



void MP()
{
 
 while(1){
 GD.get_inputs();
 GD.Clear();
 GD.cmd_gradient(0,0, 0x0060c0,0, 271, 0x06000);
 
 GD.cmd_text( 240, 12, 29, OPT_CENTER, "CONTROL ENCENDIDO APARATOS");
 
 
  GD.Begin(POINTS);  GD.PointSize(16*40);     
     
  GD.RestoreContext();

  GD.SaveContext();     
  if(a==0)
    {
     digitalWrite(ledPIN,LOW); ///LED PIN8 APAGADO
     GD.ColorRGB(0x550000);
     GD.Begin(RECTS);
     GD.Vertex2f(16*350,16*65); // X-inixio Y-inicio
     GD.Vertex2f(16*400, 16*105); // X-final Y-final

     GD.Begin(POINTS);  GD.PointSize(16*40);
     GD.ColorRGB(0xff8000);
     GD.Tag(100); GD.Vertex2ii(220,85);
         
     GD.ColorRGB(0x000000);  GD.cmd_text( 220, 85, 31, OPT_CENTER, "Off");
     GD.Tag(255);
   
    }

  if(a==1)
    {
     digitalWrite(ledPIN,HIGH); //LED PIN8 ENCENDIDO
     GD.ColorRGB(0x005500);
     GD.Begin(RECTS);
     GD.Vertex2f(16*350,16*65); // X-inixio Y-inicio
     GD.Vertex2f(16*400, 16*105); // X-final Y-final

     GD.Begin(POINTS);  GD.PointSize(16*40);
     GD.ColorRGB(0xff8000);
     GD.Tag(100); GD.Vertex2ii(220,85);
     
     GD.ColorRGB(0x000000);  GD.cmd_text( 220, 85, 31, OPT_CENTER, "On");
     GD.Tag(255);
   
    }
  GD.RestoreContext();


  GD.SaveContext();
  if(b==0)
    {
     GD.ColorRGB(0x550000);
     GD.Begin(RECTS);
     GD.Vertex2f(16*350,16*150); // X-inixio Y-inicio
     GD.Vertex2f(16*400, 16*190); // X-final Y-final

     GD.Begin(POINTS);  GD.PointSize(16*40);
     GD.ColorRGB(0x0080ff);
     GD.Tag(101); GD.Vertex2ii(220,170);
         
     GD.ColorRGB(0x000000);  GD.cmd_text( 220, 170, 31, OPT_CENTER, "Off");
     GD.Tag(255);
    }

  if(b==1)
    {
     GD.ColorRGB(0x005500);
     GD.Begin(RECTS);
     GD.Vertex2f(16*350,16*150); // X-inixio Y-inicio
     GD.Vertex2f(16*400, 16*190); // X-final Y-final

     GD.Begin(POINTS);  GD.PointSize(16*40);
     GD.ColorRGB(0x0080ff);
     GD.Tag(101); GD.Vertex2ii(220,170);
         
     GD.ColorRGB(0x000000);  GD.cmd_text( 220, 170, 31, OPT_CENTER, "On");
     GD.Tag(255);
    }
   GD.RestoreContext();

 if (GD.inputs.tag==100){delay(195);  a=a+1;  if(a>=2){a=0;}}
 if (GD.inputs.tag==101){delay(195);  b=b+1;  if(b>=2){b=0;}}
 
 GD.swap();
 }
}



Gracias

DAVID2134

Hola.
Estoy intentando que me salga la temperatura tambien en la FT843 y no sale. Uso una sonda NTC 10k, en el puerto serie si me indica la temperatura, pero en la pantalla sale algo borroso y no se ve. ¿ a que puede ser debido?

lightcalamar

Prueba a poner el código que has usado y se te pueda ayudar.

Saludos.
Mi proyecto Radio FM con RDS -  MDC v1.0;
https://forum.arduino.cc/index.php?topic=400484.0
https://forum.arduino.cc/index.php?topic=448606.0
https://github.com/lightcalamar

TFTLCDCyg

#178
Jun 12, 2018, 06:22 am Last Edit: Jun 12, 2018, 06:39 am by TFTLCDCyg
La mezcla de códigos separados tiene que tener como base el conocimiento correcto de los componentes que quieres unir.

En el caso de los leds que quieres controlar, te sugiero revisarlos con los códigos básicos de toda la vida.

En la placa STM32 nucleo-F767ZI vienen tres leds abordo, por lo que me es posible hacer algunas pruebas solo conectando la pantalla con chip FTDI, en este caso usaré una FT813 de 5" de Newhaven display.

Primero revisaremos el comportamiento básico de cada uno de los tres leds:

Code: [Select]
int led0 = PB0;  //PB7(azul), PB0(verde), PB14(rojo)
int led1 = PB7;
int led2 = PB14;

void setup() {               
  pinMode(led0, OUTPUT);
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  MP();   
}
void loop(){}


void MP()
{
  int contador;
  while(1)
  {
    contador=contador+1;
    if(contador>=3){contador=0;}
    delay(250);
    if(contador==0){digitalWrite(led0, HIGH); digitalWrite(led1, LOW); digitalWrite(led2, LOW);}
    if(contador==1){digitalWrite(led0, LOW); digitalWrite(led1, HIGH); digitalWrite(led2, LOW);}
    if(contador==2){digitalWrite(led0, LOW); digitalWrite(led1, LOW); digitalWrite(led2, HIGH);}
  }
}


En tu caso debes usar los pines digitales de tu arduino en los que tienes conectados los leds.

El equivalente sin delay

Code: [Select]
int led0 = PB0;  //PB7(azul), PB0(verde), PB14(rojo)
int led1 = PB7;
int led2 = PB14;

long previousMillis = 0; long interval = 250;   

void setup() {               
  pinMode(led0, OUTPUT);
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  MP();   
}
void loop(){}

void MP()
{
  int contador;
  while(1)
  {
    unsigned long currentMillis = millis();
    if(currentMillis - previousMillis > interval)
    {
      previousMillis = currentMillis;   
     
      contador=contador+1;
      if(contador>=3){contador=0;}
     
      if(contador==0){digitalWrite(led0, HIGH); digitalWrite(led1, LOW); digitalWrite(led2, LOW);}
      if(contador==1){digitalWrite(led0, LOW); digitalWrite(led1, HIGH); digitalWrite(led2, LOW);}
      if(contador==2){digitalWrite(led0, LOW); digitalWrite(led1, LOW); digitalWrite(led2, HIGH);}
    }
  }
}


El siguiente paso es usar el código de los botones.

PD: recuerda que en estas pantallas el uso de void loop causa algunos problemas, por lo que es mejor el uso de instrucciones que permiten obtener bucles infinitos como while.

DAVID2134

El codigo que uso para la temperatura es este. En el serial si me indica bien la temperatura pero en la FT843 no me sale nada. Tampoco me sale el simbolo de °(grado) si lo pongo..hay que crear el caracter como pasa en los lcd?

Gracias

Code: [Select]

# include <EEPROM.h>
# include <SPI.h>
# include <GMD2.h>
# include <math.h><br>


void setup()

 {

GD.begin();
Serial.begin(115200);
}

Double Thermister(int RawADC){
Double Temp;
Temp = long (((10240000/RawADC)-10000));
Temp = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * Temp * Temp))*Temp);
Temp = Temp - 273.15; // convierte de Kelvin a Celsius

}

 

void loop()

 {

Int val;
double temp;
val=analogRead(0);
temp=Thermister(val);
Serial.println(temp);

 GD.ClearColorRGB(0x103000);
GD.Clear();
GD.cmd_text(240, 136, 31, OPT_CENTER, temp);
GD.swap();

 }

 

Go Up