Go Down

Topic: Librería gameduino 2 modificada para pantallas FT81X  (Read 49404 times) previous topic - next topic

lightcalamar

#150
Apr 18, 2017, 10:16 am Last Edit: Apr 18, 2017, 10:20 am by lightcalamar
Si funcionó correctamente.

Siempre estuve preguntandome del porque usaba la EEPROM en Uno o MEGA, quizas sea debido a la calibración que requiere para ser grabados los datos del táctil.

Pero me pregunto como y donde se guardan los datos en DUE o Teensy... misterios.

He visto un comando llamado Snapshot en la referencia de FTDIChip, la has usado? creo realiza una captura de pantalla de baja resolución. Muy interesante.
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

Teensy cuenta con EEPROM:

Code: [Select]
T35/36   4 Kb
T31/32   2 Kb


El Due no tiene, sin embargo puede usar la orientación del gameduino 2 y usar la calibración default que tiene la librería. Por cierto, hasta la fecha no he instalado el FT813 en el arduino Due...

He visto ese comando, pero de acuerdo con James, la imagen se debe capturar con un programa extra, nuevamente phyton en linux es la solución

lightcalamar

#152
Apr 20, 2017, 09:29 am Last Edit: Apr 20, 2017, 09:32 am by lightcalamar
Realice ayer pruebas sobre capturar la pantalla y anviar al puerto serie de Linux.

El script no es correcto con la comunicación de Arduino. Lo he corregido y es este
Code: [Select]

import sys
import time

import serial

if __name__ == '__main__':
    import sys, getopt
    try:
        optlist, args = getopt.getopt(sys.argv[1:], "vh:s:")

    except getopt.GetoptError, reason:
        print reason
        print
        print 'usage: getppm.py -h <usb port> -s <usb speed>'
        print
        print
        sys.exit(1)
    optdict = dict(optlist)

    if '-s' in optdict:
        speed = int(optdict['-s'])
    else:
        speed = 1000000

    port = optdict.get('-h', "/dev/ttyACM0")
    print 'Opening %s at %d' % (port, speed)
    ser = serial.Serial(port, speed)

    ser.setDTR(0)
    time.sleep(0.1)
    ser.setDTR(1)

    # Expected size of the PPM. 15 bytes for the header, then 480x272 image
    expected_size = 15 + (3 * 480 * 272)
    for frame in xrange(9999):
        s = ser.read(expected_size)
        open("shot%04d.ppm" % frame, "w").write(s)
        print "frame %d written" % frame


Subir el programa y no funcionó.
Por cierto solo funciona en Python v2.7 (a tener en cuenta en Linux).

Exactamente despues de muchos intentos he averiguado que en las pantallas FT81x no funcionará nunca. Leí detenidamente la datasheet del chip FT800Q y este lleva los registros siguientes;
Code: [Select]

 REG_SCREENSHOT_EN  
 REG_SCREENSHOT_Y    
 REG_SCREENSHOT_START
 REG_SCREENSHOT_BUSY  
 REG_SCREENSHOT_READ
 RAM_SCREENSHOT

y en FT81X estos no existen, por lo tanto digo que solo funcionará en FT80X. Leí que parte de suprimir el SCREENSHOT en FT81X es para habilitar la RAM_G alcanzando el mega disponible para el usuario y parte de esta misma se realizó dos funciones;
Code: [Select]

REG_SNAPSHOT
REG_SNAPSHOT2

La primera con una maxima resolucion de 160x120 pixels y la segunda 32x32 por lo tanto afirmo que es imposible capturar la pantalla en FT81X y poder enviarla. Mala suerte.

No obstante no pude probar por tiempo, hoy realizaré la misma prueba pero con FT80X (480x272) y tiene que funcionar. Ademas el script inicializa correctamente la placa Arduino, problema del chip FT81X
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

lightcalamar

Confirmado. Solo funciona con chipFTDI FT80X
Adjunto dos capturas.
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

Interesante lo que estas investigando, pensé que se podría conseguir con las pantallas FT81X, sería increíble poder obtener una captura de la propia librería; pero seguiremos tomando fotos como "turistas japoneses"

