找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 38064|回复: 30
收起左侧

自制基于arduino的GPS地图导航系统

  [复制链接]
ID:113207 发表于 2016-4-11 01:33 | 显示全部楼层 |阅读模式
这是一篇关于动手制作基于arduino 和12864液晶模块的图形化显示GPS导航系统的帖子,作品效果和成本可能无法和TB上的导航产品媲美,但是动手过程会带给你乐趣和知识。

动手之前最好能具备一些背景知识:
1. arduino 相关基础;
2. 能使用12864 液晶模块;
3. 能够用arduino 通过串口通信获取GPS模块定位信息;
4. 能够用arduino 操作SD卡模块;
搜索论坛即可找到相关内容。

制作所需主要硬件:
1. arduino UNO 1片;
2. 12864 液晶模块 1片;
3. GPS模块1片;
4. SD卡模块及SD卡 1套;
101210kh8e8801hphm4sg4.jpg 212105s3qe9jinwvsbzvjd.jpg 115051ir121fwrzmr1riwu.jpg 1018301jpo1dz2um1mscwq.jpg 234337bta4qvlq0n0bt2v3.jpg

原理:
将地图数据依据瓦片算法存储在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像素高的单色液晶显示模块,本制作为了适应模块显示做出了两个设计。
1). 将256X256像素的瓦片裁切成128X64像素大小的8份 子瓦片,如下图所示:
221323u211s13ccbbkr3oe.png
每层每个瓦片均做相应处理。
2). 通过阈值方法将8位png索引图像(bing maps 的道路数据)转换成二进制地图数据文件,为了能够显示原图中的文字信息,采用多阈值提取求或方法提取原地图中背景、地物和标注文字数据,由于标注文字和背景之间的扰动,提取效果有待改进。

显示效果:
231937rwgiz6w8wnkgrrq6.jpg 231938yu7sygnk9kyvfnvs.jpg 231938xxmbmmst7suxdtff.jpg 231939v21fz3i52u82s282.jpg 231940qfdbhuzrra3jmabq.jpg 2319409y8200oloxrvszul.jpg 231941sui09ac0uyuqk0qa.jpg 231942eg5z5e51v13achrb.jpg 231942f5fa7tjdtmxllmdm.jpg 2319434qiw0wxwtheu8e9x.jpg 231944ojnk0znv2plndcqn.jpg 231944qdppcnnrc4ooaw6c.jpg 231945xr6qtwagr8brsj66.jpg 231946o7pzv3473ayag32a.jpg 231947xogrv7r8ra7i76at.jpg

arduino 代码说明:
1. 在“LCD12864RSPI” 文件中加入画点函数,减少重绘区域;
2. 使用占用内存小、具有只读能力的SD模块库“petit_fatfs”;
3. 分配1K内存用于地图数据缓存,由于SD卡库只支持8.3文件名,地图数据文件名采用十六进制不定长压缩编码方式命名。
代码下载:
arduinoTile.rar (4.24 KB, 下载次数: 82)
回复

使用道具 举报

ID:113207 发表于 2016-4-11 01:35 | 显示全部楼层
自制基于arduino的GPS地图导航系统2.0
主要算法类似。

113820u2ib67bqg2mny7ab.jpg 113822fr2z25fjd8n8r82f.jpg 113824q6s6h6hh5k66z09h.jpg 113825v9dpioim3f0nz3qn.jpg 113827j11i3jriou2iirmz.jpg

屏幕采用oled RGB 96*64 ,使用三轴磁阻获取罗盘信息(受周围磁场干扰较大),使用SD卡存储地图数据,使用TinyGPS处理GPS数据。

oled RGB 96*64 使用的是lm095cg-096064

