久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6166|回復: 3
打印 上一主題 下一主題
收起左側

arduino實現的neo-6m的gps模塊spi接口的oled顯示程序

[復制鏈接]
跳轉到指定樓層
樓主
自己弄來玩一下,交流交流

單片機源程序如下:
  1. //此處為了兼容其他的多串口Arduino板子
  2. #define GpsSerial  Serial
  3. #define DebugSerial Serial//用的是同一串口


  4. #include "U8glib.h"
  5. int L = 13; //LED指示燈引腳
  6. U8GLIB_SSD1306_128X64 u8g(13, 11, 10, 9);  // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
  7. struct
  8. {
  9.         char GPS_Buffer[80];
  10.         bool isGetData;                //是否獲取到GPS數據
  11.         bool isParseData;        //是否解析完成
  12.         char UTCT[11];                //UTC時間
  13.         char weidu[11];                //緯度
  14.         char N_S[2];                //N/S
  15.         char jingdu[12];                //經度
  16.         char E_W[2];                //E/W
  17.         bool isUsefull;                //定位信息是否有效
  18. } Save_Data;

  19. const unsigned int gpsRxBufferLength = 600;
  20. char gpsRxBuffer[gpsRxBufferLength];
  21. unsigned int ii = 0;


  22. void setup()        //初始化內容
  23. {
  24.         GpsSerial.begin(9600);                        //定義波特率9600,和我們店鋪的GPS模塊輸出的波特率一致
  25.         DebugSerial.begin(9600);
  26.         DebugSerial.println("GPS information");
  27.         DebugSerial.println("Please wating...");

  28.         Save_Data.isGetData = false;
  29.         Save_Data.isParseData = false;
  30.         Save_Data.isUsefull = false;

  31. }

  32. void loop()                //主循環
  33. {
  34.         gpsRead();        //獲取GPS數據
  35.         parseGpsBuffer();//解析GPS數據
  36.         printGpsBuffer();//輸出解析后的數據
  37.         // DebugSerial.println("\r\n\r\nloop\r\n\r\n");
  38. // picture loop
  39.   u8g.firstPage();  
  40.   do {
  41.    draw();
  42.   } while( u8g.nextPage() );
  43.   
  44.   // rebuild the picture after some delay
  45.   delay(5000);
  46. }

  47. void draw(void) {
  48.   // graphic commands to redraw the complete screen should be placed here  
  49. // u8g.setFont(u8g_font_unifont);
  50.   //u8g.setPrintPos(0, 20);
  51.   // call procedure from base class, http://arduino.cc/en/Serial/Print
  52.   //u8g.print("Hello World!");
  53.    u8g.setFont(u8g_font_unifont);
  54.     u8g.setPrintPos(0, 10);
  55.     u8g.print("UTCT =  ");
  56.     u8g.setPrintPos(50, 10);
  57.     u8g.print(Save_Data.UTCT);
  58.    
  59.      u8g.setFont(u8g_font_unifont);
  60.       u8g.setPrintPos(0, 20);
  61.       u8g.print("weidu = ");
  62.        u8g.setPrintPos(65, 20);
  63.       u8g.print(Save_Data.weidu);
  64.       
  65.       u8g.setFont(u8g_font_unifont);
  66.       u8g.setPrintPos(0, 30);
  67.       u8g.print("N_S = ");
  68.       u8g.setPrintPos(45, 30);
  69.       u8g.print(Save_Data.N_S);
  70.       
  71.       u8g.setFont(u8g_font_unifont);
  72.        u8g.setPrintPos(0, 40);
  73.       u8g.print("jingdu = ");
  74.       u8g.setPrintPos(65, 40);
  75.       u8g.print(Save_Data.jingdu);
  76.      
  77.       u8g.setFont(u8g_font_unifont);
  78.       u8g.setPrintPos(0, 50);
  79.       u8g.print("E_W = ");
  80.       u8g.setPrintPos(45, 50);
  81.       u8g.print(Save_Data.E_W);

  82.        u8g.setFont(u8g_font_unifont);
  83.       u8g.setPrintPos(5, 60);
  84.       u8g.print("GPS Information ");
  85.    

  86. }

  87. void errorLog(int num)
  88. {
  89.         DebugSerial.print("ERROR");
  90.         DebugSerial.println(num);
  91.         while (1)
  92.         {
  93.                 digitalWrite(L, HIGH);
  94.                 delay(300);
  95.                 digitalWrite(L, LOW);
  96.                 delay(300);
  97.         }
  98. }

  99. void printGpsBuffer()//輸出解析后的數據
  100. {
  101.         if (Save_Data.isParseData)
  102.         {
  103.                 Save_Data.isParseData = false;
  104.                
  105.                 DebugSerial.print("Save_Data.UTCT = ");
  106.                 DebugSerial.println(Save_Data.UTCT);
  107.    
  108.    
  109.    
  110.      
  111.    
  112.                 if(Save_Data.isUsefull)
  113.                 {
  114.                         Save_Data.isUsefull = false;
  115.      
  116.    
  117.                         DebugSerial.print("Save_Data.weidu = ");
  118.                         DebugSerial.println(Save_Data.weidu);
  119.                         DebugSerial.print("Save_Data.N_S = ");
  120.                         DebugSerial.println(Save_Data.N_S);
  121.                         DebugSerial.print("Save_Data.jingdu = ");
  122.                         DebugSerial.println(Save_Data.jingdu);
  123.                         DebugSerial.print("Save_Data.E_W = ");
  124.                         DebugSerial.println(Save_Data.E_W);
  125.      
  126.                 }
  127.                 else
  128.                 {
  129.                         DebugSerial.println("data is wrong");
  130.      
  131.       
  132.                
  133.         }
  134. }
  135. }

  136. void parseGpsBuffer()//解析GPS數據
  137. {
  138.         char *subString;
  139.         char *subStringNext;
  140.         if (Save_Data.isGetData)
  141.         {
  142.                 Save_Data.isGetData = false;
  143.                 DebugSerial.println("**************");
  144.                 DebugSerial.println(Save_Data.GPS_Buffer);

  145.                
  146.                 for (int i = 0 ; i <= 6 ; i++)
  147.                 {
  148.                         if (i == 0)
  149.                         {
  150.                                 if ((subString = strstr(Save_Data.GPS_Buffer, ",")) == NULL)
  151.                                         errorLog(1);        //解析錯誤
  152.                         }
  153.                         else
  154.                         {
  155.                                 subString++;
  156.                                 if ((subStringNext = strstr(subString, ",")) != NULL)
  157.                                 {
  158.                                         char usefullBuffer[2];
  159.                                         switch(i)
  160.                                         {
  161.                                                 case 1:memcpy(Save_Data.UTCT, subString, subStringNext - subString);break;        //獲取UTC時間
  162.                                                 case 2:memcpy(usefullBuffer, subString, subStringNext - subString);break;        //獲取UTC時間
  163.                                                 case 3:memcpy(Save_Data.weidu, subString, subStringNext - subString);break;        //獲取緯度信息
  164.                                                 case 4:memcpy(Save_Data.N_S, subString, subStringNext - subString);break;        //獲取N/S
  165.                                                 case 5:memcpy(Save_Data.jingdu, subString, subStringNext - subString);break;        //獲取經度度信息
  166.                                                 case 6:memcpy(Save_Data.E_W, subString, subStringNext - subString);break;        //獲取E/W

  167.                                                 default:break;
  168.                                         }

  169.                                         subString = subStringNext;
  170.                                         Save_Data.isParseData = true;
  171.                                         if(usefullBuffer[0] == 'A')
  172.                                                 Save_Data.isUsefull = true;
  173.                                         else if(usefullBuffer[0] == 'V')
  174.                                                 Save_Data.isUsefull = false;

  175.                                 }
  176.                                 else
  177.                                 {
  178.                                         errorLog(2);        //解析錯誤
  179.                                 }
  180.                         }


  181.                 }
  182.         }

  183. }


  184. void gpsRead() //獲取GPS數據
  185. {
  186.         while (GpsSerial.available())
  187.         {
  188.                 gpsRxBuffer[ii++] = GpsSerial.read();
  189.                 if (ii == gpsRxBufferLength)clrGpsRxBuffer();
  190.         }

  191.         char* GPS_BufferHead;
  192.         char* GPS_BufferTail;
  193.         if ((GPS_BufferHead = strstr(gpsRxBuffer, "$GPRMC,")) != NULL || (GPS_BufferHead = strstr(gpsRxBuffer, "$GNRMC,")) != NULL )
  194.         {
  195.                 if (((GPS_BufferTail = strstr(GPS_BufferHead, "\r\n")) != NULL) && (GPS_BufferTail > GPS_BufferHead))//"\r\n"回車換行的符號
  196.                 {
  197.                         memcpy(Save_Data.GPS_Buffer, GPS_BufferHead, GPS_BufferTail - GPS_BufferHead);
  198.                         Save_Data.isGetData = true;

  199.                         clrGpsRxBuffer();
  200.                 }
  201.         }

  202. }

  203. void clrGpsRxBuffer(void)
  204. {
  205.         memset(gpsRxBuffer, 0, gpsRxBufferLength);      //清空
  206.         ii = 0;
  207. }