Estudiando el GPS que conseguiste en tu proyecto, opté por buscar uno similar pero con algo mas de precisión, decidí conseguir este: UBX-G7020-KT. Acá hay una guía de uso para arduino.

Tengo planeado incorporarlo al dispositivo móvil que estoy construyendo en base a una pantalla FT813, para usarlo en los recorridos en campo y compararlo contra el GPS que tengo para el trabajo, ya tiene unos años y la batería ya le está dando problemas.

Estoy a la espera de la carcasa diseñada para un arduino MEGA, que modificaré para el teensy; ya tengo una placa base donde instalar el teensy 3.2. Luego conseguiré un teensy 3.6 extra.

Conversión de coordenadas geográficas a coordenadas UTM

Le he dedicado un tiempo a estudiar la librería matemática del teensy 3.X y también a las fórmulas que permiten convertir grados decimales a coordenadas UTM. El ejemplo que he podido estudiar, parece que es el mejor que se ha elaborado con este tema y tal parece que varias calculadoras en linea, lo han usado como base. Este es el ejemplo paso a paso: http://www.gabrielortiz.com/index.asp?Info=058a

Todo parte de los trabajos de unos italianos inquietos con este mismo asunto, empleando las fórmulas Coticchia-Surace que son el resultado de sus esfuerzos

Sin mas, éste es el sketch que he podido obtener:

Code: [Select]
#include "arm_math.h"

float64_t a=6378137;
float64_t b=6356752.3142;

float64_t eprima=0.082094438; 
float64_t eprima2=eprima*eprima;
 
  float64_t ce=6399593.5;
  float64_t cc=0.12580398;
  float64_t c=ce+cc;
  float64_t  c9996= (0.9996*c+0.043332661);  //(corrección de c*0.9996)

float64_t LAT=19.310442;   
float64_t LONG=-99.621017;

 

double phi, lambda, Deltalambda, A, epsilon, ro, v, chi, Aa1;
double Aa2, J2, J4, J6, ALPHA, BETA, GAMMA, BPHI, XUTM, YUTM;

//float Pi=3.141592654;
float Pi=PI;

int huso, lambda0;

void setup() {
  Serial.begin(9600);
  while (!Serial) ;
  Serial.println("ARM math Test!");   Serial.println(" ");
  Geo_UTM();
}

void Geo_UTM()
{
  Serial.print(" e'= "); Serial.println(eprima, 8);
  Serial.print("e'2= "); Serial.println(eprima2, 8);
  Serial.print("  c= "); Serial.println(c, 6);
  Serial.print("  c9996= "); Serial.println(c9996, 6);

  Serial.println(" ");
  Serial.print("Latitud:   ");  Serial.println(LAT, 6);
  Serial.print("Longitud: ");  Serial.println(LONG, 6);
  Serial.println(" ");
 
  huso = int((LONG/6)+31);
  Serial.print("   huso=  "); Serial.print(huso);  Serial.println(" (Zona UTM)");

  lambda0=huso*6 - 183;
  Serial.print("lambda0= "); Serial.println(lambda0);
 
     phi = LAT*Pi/180;
  lambda = LONG*Pi/180;
  Serial.print("    phi=  ");  Serial.println(phi, 8);
  Serial.print(" lambda= ");  Serial.println(lambda,8);

  Deltalambda=lambda-(lambda0*Pi/180);
  Serial.print(" Delta lambda= ");  Serial.println(Deltalambda, 6);

  A=arm_cos_f32(phi)*arm_sin_f32(Deltalambda);
  Serial.print(" A= ");  Serial.println(A, 8);

  epsilon=0.5*log((1 + A) / (1 - A));
  Serial.print(" epsilon= ");  Serial.println(epsilon, 8);

  ro= atan(tan(phi) / arm_cos_f32(Deltalambda)) - phi;
  Serial.print(" ro= ");  Serial.println(ro, 8);

  v= c9996/sqrt((1+eprima2*arm_cos_f32(phi)*arm_cos_f32(phi)));
  Serial.print(" v= ");  Serial.println(v, 6);

  chi= 0.5*eprima2*epsilon*epsilon*arm_cos_f32(phi)*arm_cos_f32(phi);
  Serial.print(" chi= ");  Serial.println(chi, 9);

  Aa1= arm_sin_f32(2*phi);
  Serial.print(" Aa1= ");  Serial.println(Aa1, 9);

  Aa2= Aa1*arm_cos_f32(phi)*arm_cos_f32(phi);
  Serial.print(" Aa2= ");  Serial.println(Aa2, 9);

  J2= phi+0.5*Aa1;
  Serial.print(" J2= ");  Serial.println(J2, 9);

  J4= (3*J2+Aa2)/4;
  Serial.print(" J4= ");  Serial.println(J4, 9);

  J6= (5*J4+Aa2*arm_cos_f32(phi)*arm_cos_f32(phi))/3;
  Serial.print(" J6= ");  Serial.println(J6, 9);

  ALPHA= 3*eprima2/4;
  Serial.print(" ALPHA= ");  Serial.println(ALPHA, 9);

  BETA= 5*ALPHA*ALPHA/3;
  Serial.print(" BETA= ");  Serial.println(BETA, 9);

  GAMMA= 35*ALPHA*ALPHA*ALPHA/27;
  Serial.print(" GAMMA= ");  Serial.println(GAMMA, 9);

  BPHI= c9996*(phi-ALPHA*J2+BETA*J4-GAMMA*J6); 
  Serial.print(" BPHI= ");  Serial.println(BPHI, 9);

  Serial.println(" ");

  XUTM= 500000+(epsilon*v*(1 + (chi/3)));
  Serial.print(" XUTM= ");  Serial.println(XUTM, 0);

  YUTM= ro*v*(1+chi)+BPHI;
  Serial.print(" YUTM= ");  Serial.println(YUTM, 0);
}