接线方法和代码如下:
  1.     //OLED LM095CG-096064 - UNO
  2.     //E/RD#(12) - VCC
  3.     //R/W#(13) - GND
  4.     //D/C#(14) - A0
  5.     //RES#(15) - A1
  6.     //CS#(16) - A2
  7.     //D7(4) - 7
  8.     //D6(5) - 6
  9.     //D5(6) - 5
  10.     //D4(7) - 4
  11.     //D3(8) - 3
  12.     //D2(9) - 2
  13.     //D1(10) - 9
  14.     //D0(11) - 8

  15.     /***********************************************************/
  16.     //oled pin define
  17.     /***********************************************************/
  18.     #define CS A2
  19.     #define DC A0
  20.     #define RES A1
  21.     /***********************************************************/
  22.     // special defines for the dataport
  23.     /***********************************************************/
  24.     #define DATAPORT1 PORTD
  25.     #define DATAPIN1 PIND
  26.     #define DATADDR1 DDRD

  27.     #define DATAPORT2 PORTB
  28.     #define DATAPIN2 PINB
  29.     #define DATADDR2 DDRB

  30.     #define DATA1_MASK 0xFC  // top 6 bits
  31.     #define DATA2_MASK 0x03  // bottom 2 bits
复制代码
  1. /* write by davidce
  2. davidce@163.com
  3. 2013.6.10
  4. v1.0
  5. */

  6. //********************************************
  7. //low level function
  8. //********************************************
  9. /**********************************************
  10. * // Write Command
  11. **********************************************/
  12. static void write_command(unsigned char Command_value)
  13. {
  14.   digitalWrite(CS, LOW);
  15.   digitalWrite(DC, LOW);
  16.   DATAPORT2 = (DATAPORT2 & DATA1_MASK) |
  17.     (Command_value & DATA2_MASK);
  18.   DATAPORT1 = (DATAPORT1 & DATA2_MASK) |
  19.     (Command_value & DATA1_MASK); // top 6 bits
  20.   digitalWrite(CS, HIGH);
  21. }
  22. /**********************************************
  23. * // Write Data
  24. **********************************************/
  25. static void write_Data(unsigned char Data_value)
  26. {
  27.   digitalWrite(CS, LOW);
  28.   digitalWrite(DC, HIGH);
  29.   DATAPORT2 = (DATAPORT2 & DATA1_MASK) |
  30.     (Data_value & DATA2_MASK);
  31.   DATAPORT1 = (DATAPORT1 & DATA2_MASK) |
  32.     (Data_value & DATA1_MASK); // top 6 bits
  33.   digitalWrite(CS, HIGH);
  34. }
  35. /********************************************
  36. * // Draw Picture
  37. ********************************************/
  38. static void drawPicFromFlash(uint8_t x0,uint8_t y0,uint8_t w,uint8_t h,const PROGMEM char *c)                                               
  39. {
  40.   digitalWrite(DC, LOW);  //solve a bug of write_command defore write_data
  41.   write_command(0x15); //set column address
  42.   write_command(x0); //column address start 00
  43.   write_command(x0+w-1); //column address end 95
  44.   write_command(0x75); //set row address
  45.   write_command(y0); //row address start 00
  46.   write_command(y0+h-1); //row address end 63

  47.   unsigned char k,i;
  48.   for(k=0;k<h;k++)
  49.   {
  50.     for(i=0;i<w;i++)
  51.     {      
  52.       write_Data(pgm_read_byte(c++));
  53.       write_Data(pgm_read_byte(c++));
  54.     }
  55.   }
  56. }
  57. /********************************************
  58. * // Fill color
  59. ********************************************/
  60. static void fill_color (uint8_t startx,uint8_t endx,uint8_t starty,uint8_t endy,unsigned char dat1,unsigned char dat2)                                               
  61. {
  62.   digitalWrite(DC, LOW);  //solve a bug of write_command defore write_data
  63.   write_command(0x15); //set column address
  64.   write_command(startx); //column address start 00
  65.   write_command(endx-1); //column address end 95
  66.   write_command(0x75); //set row address
  67.   write_command(starty); //row address start 00
  68.   write_command(endy-1); //row address end 63
  69.   unsigned char k,i;
  70.   for(k=starty;k<endy;k++)
  71.   {
  72.     for(i=startx;i<endx;i++)
  73.     {      
  74.       write_Data(dat1);
  75.       write_Data(dat2);
  76.     }
  77.   }
  78. }
  79. /********************************************
  80. * // DrawRectangle
  81. ********************************************/
  82. static void drawRectangle(unsigned char startx,unsigned char starty,
  83. unsigned char endx,unsigned char endy,
  84. unsigned char BcolorR,unsigned char BcolorB,unsigned char BcolorG,
  85. unsigned char FcolorR,unsigned char FcolorB,unsigned char FcolorG,
  86. boolean isFill)
  87. {
  88.   digitalWrite(DC, LOW);  //solve a bug of write_command defore write_data
  89.   write_command(0x26);
  90.   if(isFill)
  91.   {
  92.     write_command(0x01);
  93.   }
  94.   else
  95.   {
  96.     write_command(0x00);
  97.   }
  98.   write_command(0x22);
  99.   write_command(startx);
  100.   write_command(starty);
  101.   write_command(endx);
  102.   write_command(endy);
  103.   write_command(BcolorR);
  104.   write_command(BcolorB);
  105.   write_command(BcolorG);
  106.   write_command(FcolorR);
  107.   write_command(FcolorB);
  108.   write_command(FcolorG);
  109. }
  110. /********************************************
  111. * // cover color format from 888 to 565
  112. ********************************************/
  113. static uint16_t Color565(uint8_t r, uint8_t g, uint8_t b) {
  114.   uint16_t c;
  115.   c = r >> 3;
  116.   c <<= 6;
  117.   c |= g >> 2;
  118.   c <<= 5;
  119.   c |= b >> 3;
  120.   return c;
  121. }
  122. /********************************************
  123. * // DrawLine
  124. ********************************************/
  125. static void drawLine(unsigned char startx,unsigned char starty,
  126. unsigned char endx,unsigned char endy,
  127. unsigned char colorR,unsigned char colorB,unsigned char colorG)
  128. {
  129.   digitalWrite(DC, LOW);  //solve a bug of write_command
  130.   write_command(0x21);
  131.   write_command(startx);
  132.   write_command(starty);
  133.   write_command(endx);
  134.   write_command(endy);
  135.   write_command(colorR);
  136.   write_command(colorB);
  137.   write_command(colorG);
  138. }
  139. /***************************************************/
  140. //oled Initial
  141. /***************************************************/
  142. static void Initial_SSD1330ZB()
  143. {
  144.   write_command(0xfd); // command lock
  145.   write_command(0x12);
  146.   write_command(0xae); // display off
  147.   write_command(0xa4); // Normal Display mode
  148.   write_command(0x15); //set column address
  149.   write_command(0x00); //column address start 00
  150.   write_command(0x5f); //column address end 95
  151.   write_command(0x75); //set row address
  152.   write_command(0x00); //row address start 00
  153.   write_command(0x3f); //row address end 63
  154.   write_command(0x87); //master current control
  155.   write_command(0x0A);
  156.   write_command(0x81); //Set Contrast for Color A
  157.   write_command(0x85); //91
  158.   write_command(0x82); //Set Contrast for Color B
  159.   write_command(0x56); //50
  160.   write_command(0x83); //Set Contrast for Color C
  161.   write_command(0x7f); //7d
  162.   write_command(0x8a);  // set scond pre-change speed of Color A
  163.   write_command(0x64);
  164.   write_command(0x8b);  // set scond pre-change speed of Color B
  165.   write_command(0x78);
  166.   write_command(0x8c);  // set scond pre-change speed of Color C
  167.   write_command(0x64);
  168.   write_command(0xa0); //set re-map & data format
  169.   write_command(0x72); //Horizontal address increment
  170.   write_command(0xa1); //set display start line
  171.   write_command(0x00); //start 00 line
  172.   write_command(0xa2); //set display offset
  173.   write_command(0x00);
  174.   write_command(0xa8); //set multiplex ratio
  175.   write_command(0x3f); //64MUX
  176.   write_command(0xb0); //set power save
  177.   write_command(0x1a);
  178.   write_command(0xb1);
  179.   write_command(0xf1); // Phase 2 period Phase 1 period
  180.   write_command(0xb3); // Set Display Clock Divide Ratio/ Oscillator Frequency
  181.   write_command(0xd0);
  182.   write_command(0xbb); // set pre-charge
  183.   write_command(0x3e);
  184.   write_command(0xbe); //set Vcomh
  185.   write_command(0x3e);
  186.   write_command(0xad); //Select external VCC supply at Display ON
  187.   write_command(0x8e); //Select External VP voltage supply
  188.   write_command(0xaf); //display on
  189. }
  190. //********************************************
  191. //high level function
  192. //********************************************
  193. /********************************************
  194. * // DrawPixel
  195. ********************************************/
  196. static void drawPixel(unsigned char px,unsigned char py,
  197. unsigned char colorR,unsigned char colorB,unsigned char colorG)
  198. {
  199.   drawLine(px,py,px,py,colorR,colorB,colorG);
  200. }
  201. /********************************************
  202. * // draw a character
  203. ********************************************/
  204. static void drawChar(uint8_t x, uint8_t y, char c,uint8_t colorR,uint8_t colorB,uint8_t colorG,uint8_t size) {
  205.   uint8_t tempx,tempy;
  206.   uint8_t i,j;
  207.   for (i =0; i<5; i++ ) {
  208.     uint8_t line = pgm_read_byte(font+(c*5)+i);
  209.     for (j = 0; j<8; j++) {
  210.       if (line & 0x1) {
  211.         if (size == 1) // default size
  212.           drawPixel(x+i, y+j, colorR,colorB,colorG);
  213.         else {  // big size
  214.           tempx= x+i*size;
  215.           tempy= y+j*size;
  216.           drawRectangle(tempx,tempy,tempx + size,tempy + size, colorR,colorB,colorG,colorR,colorB,colorG,true);
  217.         }
  218.       }
  219.       line >>= 1;
  220.     }
  221.   }
  222. }
  223. /********************************************
  224. * // DrawString
  225. ********************************************/
  226. static void drawString(uint8_t x, uint8_t y, char *c,uint8_t colorR,uint8_t colorB,uint8_t colorG,uint8_t size) {
  227.   if(size>0)
  228.   {
  229.     while (c[0] != 0) {
  230.       drawChar(x, y, c[0], colorR,colorB,colorG, size);
  231.       x += size*6;
  232.       c++;
  233.     }
  234.   }
  235. }
  236. /********************************************
  237. * // DrawCircleHelper
  238. ********************************************/
  239. static void drawCircleHelper(uint8_t x0, uint8_t y0,
  240. uint8_t r, uint8_t cornername,
  241. uint8_t colorR,uint8_t colorB,uint8_t colorG) {
  242.   int16_t f = 1 - r;
  243.   int16_t ddF_x = 1;
  244.   int16_t ddF_y = -2 * r;
  245.   int16_t x = 0;
  246.   int16_t y = r;
  247.   while (x<y) {
  248.     if (f >= 0) {
  249.       y--;
  250.       ddF_y += 2;
  251.       f += ddF_y;
  252.     }
  253.     x++;
  254.     ddF_x += 2;
  255.     f += ddF_x;
  256.     if (cornername & 0x4) {
  257.       drawPixel(x0 + x, y0 + y,  colorR,colorB,colorG);
  258.       drawPixel(x0 + y, y0 + x,  colorR,colorB,colorG);
  259.     }
  260.     if (cornername & 0x2) {
  261.       drawPixel(x0 + x, y0 - y,  colorR,colorB,colorG);
  262.       drawPixel(x0 + y, y0 - x,  colorR,colorB,colorG);
  263.     }
  264.     if (cornername & 0x8) {
  265.       drawPixel(x0 - y, y0 + x,  colorR,colorB,colorG);
  266.       drawPixel(x0 - x, y0 + y,  colorR,colorB,colorG);
  267.     }
  268.     if (cornername & 0x1) {
  269.       drawPixel(x0 - y, y0 - x,  colorR,colorB,colorG);
  270.       drawPixel(x0 - x, y0 - y,  colorR,colorB,colorG);
  271.     }
  272.   }
  273. }
  274. /********************************************
  275. * // DrawCircle
  276. ********************************************/
  277. static void drawCircle(uint8_t x0, uint8_t y0,
  278. uint8_t r,
  279. uint8_t colorR,uint8_t colorB,uint8_t colorG)
  280. {
  281.   drawCircleHelper(x0, y0, r, 0xF, colorR,colorB,colorG);
  282.   drawPixel(x0, y0+r, colorR,colorB,colorG);
  283.   drawPixel(x0, y0-r, colorR,colorB,colorG);
  284.   drawPixel(x0+r, y0, colorR,colorB,colorG);
  285.   drawPixel(x0-r, y0, colorR,colorB,colorG);
  286. }
  287. /********************************************
  288. * // drawTriangle
  289. ********************************************/
  290. static void drawTriangle(uint8_t x0, uint8_t y0,
  291. uint8_t x1, uint8_t y1,
  292. uint8_t x2, uint8_t y2,
  293. unsigned char colorR,unsigned char colorB,unsigned char colorG)
  294. {
  295.   drawLine(x0, y0, x1, y1, colorR,colorB,colorG);
  296.   drawLine(x1, y1, x2, y2, colorR,colorB,colorG);
  297.   drawLine(x2, y2, x0, y0, colorR,colorB,colorG);
  298. }
  299. /********************************************
  300. * // init color OLED
  301. ********************************************/
  302. static void initOLED()
  303. {
  304.   pinMode(CS, OUTPUT);
  305.   pinMode(DC, OUTPUT);
  306.   pinMode(RES, OUTPUT);
  307.   //set pin output mode
  308.   DATADDR2 |= DATA2_MASK;
  309.   DATADDR1 |= DATA1_MASK;
  310.   //reset oled model
  311.   digitalWrite(RES, LOW);
  312.   delay(50);
  313.   digitalWrite(RES, HIGH);
  314.   delay(50);
  315.   Initial_SSD1330ZB();

  316.   fill_color(0,96,0,64,0x00,0x00);
  317. }