復制代碼

所有資料51hei提供下載:
程序.rar (2.26 KB, 下載次數: 36)




評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏4 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:595997 發表于 2019-8-14 15:23 來自手機 | 只看該作者
您好,gps的tx接哪腳?
回復

使用道具 舉報

板凳
ID:645611 發表于 2019-11-20 11:30 | 只看該作者
您好,想問下樓主下載文件編譯后出現U8glib.h: No such file or directory的錯誤,是因為沒有這個頭文件的原因嗎
回復

使用道具 舉報

地板
ID:79544 發表于 2020-9-14 11:21 | 只看該作者
suimodeyaoyuan 發表于 2019-11-20 11:30
您好,想問下樓主下載文件編譯后出現U8glib.h: No such file or directory的錯誤,是因為沒有這個頭文件的 ...

安裝這個庫就行啦
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91九色porny首页最多播放 | 国产精彩视频 | 久久九九免费 | 国产成人a亚洲精品 | 亚洲精品麻豆 | 日本一二区视频 | 国产精品污www在线观看 | 日韩欧美高清dvd碟片 | 成人亚洲精品久久久久软件 | 激情一区二区三区 | 激情五月激情综合网 | 偷拍自拍网 | 神马久久久久久久久久 | 久久久久久国产精品 | 日韩成人高清 | 狠狠干在线 | 国产亚洲一区二区三区 | 日韩欧美中文字幕在线观看 | 午夜私人影院 | 成人在线免费 | h片在线免费看 | 久99久视频 | 国产精品久久久久久久久久久久久 | 亚洲逼院| 欧美男人天堂 | 国产自产21区 | 一区二区久久 | 91麻豆精品国产91久久久久久 | 欧美一区二区三区在线观看 | 玖玖综合在线 | 成人av一区二区三区 | 欧美lesbianxxxxhd视频社区 | 国产午夜精品视频 | 黄色av网站在线观看 | 暖暖日本在线视频 | 色综合久久久久 | 国产日韩欧美一区二区 | www.日韩系列 | 亚洲欧洲成人av每日更新 | 久久久久久久久久久成人 | 久久69精品久久久久久久电影好 |