void loop() {}


Técnicamente a y b  no las uso directamente, ya que al obtener c, los errores que introduce al usar las matemáticas del IDE de arduino en el teensy (o el arduino Due) hacen que los decimales se pierdan y parece que los 4 decimales que se obtienen afectan enormemente las magnitudes de J2, J4 y J6.

El efecto de la librería arm.math.h, no es lo que esperaba, aparecen los mismo errores de pérdida de decimales, que con la librería matemática default del IDE de arduino.

1 Hay que copiar el llamado de la librería arm_math.h, las definiciones de variables y constantes en el encabezado y crear una pestaña para la función  Geo_UTM()

2 Luego igualar los datos del GPS, con las variables de entrada de la función y llamarla

Code: [Select]
LAT = gps.location.lat()  //dato del GPS
LONG =gps.location.lat()  //dato del GPS

Geo_UTM();


PD: he hecho pruebas con un oled a color y me gusta el resultado, quizás lo deje un tiempo en tanto me ingenio una carcasa adecuada para el FT813

lightcalamar

Muy interesante este GPS, al menos veo que es mas profesional. Con el mio estoy muy contento y es muy exacto en coordenadas, sin embargo es algo lento (serie a 9600) y veo que este puede alcanzar velocidades de hasta 115200 baudios/sec.

Por cierto he visto un video tuyo https://www.youtube.com/watch?v=EJlAKQ7aP1Q sería mucho pedirte el código fuente del mismo?
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

Permíteme buscarlo, fue construido con la librería original de FTDI chip, por aquel entonces tenía el FT843 (basada en el FT800).

Empecé a hacer las primeras pruebas con un gameduino 2... uf que días aquellos... y yo que pensaba que la librería de FTDI era una pasada...

PD: he querido convertirlo a GDX, pero al ver la cantidad de código... caramba, ¿cómo pude programarlo con tanta linea?


lightcalamar

Hay, hay y hay ...
Si supieras ...

Yo estoy por romperme la cabeza y adaptar el ejemplo Gauges de la librería FTDI Oficial para tener dos Vu-Meters a lo grande y espacioso vamos como bien sabemos en 5 pulgadas. Me enamoró desde siempre estos "instrumentos y como no ... para optar en poner en mi MDC (proyecto) dos FT8XX.

Estoy a punto de hacerlo. Claro está la pantalla FT800 para el Gauge usaría por ejemplo un Arduino nano ya que con esto va sobrado y caso de no poder adaptarlo a la librería GDX usaría la propia oficial, pero me resisto a ello porque quiero profundizar en el codigo.