复制代码



代码仅供参考。
感谢 czad 赠送的atmge328p的贴片板和好人做到底的geek精神!

</endx;i++)
</endy;k++)
</w;i++)
</h;k++)
回复

使用道具 举报

ID:113207 发表于 2016-4-11 01:39 | 显示全部楼层
自制基于arduino的GPS地图导航系统3.0
最后一个版本,主要用来在跑步的时候定位和记录路径。
使用1.8寸TFT屏,128*160分辨率,SPI接口。采用Atmega 328为主控芯片。

212954n4bpbww2ujj2r2fs.png
5V输入锂电池充电板,系统电压3.3V。
212955xmykjv6mnzkvetcn.png
211208zs99xx5ar9s5r39x.jpg
左侧黑色按钮放大,右侧红色按钮缩小,长按红色按钮(>=2秒)录制轨迹,再次长按停止录制。
211232bf0udjsv98zvyfv8.jpg 211233pjxxr380cr3izmic.jpg 211234xnp4e70poen27reu.jpg
演示如下:




210246ry6t7t9906bxg7xh.jpg
蓝色的点代表历史路径,刷屏后消失不保存,右下角REC字样表示仪器正在录制轨迹,存在SD卡中。
下部绿色显示经纬度信息,红色显示时间和日期,蓝色显示海拔高度、速度和朝向。从图中历史轨迹点可看出数据漂移较多,原因可能是1.GPS模块精度不高;2.GPS模块应该设置在仪器的上方;3.需要采用滤波算法过滤。

