Arduino自制模型搭建GPS测速仪工具

2025-10-18 03:50:11

1、第一,我们先了解一下它原理吧

原理:将地图数据依据瓦片算法存储在SD卡中,通过串口获取GPS定位信息并从中解析出经纬度坐标,依据经纬度坐标读取相应地图数据显示在12864液晶模块上,同时显示定位坐标点。1. 地图存储算法——瓦片系统(Maps Tile System)本制作采用的地图数据和地图存储算法来源于微软的bing maps并做了相应修改,具体可参考:Bing Maps Tile System[1*]Virtual Earth Tile Image URI 参数解析Goolge and Microsoft Map Url Parameters在瓦片系统中地图采用金字塔式的分层存储结构,不同层具有不同级别的地图分辨率(地图精细程度),每一层地图被分割成等像素大小(256X256)的瓦片,算法要解决的问题就是给定经纬度坐标和缩放级别(层索引)得到具体相应的瓦片编号。在连接[1*]的最后有算法实现的代码可共参考。2. 针对12864液晶模块的设计12864液晶模块是128像素宽64像素高的单色液晶显示模块,本制作为了适应模块显示做出了两个设计。

Arduino自制模型搭建GPS测速仪工具

Arduino自制模型搭建GPS测速仪工具

2、第二,搭建测试。

12864液晶模块是128像素宽64像素高的单色液晶显示模块,本制作为了适应模块显示做出了两个设计。1). 将256X256像素的瓦片裁切成128X64像素大小的8份 子瓦片

2). 通过阈值方法将8位png索引图像(bing maps 的道路数据)转换成二进制地图数据文件,为了能够显示原图中的文字信息,采用多阈值提取求或方法提取原地图中背景、地物和标注文字数据,由于标注文字和背景之间的扰动,提取效果有待改进。

效果如下:

Arduino自制模型搭建GPS测速仪工具

3、第三,代码程序。

static void write_command(unsigned char Command_value)

{

  digitalWrite(CS, LOW);

  digitalWrite(DC, LOW);

  DATAPORT2 = (DATAPORT2 & DATA1_MASK) |

    (Command_value & DATA2_MASK);

  DATAPORT1 = (DATAPORT1 & DATA2_MASK) |

    (Command_value & DATA1_MASK); // top 6 bits

  digitalWrite(CS, HIGH);

}

/**********************************************

* // Write Data

**********************************************/

static void write_Data(unsigned char Data_value)

{

  digitalWrite(CS, LOW);

  digitalWrite(DC, HIGH);

  DATAPORT2 = (DATAPORT2 & DATA1_MASK) |

    (Data_value & DATA2_MASK);

  DATAPORT1 = (DATAPORT1 & DATA2_MASK) |

    (Data_value & DATA1_MASK); // top 6 bits

  digitalWrite(CS, HIGH);

}

/********************************************

* // Draw Picture

********************************************/

static void drawPicFromFlash(uint8_t x0,uint8_t y0,uint8_t w,uint8_t h,const PROGMEM char *c)                                               

{

  digitalWrite(DC, LOW);  //solve a bug of write_command defore write_data

  write_command(0x15); //set column address

  write_command(x0); //column address start 00

  write_command(x0+w-1); //column address end 95

  write_command(0x75); //set row address

  write_command(y0); //row address start 00

  write_command(y0+h-1); //row address end 63

  unsigned char k,i;

  for(k=0;k<h;k++)

  {

    for(i=0;i<w;i++)

    {       

      write_Data(pgm_read_byte(c++));

      write_Data(pgm_read_byte(c++));

    }

  }

}

/********************************************

* // Fill color

********************************************/

static void fill_color (uint8_t startx,uint8_t endx,uint8_t starty,uint8_t endy,unsigned char dat1,unsigned char dat2)                                               

{

  digitalWrite(DC, LOW);  //solve a bug of write_command defore write_data

  write_command(0x15); //set column address

  write_command(startx); //column address start 00

  write_command(endx-1); //column address end 95

  write_command(0x75); //set row address

  write_command(starty); //row address start 00

  write_command(endy-1); //row address end 63

  unsigned char k,i;

  for(k=starty;k<endy;k++)

  {

    for(i=startx;i<endx;i++)

    {       

      write_Data(dat1);

      write_Data(dat2);

    }

  }

}

/********************************************

* // DrawRectangle

********************************************/

static void drawRectangle(unsigned char startx,unsigned char starty,

unsigned char endx,unsigned char endy,

unsigned char BcolorR,unsigned char BcolorB,unsigned char BcolorG,

unsigned char FcolorR,unsigned char FcolorB,unsigned char FcolorG,

boolean isFill)

{

  digitalWrite(DC, LOW);  //solve a bug of write_command defore write_data

  write_command(0x26);

  if(isFill)

  {

    write_command(0x01);

  }

  else

  {

    write_command(0x00);

  }

  write_command(0x22);

  write_command(startx);

  write_command(starty);

  write_command(endx);

  write_command(endy);

  write_command(BcolorR);

  write_command(BcolorB);

  write_command(BcolorG);

  write_command(FcolorR);

  write_command(FcolorB);

  write_command(FcolorG);

}

Arduino自制模型搭建GPS测速仪工具

Arduino自制模型搭建GPS测速仪工具

Arduino自制模型搭建GPS测速仪工具

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