Me refiero a este ejemplo; Gauges
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

lightcalamar

SURPRISE !!!

Al final he podido después de unas mas de 9 horas convertir el ejemplo Gauges de la libraría oficial FTDI a GD2 y luego posiblemente se pueda a GD3... lo dejo para TFTLCDCyg

Ha sido un sin vivir, he realizado un simple video https://www.youtube.com/watch?v=ckye3X-xI2w y mañana subiré el código como no a los ejemplo de mi github.

Dejo el código adjunto(aunque un poco sucio). Tendré que ir quitando lineas que no se usan y otras como comentarios.

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

#159
May 01, 2017, 09:52 am Last Edit: May 01, 2017, 09:58 am by TFTLCDCyg
Genial, gracias por el tiempo dedicado, hay que darle una mirada a fondo. Sigo liado con el jpg viewer de FTDI.

Otra duda que tengo es como podemos hacer convivir una fuente personalizada, como las que podemos obtener con el editor EVE, con alguna imagen jpg. He intentado varias veces, pero no consigo cargar ambos elementos al mismo tiempo.

Sigo trabajando en la gráfica lineal continua. Logré crearla en la librería de FTDI y he estado trabajando en  portarla a GDX. Solo falta afinar un par de detalles. El siguiente paso es implementar una función dentro de la librería; en cuanto tenga el ejemplo listo, me aplicare en ponerla a punto. (No prometo nada, ya que quizá sea muy ambicioso tener una función así...)


Las pruebas las he estado realizando con el analizador MSGEQ7, monitorizando los canales 2, 4 y 6. Cada linea se almacena en un array de 150 elementos y se muestra en tiempo real. Los 240 MHz del teensy 3.6 son una maravilla.

PD: he estado algo liado con la empresa de telefonía ya que me han bloqueado nuevamente el chip. Me han dicho que es un fallo en su sistema y que los vea hasta después del 1 de mayo...

lightcalamar

#160
May 02, 2017, 06:32 pm Last Edit: May 03, 2017, 12:31 am by lightcalamar
Otra duda que tengo es como podemos hacer convivir una fuente personalizada, como las que podemos obtener con el editor EVE, con alguna imagen jpg. He intentado varias veces, pero no consigo cargar ambos elementos al mismo tiempo.
Esto no es problema.

NOVEDADES !!!


Las imágenes convertidas en un fichero .gd2 (asset) aparte de ser imágenes se puede incluir una o varias fuentes personalizadas, ejemplo (parte inferior izquierda es un digital.ttf);



luego con el gd2asset(Linux);


quedando la cabecera del fichero logo.h de esta forma;
Code: [Select]