地图数据存在SD卡中,目录结构如下:
213827x1l7j00t0ku304n0.png
TRACK文件为轨迹文件

这是地图下载程序,需要.net Framework 4 支持
Release.rar (1.03 MB, 下载次数: 65)
回复

使用道具 举报

ID:149758 发表于 2016-11-23 16:55 | 显示全部楼层
很好。
回复

使用道具 举报

ID:232117 发表于 2017-9-9 18:33 | 显示全部楼层
楼主求全部资料发一份邮箱2272599707@qq.com
回复

使用道具 举报

ID:255408 发表于 2017-11-29 21:19 | 显示全部楼层
果然牛人
回复

使用道具 举报

ID:255408 发表于 2017-11-29 21:28 | 显示全部楼层
楼主 我下载了下载地图的软件release,使用时下载不成功 显示 “下载 1失败”
请问下这是什么原因呢
回复

使用道具 举报

ID:253733 发表于 2017-12-10 09:50 | 显示全部楼层
很感 兴趣,求接线图、全部资料QQ: 1360667@qq.com
回复

使用道具 举报

ID:255869 发表于 2017-12-16 11:15 | 显示全部楼层
厉害!请问能否发一下接线图和资料~  yht1592754117@126.com
回复

使用道具 举报

ID:278630 发表于 2018-1-29 00:16 | 显示全部楼层
想问一下楼主,下载地图时,显示下载1失败,下载3失败是什么原因呢,影响吗
回复

