TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Berto en 24 de Abril de 2016, 15:26:58
-
Esto es lo que e visto asta ahora
char texto[26]={"X= "};
glcd_text57(xe,ye,texto,1,on);
o vale glcd_text57(xe,ye,"X= ",1,on);
Pero no veo manera alguna de meter un int8 segido de "X= " o concatenar el int8 segido del char
Es decir esto es lo que quiero si fuese un LCD Alhafumerico
printf(lcd_putc,"X= %u ",xg); //= resultado
Esoy usando el LCD Grafico LGM12641BS1R en Proteus
-
hey there
let me see if i get it.... u try to print out a value, after some math, right??
what I do is to do the math first, then copy the value to a string, the call the sprintf ( ) function
Hola
déjame ver si lo consigo .... u tratar de imprimir un valor, después de un poco de matemática, ¿no ??
lo que hago es hacer los cálculos en primer lugar, a continuación, copiar el valor a una cadena, la llamada de la función printf ()
#include <stdio.h>
#include <stdlib.h>
unsigned char TFT_Text_5 [ 0x03 ];
float V;
char Vi, Vj, ViTemp, VjTemp;
SetADCChannel ( CH_AN0 );
__delay_us ( 35 );
unsigned int val1 = ReadADC ( );
V = val1 * 5.0 / 1023.0;
Vi = ( int ) V;
Vj = ( int ) ( ( V - Vi ) * 10 );
sprintf ( TFT_Text_5, "%d.%d", ViTemp, VjTemp );
textTFT ( TFT_Text_5, 68, 130, BLACK );
sprintf ( TFT_Text_5, "%d.%d", Vi, Vj );
textTFT ( TFT_Text_5, 68, 130, WHITE );
ViTemp = Vi;
VjTemp = Vj;
__delay_ms ( 150 );
interruptFlagTMR4 = CLEAR;
-
NI X NI Y
porque %d because?
you create textTFT ( TFT_Text_5, 68, 130, BLACK ){ ??????? }
no randon please.
-
Caracteres--;
void corde(xt,yt,xx,yy){
texto="X= ";// && xg;
glcd_text57(xt,yt,texto,1,on);
sprintf ( texto, "%u ", xg);
// glcd_text57(xt+13,yt,texto,1,OFF); //Aunque aqui vuelvo a perder el control
//borro todo con glcd_fillscreen(0); consecuencia es parpadeo constante
glcd_text57(xt+13,yt,texto,1,on);
texto="Y= ";// && xg;
glcd_text57(xt+33,yt,texto,1,on);
sprintf ( texto, "%u ", yg);
glcd_text57(xt+46,yt,texto,1,on);
}
-
Hola ,te paso algo que estoy usando en este momento haber si te sirve :
void displayVoltage(int adc0)
{
char voltage[6];
sprintf(voltage, "%f", (float)adc0 );
voltage[4] = '\0';
glcd_rect(70, 55, 95, 62, YES, Off); // este rectangulo limpia el valor cada vez que este cambia
glcd_text57(70,55, voltage, 1, ON); //posiciono el valor de la variable en el glcd
glcd_text57(3,55, Bateria, 1, ON);// pongo la palabra antes del valor
glcd_text57(105,55, v, 1, ON); // y un simbolo despues del valor
}
en este caso con esta funcion estoy leyendo un canal del adc del pic y muestro el valor con una variable tipo float ,pero puede ser la que vos quieras ,si te fijas bien todo se encuentra en la misma linea y esto quedaria algo asi
Bateria 13.8 V
mas o menos
Espero haberte ayudado , ahora tengo que ir a trabajar pero cualquier cosa pregunta .Saludos!!!!
Pd: me olvidé de decirte que tenés que declarar las palabras antes de usarlas ej:
char bateria [ ]= " Batería" ;
-
well mr Berto
it was an old application with a TFT Display, but the main concept remains, so basicly jsut change the variable's names to the ones you are using. Also i see two different functions on your code: one for a 2x16 LCD and another for a GLCD, two differents displays, but in both cases it would work, I use them in many projects.
answering to your question "porque %d because?" (I think is a question)
% it is the prefix to ask for a value, then the letter 'd' referst to int, so the whole thing is asking for a integer (int) value.
in the next picture, the values pinted are askthem the way Im showing you right now
así mr Berto
que era una aplicación de edad con una pantalla TFT, pero el concepto principal sigue siendo, por lo que básicamente jsut cambiar los nombres de la variable a los que usted esté usando. También veo dos funciones diferentes en su código: uno para un LCD de 2x16 y otro para un GLCD, dos pantallas diferentes, pero en ambos casos sería trabajar, yo los utilizo en muchos proyectos.
respondiendo a su pregunta "porque% d porque?" (Creo que es una pregunta)
% Es el prefijo para pedir un valor, a continuación, la letra 'd' referst a int, así que todo el asunto está pidiendo un valor entero (int).
En la siguiente imagen, los valores son pinted askthem la manera Im mostrando que en este momento
even on the back, my power supply with 2x16 LCD shows the voltage values in this way
incluso en la parte de atrás, mi fuente de alimentación con pantalla LCD de 2x16 muestra los valores de tensión de esta manera
http://www.todopic.com.ar/foros/index.php?topic=46058.msg385944#msg385944
-
El patron que funciona con graficos circulos cuadrados no va con el texto
glcd_rect(70, 55, 95, 62, YES, Off); // este rectangulo limpia el valor cada vez que este cambia
Tienes razon ahora e visto lo que haces, como no controlo a ojo y las cordenadas difieren de texto-datos a graficos, lo primero que e hecho es dibujar el rectangulo en negro "on" para cercionar lo que dejo en blanco. Buena idea gracias.
Also i see two different functions on your code:
donde?? in my code??
Tampoco entiendo el apartado al que me mandas, no se que estays haciendo apenas e visto algo de AXM y no e llegado a utilizar XC8
2 Saludos
-
En my proyecto una pelota "circle" avanza de izquierda a derecha reiniciandose proceso continuamente, Hay un grafico rectangulo "ret" horizontal estatico (no se mueve) relativamente cuesta mucho cargarlo continuamente, ¿se le puede dar prioridad visual?
Es decir las cordenadas-grafico "circle" no deben interferir dentro de el. Sobre todo en su
glcd_circle(xg,yg,vol,YES,off);*//El problema de borrar "circle" es que borra al "ret" delatando su posicion dentro de este. Lo soluciono impidiendo esta funcion* cuando llega a la Xgrafica inicial de "ret", pero la velocidad de la pelota varia continuamente y esta deja un rastro de entrada y en otras se come un cacho del retangulo en la entrada.
La simulacion visual pretendida es: La pelota esta lejos y al pasar esta por el no se ve. "ret" la tapa
-
Hola Berto , no logro interpretar bien tu explicacion , pero te pregunto, el circulo que estas moviendo es de color? osea esta rellenado.O solo es una circunferencia y el centro esta vacio?
Y el rectangulo tambien esta rellenado? ,podrias subir una simulacion (si es que usas proteus ) o algunas fotos del grafico ?
Y tambien el codigo ,que aunque no se mucho pero tal vez entre todos te podamos ayudar.
Saludos
-
No no tenia ni idea de que se puede utilizar colores, no vi nada ni aqui ni en youtu, A hora algo producir un garfico mediante un programa llamado LCDAsistand Aparte que no consegui cargalo como explican, No creo estar generando bien el grafico todo pilxel esta a 0xff.
Respecto a lo anterior Esto es lo mejor Redibujar un pequeño cuadrupedo dentro del cuadrupedo mayor cada vez que la bola empieza a colisionar con el asta estar "dentro" el efecto quedo muy bien.
Esta preparado para que este pequeño glcd_rect(..) dentro del mayor GLD_RET(..) se redibuje al mismo tamaño que la bola glcd_circle(..)
No solo tiende a probocar parpadeo el tiempo utilizado de borrar-redibujar. Estoy viendo que esto se reduce tambien segun el tamaño del grafico.
Esto es lo principal:
//puente (rectangulo vertical)
glcd_rect(70, 15, 105, 60, YES, on); //Cuesta mucho dibujarlo pero no un cuadrupedo menor dentro de el
//vol=2;//radio circle=2;
do{//;
//El rectangulo mayor es estatico su Xinicial siempre es=70 Xfinal=105
if(xg<(70+vol)){
glcd_circle((int8)xg,yg,vol,YES,off); }
if(xg>(69-vol) && xg<(75+vol)){
// glcd_rect(70, 22-vol, 72+vol, 22+vol, YES, off); //este ret-off sirve para controlar visualmente el de abajo
glcd_rect(70, yg-vol, 72+vol, yg+vol, YES, on); }//se re-dibuja dentro de un cuadrupedo mayor --> glcd_rect(70, 15, 105, 60, YES, on); //puente (rectangulo vertical)
xg++;
if(trampa){ //Trampa=1 esta hecha para control de datos, pero originalmente debe ser trampa=0
glcd_rect(18, 3, 36, 13, YES, off);
sprintf ( texto, "%ld", xg); //mostrar este y otros datos te da un resultado temporal que hay que calcular mentalmente
glcd_text57(18,5,texto,yes,on);
}
//Si trampa=1 bola se delatara dibujandose cuando atraviesa el rectangulo dandote el resultado
if(xg<90 || trampa){//No es necesario dibujar bola_negra dentro de rectangulo_negro
glcd_circle((int8)xg,yg,vol,YES,on);//
}
.....
.....
}
El proyecto entero es este, gracias por cualquier aporte de tu experiencia si quieres echarle un vistazo. Si no puedes abrir el zip mandame uno valido.