Página 1 de 1

gerar um grafico no display 128x64

MensagemEnviado: 27 Set 2010 13:32
por cristian
estou me batendo pra gerar um grafico com retas no display 128x64

como é feita a entrada de dados nele , ou seja , pixel a pixel ou grupos de 8bytes ...

eu pensei em mapear os pixell , mas nao faço ideia

o grafico seria tipo esse com pontos contendo o valor e uma linha traçando estes pontos
[url]
http://www.google.com.br/imgres?imgurl= ... 62&bih=583
[/url]

MensagemEnviado: 27 Set 2010 14:41
por Francys Reymer
cristian seja mais específico em sua dúvida, tipo vc já sabe mexer com este display (digo o controlador)?

prq kra é isso mesmo mapeie os pixels e atribui uma faixa d valores pra cada um, acho q sua dúvida deve ser depois q vc escreveu os pontos (ex.:1600,2000,2535,etc.) como traçar a reta entre eles, seria isso? prq ai acho q vc teria q trabalhar com a equação da reta para traçar uma reta sempre a cada dois pontos:

y = ax + b;

de uma olhada aqui:
http://www.infoescola.com/geometria-ana ... s-da-reta/

MensagemEnviado: 27 Set 2010 15:03
por cristian
trabalhei muito com o display grafico do nokia 3310 , com este é a primeira vez e ainda estou esperando chegar


e sim seira isso de traçar uma reta entre os valores , entao se o valor cair a reta vai junto

MensagemEnviado: 27 Set 2010 15:09
por barboza
Essa função ai traça uma linha entre os dois pontos passados.

Usei para plotar gráficos conforme você disse.

Código: Selecionar todos
/************************************************************************
   FUNCAO:      GLCD_line
   PARAMETROS: x1, y1, x2, y2, toggle
   RETORNO:   NENHUM
   DESCRICAO:   IMPRIME UMA LINHA NO DISPLAY NOS INTERVALOS PASSADOS
            SE toggle = 1, APAGA O PIXEL SE JÁ SETADO
*************************************************************************/
void   GLCD_line   (uint32_t x1, uint32_t y1, uint32_t x2, uint32_t y2, uint32_t toggle)
{
int32_t   dy ;
int32_t dx ;
int32_t stepx, stepy, fraction;

   dy = y2 - y1;
   dx = x2 - x1;

   if (dy < 0)
   {
      dy = -dy;
      stepy = -1;
   }
   else
   {
      stepy = 1;
   }

   if (dx < 0)
   {
      dx = -dx;
      stepx = -1;
   }
   else
   {
      stepx = 1;
   }

   dy <<= 1;
   dx <<= 1;
   SED1335_pixel_on (x1, y1, toggle);

   if (dx > dy)
   {
      fraction = dy - (dx >> 1);
      while (x1 != x2)
      {
         if (fraction >= 0)
         {
            y1 += stepy;
            fraction -= dx;
         }
         SED1335_pixel_on (x1, y1, toggle);
         x1 += stepx;
         fraction += dy; 
      }
   }
   else
   {
      fraction = dx - (dy >> 1);
      while (y1 != y2)
      {
         if (fraction >= 0)
         {
            x1 += stepx;
            fraction -= dy;
         }
         SED1335_pixel_on (x1, y1, toggle);
         y1 += stepy;
         fraction += dx;
      }
   }
}

MensagemEnviado: 27 Set 2010 15:10
por barboza
Essa função ai traça uma linha entre os dois pontos passados.

Usei para plotar gráficos conforme você disse.

Código: Selecionar todos
/************************************************************************
   FUNCAO:      GLCD_line
   PARAMETROS: x1, y1, x2, y2, toggle
   RETORNO:   NENHUM
   DESCRICAO:   IMPRIME UMA LINHA NO DISPLAY NOS INTERVALOS PASSADOS
            SE toggle = 1, APAGA O PIXEL SE JÁ SETADO
*************************************************************************/
void   GLCD_line   (uint32_t x1, uint32_t y1, uint32_t x2, uint32_t y2, uint32_t toggle)
{
int32_t   dy ;
int32_t dx ;
int32_t stepx, stepy, fraction;

   dy = y2 - y1;
   dx = x2 - x1;

   if (dy < 0)
   {
      dy = -dy;
      stepy = -1;
   }
   else
   {
      stepy = 1;
   }

   if (dx < 0)
   {
      dx = -dx;
      stepx = -1;
   }
   else
   {
      stepx = 1;
   }

   dy <<= 1;
   dx <<= 1;
   SED1335_pixel_on (x1, y1, toggle);

   if (dx > dy)
   {
      fraction = dy - (dx >> 1);
      while (x1 != x2)
      {
         if (fraction >= 0)
         {
            y1 += stepy;
            fraction -= dx;
         }
         SED1335_pixel_on (x1, y1, toggle);
         x1 += stepx;
         fraction += dy; 
      }
   }
   else
   {
      fraction = dx - (dy >> 1);
      while (y1 != y2)
      {
         if (fraction >= 0)
         {
            x1 += stepx;
            fraction -= dy;
         }
         SED1335_pixel_on (x1, y1, toggle);
         y1 += stepy;
         fraction += dx;
      }
   }
}

MensagemEnviado: 27 Set 2010 15:16
por cristian
valeu barboza pelo codigo , agora vou estudar pra entender como e pq , funciona ....