使用道具 举报

ID:136110 发表于 2018-2-12 15:29 | 显示全部楼层
跪求用oled 12c 12864的版本,买不起lcd啊
回复

使用道具 举报

ID:289840 发表于 2018-3-9 21:37 | 显示全部楼层
楼主能发下接线图和相关资料吗
回复

使用道具 举报

ID:308602 发表于 2018-5-26 22:28 | 显示全部楼层
请问那个v1版本总显示“Card Error”怎么回事???
回复

使用道具 举报

ID:276685 发表于 2018-8-17 19:21 | 显示全部楼层
楼主我那个v3.0程序和地图都没问题就是一直提示gps bad。我那个定位模块是sim868,就是不知道程序兼容的是什么gps协议,电脑测试gps定位模块没有问题
回复

使用道具 举报

ID:236106 发表于 2018-9-14 17:04 | 显示全部楼层
楼主 用UNO下载V3程序  报错 <Adafruit_ST7735.h> 库有问题,帮忙提示一下  是我的打开姿势不对吗
回复

使用道具 举报

ID:445463 发表于 2018-12-20 11:35 | 显示全部楼层
感谢楼主分享
回复

使用道具 举报

ID:445463 发表于 2018-12-20 11:36 | 显示全部楼层
很感 兴趣,求接线图、全部资料 383985046@qq.com
回复