#define LOAD_ASSETS()  GD.safeload("logos.gd2");
#define MULTI_HANDLE 0
#define MULTI_WIDTH 64
#define MULTI_HEIGHT 192
#define MULTI_CELLS 1
#define TIEMPO_HANDLE 1
#define TIEMPO_WIDTH 16
#define TIEMPO_HEIGHT 16
#define TIEMPO_CELLS 1
#define ICRADIO_HANDLE 2
#define ICRADIO_WIDTH 64
#define ICRADIO_HEIGHT 512
#define ICRADIO_CELLS 1
#define ICRADIO2_HANDLE 3
#define ICRADIO2_WIDTH 64
#define ICRADIO2_HEIGHT 512
#define ICRADIO2_CELLS 1
#define LEDS_HANDLE 4
#define LEDS_WIDTH 24
#define LEDS_HEIGHT 48
#define LEDS_CELLS 1
#define ICRADIO3_HANDLE 5
#define ICRADIO3_WIDTH 64
#define ICRADIO3_HEIGHT 576
#define ICRADIO3_CELLS 1
#define MP_HANDLE 6
#define MP_WIDTH 84
#define MP_HEIGHT 840
#define MP_CELLS 1
#define CUCU1_HANDLE 7
#define CUCU1_WIDTH 100
#define CUCU1_HEIGHT 100
#define CUCU1_CELLS 1
#define CUCU2_HANDLE 8
#define CUCU2_WIDTH 210
#define CUCU2_HEIGHT 350
#define CUCU2_CELLS 1
#define CUCU3_HANDLE 9
#define CUCU3_WIDTH 250
#define CUCU3_HEIGHT 250
#define CUCU3_CELLS 1
#define WATER_HANDLE 10
#define WATER_WIDTH 128
#define WATER_HEIGHT 768
#define WATER_CELLS 1
#define PLAYER1_HANDLE 11
#define PLAYER1_WIDTH 150
#define PLAYER1_HEIGHT 300
#define PLAYER1_CELLS 1
#define PLAYER2_HANDLE 12
#define PLAYER2_WIDTH 100
#define PLAYER2_HEIGHT 200
#define PLAYER2_CELLS 1
#define DIGITAL_HANDLE 13
#define DIGITAL_WIDTH 45
#define DIGITAL_HEIGHT 50
#define DIGITAL_CELLS 96
#define ASSETS_END 752508UL
static const shape_t MULTI_SHAPE = {0, 64, 192, 0};
static const shape_t TIEMPO_SHAPE = {1, 16, 16, 0};
static const shape_t ICRADIO_SHAPE = {2, 64, 512, 0};
static const shape_t ICRADIO2_SHAPE = {3, 64, 512, 0};
static const shape_t LEDS_SHAPE = {4, 24, 48, 0};
static const shape_t ICRADIO3_SHAPE = {5, 64, 576, 0};
static const shape_t MP_SHAPE = {6, 84, 840, 0};
static const shape_t CUCU1_SHAPE = {7, 100, 100, 0};
static const shape_t CUCU2_SHAPE = {8, 210, 350, 0};
static const shape_t CUCU3_SHAPE = {9, 250, 250, 0};
static const shape_t WATER_SHAPE = {10, 128, 768, 0};
static const shape_t PLAYER1_SHAPE = {11, 150, 300, 0};
static const shape_t PLAYER2_SHAPE = {12, 100, 200, 0};
static const shape_t DIGITAL_SHAPE = {13, 45, 50, 0};

pues bien el #define DIGITAL_HANDLE 13 es donde no hay que definir nada porque es una fuente, solo son las imágenes las cuales se tienen que definir por ejemplo en el setup;
Code: [Select]

 LOAD_ASSETS();

  GD.BitmapHandle(MULTI_HANDLE);           // ICONOS REPRODUCTOR MP3, RADIO Y LED's
  GD.BitmapLayout(ARGB2, 64, 64);

  GD.BitmapHandle(TIEMPO_HANDLE);    
  GD.BitmapLayout(ARGB2, 128, 128);        // ICONOS DEL TIEMPO
//   GD.BitmapLayout(ARGB4, 2 * 85, 85);     CUANDO ES ARGB4

  GD.BitmapHandle(ICRADIO_HANDLE);           // ICONOS LOGOS RADIO
  GD.BitmapLayout(ARGB2, 64, 64);

  GD.BitmapHandle(ICRADIO2_HANDLE);           // ICONOS LOGOS RADIO
  GD.BitmapLayout(ARGB2, 64, 64);
  //    GD.BitmapSize(NEAREST, BORDER, BORDER, 120, 70);

  GD.BitmapHandle(LEDS_HANDLE);                // ICONOS DEL MENU PRINCIPAL
  GD.BitmapLayout(ARGB2, 24, 24);

  GD.BitmapHandle(ICRADIO3_HANDLE);         // ICONOS DEL MENU PRINCIPAL
  GD.BitmapLayout(ARGB2, 64, 64);

  GD.BitmapHandle(MP_HANDLE);                   // ICONOS DEL MENU PRINCIPAL
  GD.BitmapLayout(ARGB2, 84, 84);

  GD.BitmapHandle(CUCU1_HANDLE);
  GD.BitmapLayout(ARGB4, 2 * 100, 100);

  GD.BitmapHandle(CUCU2_HANDLE);
  GD.BitmapLayout(ARGB4, 2 * 210, 350);

  GD.BitmapHandle(CUCU3_HANDLE);
  GD.BitmapLayout(ARGB4, 2 * 250, 250);

  GD.BitmapHandle(WATER_HANDLE);
  GD.BitmapLayout(ARGB2, 128, 128);

  GD.BitmapHandle(PLAYER1_HANDLE);
  GD.BitmapLayout(ARGB2, 150, 150);

  GD.BitmapHandle(PLAYER2_HANDLE);
  GD.BitmapLayout(ARGB2, 100, 100);

y basta con"llamar a la fuente" realizando un: GD.cmd_text(80, 359, DIGITAL_HANDLE, 0, "Tomas");, bueno eso ya lo sabes,

Te adjunto las fuentes de las imágenes, fuente digital.ttf (por cierto la elegí mal porque es Capital Letters) y los ficheros convertidos. A todo esto fijate en la captura, el valor de la RAM usada, unos 750KBytes y eso que tengo todas las imagenes de mi proyecto y quedan todavía unos 256K  :)


Edito.
====

No viene al caso del tema, pero creo es muy importante escribir.

Con una RaspberryPI (he usado la versión 3) es totalmente posible realizar la modificación de los asset para las pantallas FT81XX, osea que sobrepase el limite de los 256KB alcanzando 1MB de RAM para nuestros proyectos. Incluso se puede con una RB2.

He usado la distribución llamada OSMC, aun siendo un MediaCenter, desde la consola (Terminal) se puede entrar al sistema como no a nivel de comandos. Quizás sea para usuarios avanzados en Linux, sin embargo existiría la posibilidad de usar Ubuntu para RB y tener una solución gráfica este es el enlace de Mate para RB3

Aquí una guía de instalación
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

juanjqh

hola muy interesante este tema, los felicito por el trabajo. Me he leido todo el tema y me surge una duda...
 Se podria acaso utilizar esta pantalla?? http://www.ftdichip.com/Products/Modules/CleO50.htm realizando algun cambio en la configuracion? muchas gracias

TFTLCDCyg

#162
May 06, 2017, 07:00 am Last Edit: May 06, 2017, 07:24 am by TFTLCDCyg
hola muy interesante este tema, los felicito por el trabajo. Me he leido todo el tema y me surge una duda...
 Se podria acaso utilizar esta pantalla?? http://www.ftdichip.com/Products/Modules/CleO50.htm realizando algun cambio en la configuracion? muchas gracias
Para poder usar GD3 en esa pantalla hay que considerar:

- Se trata de una pantalla ligada a un MCU (FT90x) que funciona como procesador gráfico.
- Funciona con lógica de 5V, por lo que para evitar el uso de conversores de voltaje es preferible usar un arduino UNO o MEGA o un teensy 3.2
- Los pines de control de la pantalla no están disponibles a simple vista
- La interface serán cables

Toca la parte de experimentación: usar cables de prototipado cortos y tratar de conectar CS, INT, MOSI, MISO, SCK, GND y VCC (5V)

El resultado queda mas allá de los pronósticos.

A destacar...

FTDI trató de simplificar su libreria al estilo de la librería para gameduino 2, como resultado creó esas pantallas y les agregó la potencia de un procesador gráfico.

Estamos hablando de una pantalla que ya goza de la ventajas de la serie FT81X, con el soporte de un procesador extra para el manejo de primitivas, por lo que al usar directamente GD3, estarías dejando de lado esa "ayuda extra".

Veamos un ejemplo:

Cleo50:
Code: [Select]
#include <SPI.h>
#include <CleO.h>
void setup(){
  CleO.begin();
  CleO.Start();
  CleO.String(400, 240, "Hello world");
  CleO.Show();}

void loop() {}


GD3:
Code: [Select]
#include <SPI.h>
#include <GD3.h>
void setup(){
  GD.begin();
  GD.Clear();
  GD.cmd_text(GD.w / 2, GD.h / 2, 31, OPT_CENTER, "Hello world");
  GD.swap();}

void loop(){}


Desde mi punto de vista, esa pantalla no necesita de GD3.

La biblioteca de ejemplos en linea es excelente y tiene todo lo necesario para sacarle provecho a la pantalla

TFTLCDCyg