使用道具 举报

ID:465223 发表于 2019-1-11 15:15 | 显示全部楼层
求全套资料741176472@qq.com
回复

使用道具 举报

ID:452731 发表于 2019-1-20 22:43 | 显示全部楼层
这个很牛啊
回复

使用道具 举报

ID:79544 发表于 2019-3-3 11:23 | 显示全部楼层
太好的资料啦,感谢楼主分享!!!!!!
回复

使用道具 举报

ID:316761 发表于 2019-5-12 21:33 | 显示全部楼层
希望楼主也发一份完整资料哇,3102845014@qq.com
回复

使用道具 举报

ID:316761 发表于 2019-5-17 00:27 | 显示全部楼层
sf5a1 发表于 2018-9-14 17:04
楼主 用UNO下载V3程序  报错  库有问题,帮忙提示一下  是我的打开姿势不对吗

一样的问题。。。。
回复

使用道具 举报

ID:300101 发表于 2019-11-9 21:41 | 显示全部楼层
很感兴趣,求接线图、全部资料 20171979@qq.com
回复

使用道具 举报

ID:463062 发表于 2020-2-22 22:06 | 显示全部楼层
太厉害了吧,楼主能共享一下资料学习一下吗呜呜呜,我还是个小菜鸟
邮箱435042110@qq.com
回复

使用道具 举报

ID:716703 发表于 2020-3-31 08:12 | 显示全部楼层
提供一个Atmega 328的引脚图

Atmega 328的引脚图

Atmega 328的引脚图
回复

使用道具 举报

ID:433598 发表于 2021-3-16 10:03 | 显示全部楼层
求全套资料
回复

使用道具 举报

ID:903164 发表于 2021-4-19 22:03 | 显示全部楼层
TFT屏显示GPS BAD 如何解决啊?
回复

使用道具 举报

ID:475156 发表于 2021-11-3 13:56 | 显示全部楼层
这个真是牛。
回复

使用道具 举报

ID:796712 发表于 2022-2-21 21:04 | 显示全部楼层
TFT屏显示GPS
回复

使用道具 举报

ID:1111540 发表于 2024-3-22 22:13 | 显示全部楼层
1052092761 发表于 2018-5-26 22:28
请问那个v1版本总显示“Card Error”怎么回事???

你好,请问基于arduino的GPS导航V1版本显示cardError问题你解决了吗
回复

使用道具 举报

ID:1111540 发表于 2024-3-25 17:53 | 显示全部楼层
1052092761 发表于 2018-5-26 22:28
请问那个v1版本总显示“Card Error”怎么回事???

你好,请问你找到原因了吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表