#163
May 06, 2017, 07:37 am Last Edit: May 06, 2017, 07:38 am by TFTLCDCyg
Un segundo ejemplo tomado del tutorial para Cleo50, en específico este:

Tutorials > Tutorial 02 - Drawing Strings >d. Animated Strings

Este es el código empleado en Cleo50:

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

int minX = 75, minY = 15;
int maxX = 800 - minX, maxY = 480 - minY;
int startX = maxX / 2, startY = maxY / 2;
int deltaX = 2, deltaY = 2;
 
void setup() {
 CleO.begin();
}
void loop()
{
 CleO.Start();
 CleO.StringExt(FONT_MEDIUM, startX, startY, LIGHT_GREEN, MM, 0, 0, "Hello world");
 startX = startX + deltaX;   startY = startY + deltaY;
 
 if (startX >= maxX)
   deltaX = -deltaX;
 
 if (startX <= minX)
   deltaX = abs(deltaX);
 
 if (startY >= maxY)
   deltaY = -deltaY;
 
 if (startY <= minY)
   deltaY = abs(deltaY);
 
 CleO.Show();
}


Esta es la versión para GD3:

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

int minX = 75, minY = 15;
int maxX = 800 - minX, maxY = 480 - minY;
int startX = maxX / 2, startY = maxY / 2;
int deltaX = 2, deltaY = 2;

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

void loop()
{
 GD.Clear();
 GD.cmd_text(startX, startY, 31, OPT_CENTER, "Hello world");
 startX = startX + deltaX;   startY = startY + deltaY;
 
 if (startX >= maxX)
   deltaX = -deltaX;
 
 if (startX <= minX)
   deltaX = abs(deltaX);
 
 if (startY >= maxY)
   deltaY = -deltaY;
 
 if (startY <= minY)
   deltaY = abs(deltaY);

 GD.swap();
}


Las analogías están por todas partes.

lightcalamar

#164
May 06, 2017, 01:01 pm Last Edit: May 06, 2017, 01:04 pm by lightcalamar
Se podria acaso utilizar esta pantalla?? http://www.ftdichip.com/Products/Modules/CleO50.htm realizando algun cambio en la configuracion?
La analogía de la librería que estamos usando es muy parecida a la CleO.
Hay un problema muy serio; el precio.

La pagina que distribuye estos módulos es Bridgetek y la verdad a mi me hecha atrás, estoy de acuerdo que estamos hablado de una FT90X, y ademas como bien dice TFTLCDCyg esta placa esta casada al MCU, por lo tanto otro gasto. Realizando por encima un pedido ficticio sale por unos 190€ el asunto ...

Mi consejo

Si empezamos desde 0, lo primero es asegurarse que vamos hacer con el proyecto, yo empezaría por;

1.- Un Arduino MEGA.
2.- Una pantalla FT811 de HotMCU.
3.- Una Teensy 3.5 (opcional).
(Esto rondaría los 100€)

De las tres indicadas tengo todas.  Y lo mejor es que se puede disponer de los pines del MEGA o Teensy al servicio propio, caso que CleO no. Bueno un matiz, modificando la propia placa, entonces si. Y esto supone un riesgo.

Por otro lado el desarrollo de la librería esta en manos de terceros, y hay que disponer de estos módulos para realizar las modificaciones oportunas. Quizás este punto anterior es lo mas importante, las librerías ... no hay que precipitarse o lanzarse por muy bonito que se exponga una determinada placa.

Y si deseamos una opción mas avanzada;

4.- Una FT813 a 7 pulgadas de Riverdi.
5.- Una Teensy 3.6.

Es otra buena elección e inclusive mas económica que CleO con librerías obviamente GD3_SDIO. Posiblemente en un futuro si los precios bajan sea propietario de una CleO, a día de hoy no.

P.S. Había visto estos ejemplos de CleO, sin embargo no les presté mucha atención, y como siempre es el tiempo que servidor y TFTLCDCyg le dedicamos como hobby, pues es interesante sacar partido. Estas pueden ser exportadas a la libraría GDX, en cuanto le dedique un tiempo las subo a mi GitHUB, como hice con el ejemplo de gauge de la librería oficial FTDI.





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

Go Up