找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 20116|回復(fù): 10
收起左側(cè)

GY-25傾斜度角度模塊 串口直接輸出角度數(shù)據(jù) MPU-6050模塊 傳感器

  [復(fù)制鏈接]
ID:124148 發(fā)表于 2016-5-31 01:25 | 顯示全部樓層 |閱讀模式
給大家點好東西  ,這個資料挺不錯的,GY-25傾斜度角度模塊 串口直接輸出角度數(shù)據(jù) MPU-6050模塊 傳感器.rar 就和大家分享下

0.png

51單片機程序:
  1. //  GY-25
  2. //  使用單片機:STC89C52
  3. //  晶振:  11.0592 M
  4. //  液晶屏:LCD1602
  5. //  波特率:9600
  6. #include<REG52.H>       
  7. #include<math.h>       //Keil library  
  8. #include<stdio.h>      //Keil library       
  9. #include<INTRINS.H>
  10. #define uchar unsigned char
  11. #define uint  unsigned int       
  12.        
  13. //********定義變量*****************************
  14. uchar   BUF[10];          //數(shù)據(jù)緩存區(qū)
  15. uchar   cnt=0;           //接收數(shù)據(jù)的累計值
  16. uchar   sign=0;
  17. int YPR[3];
  18. //********定義函數(shù)*****************************
  19. void    delay(unsigned int k);
  20. void    SeriPushSend(uchar send_data);
  21. void           display(void);
  22. //*********************************************
  23. //串口中斷
  24. void serial_serve(void) interrupt 4       
  25. {

  26.   if(RI==1){         //中斷標(biāo)志
  27.      RI=0;
  28.     BUF[cnt]=SBUF;       
  29.           cnt++;        //接收計數(shù)
  30.     if(cnt==8)                //
  31.     {   
  32.        cnt=0;                 //
  33.        sign=1;
  34.     }
  35.   }
  36.        
  37. }
  38. //*********************************************
  39. //串口初始化
  40. //9600 bps @ 11.059 MHz
  41. void init_uart()
  42. {
  43.         TMOD=0x21;                               
  44.         TH1=0xfd;                               
  45.         TL1=0xfd;                               
  46.         SCON=0x50;
  47.         PS=1;      //串口中斷設(shè)為高優(yōu)先級別
  48.         TR0=1;           //啟動定時器                       
  49.         TR1=1;
  50.         ET0=1;     //打開定時器0中斷                       
  51.         ES=1;       
  52. }

  53. //**********延時函數(shù)***************
  54. void delay(unsigned int k)       
  55. {                                               
  56.         unsigned int i,j;                               
  57.         for(i=0;i<k;i++)
  58.         {                       
  59.         for(j=0;j<121;j++)                       
  60.         {;}
  61.         }                                               
  62. }                                                           
  63. //*********串口數(shù)據(jù)發(fā)送******************
  64. void  SeriPushSend(uchar send_data)
  65. {
  66.     SBUF=send_data;  
  67.         while(!TI);TI=0;          
  68. }
  69. //*************************************
  70. void dis_play(int num)       
  71. {
  72.         if(num<0)
  73.         {
  74.                 num=-num;
  75.                 SeriPushSend('-');
  76.         }
  77.         else
  78.                 SeriPushSend('+');

  79.         SeriPushSend(0x30|(num/10000));       
  80.         SeriPushSend(0x30|(num%10000/1000));
  81.         SeriPushSend(0x30|(num%1000/100));
  82.         SeriPushSend(0x2e);
  83.         SeriPushSend(0x30|(num%100/10));
  84.         SeriPushSend(0x30|(num%10));
  85.         SeriPushSend(',');
  86. }




  87. //*******************數(shù)據(jù)接收并顯示**********************
  88. void display(void)
  89. {
  90.                
  91.   if(sign){
  92.          sign=0;       

  93.              if(BUF[0]==0XAA&&BUF[7]==0X55){                         //幀頭判斷   
  94.                                  
  95.           YPR[0]=(BUF[1]<<8|BUF[2]);  
  96.           YPR[1]=(BUF[3]<<8|BUF[4]);
  97.           YPR[2]=(BUF[5]<<8|BUF[6]);
  98.                                        
  99.                  SeriPushSend('#');
  100.              SeriPushSend('Y');
  101.              SeriPushSend('P');
  102.              SeriPushSend('R');
  103.              SeriPushSend('=');
  104.                          
  105.              dis_play(YPR[0]);
  106.                  dis_play(YPR[1]);
  107.              dis_play(YPR[2]);  
  108.                          
  109.                  SeriPushSend(0X0d);
  110.              SeriPushSend(0X0a);                                 
  111.         }
  112.    }  
  113. }
  114. //***************************************
  115. //主程序
  116. void main()
  117. {
  118.    delay(2000);                                                      //延時               
  119.    init_uart();                                               //初始化串口
  120.    EA=1;                                                      //開總中斷
  121.    cnt=0;
  122.    SeriPushSend(0XA5);
  123.    SeriPushSend(0X52);                                        //發(fā)送1幀讀取命令,連續(xù)讀取
  124.    while(1){

  125.    display();                                             

  126.    }                                                                  //end while
  127. }

復(fù)制代碼


arduino程序:
  1. //GY-25  ARDUINO  測試代碼 IICLCD2004顯示角度
  2. //注意1:下載程序時候,請先斷開GY25的連線!否則將導(dǎo)致下載不成功
  3. //注意2:GY25模塊使用時,上電自校正,建議不要用手拿著模塊,
  4. //       保持3秒以上靜止?fàn)顟B(tài),才能發(fā)送命令開始工作
  5. //   GY25                  arduino pro mini
  6. //   VCC----------------------VCC
  7. //   RX-----------------------TX
  8. //   TX-----------------------RX
  9. //   GND----------------------GND
  10. //-----------------------------------------------
  11. //   IICLCD2004            arduino pro mini
  12. //   VCC----------------------VCC
  13. //   SCL----------------------A5
  14. //   SDA----------------------A4
  15. //   GND----------------------GND
  16. #include <Wire.h>
  17. #include <LiquidCrystal_I2C.h>
  18. int YPR[3];
  19. unsigned char Re_buf[8],counter=0;
  20. unsigned char sign=0;
  21. int led = 13;
  22. LiquidCrystal_I2C lcd(0x20,20,4);  // set the LCD address to 0x20 for a 20 chars and 4 line display

  23. //-----------------------------------------------------------
  24. void setup()
  25. {
  26.   lcd.init();                      // initialize the lcd
  27.   // Print a message to the LCD.   
  28.   Serial.begin(115200);  
  29.   delay(2000);   
  30.   Serial.write(0XA5);
  31.   Serial.write(0X52);    //初始化GY25,連續(xù)輸出模式
  32.   lcd.backlight();
  33.   lcd.setCursor(0,0);     //I2C接口LCD2004顯示初始值
  34.   lcd.print("Yaw:");
  35.   lcd.setCursor(0,1);
  36.   lcd.print("Pitch:");
  37.   lcd.setCursor(0,2);
  38.   lcd.print("Roll:");
  39. }
  40. //-------------------------------------------------------------
  41. void loop() {
  42.   if(sign)
  43.   {  
  44.      sign=0;
  45.      if(Re_buf[0]==0xAA && Re_buf[7]==0x55)        //檢查幀頭,幀尾
  46.      {                 
  47.             YPR[0]=(Re_buf[1]<<8|Re_buf[2])/100;   //合成數(shù)據(jù),去掉小數(shù)點后2位
  48.             YPR[1]=(Re_buf[3]<<8|Re_buf[4])/100;
  49.             YPR[2]=(Re_buf[5]<<8|Re_buf[6])/100;
  50.             
  51.             lcd.setCursor(4,0);     
  52.             lcd.print("    ");
  53.             lcd.setCursor(4,0);
  54.             lcd.print(YPR[0]);      //顯示航向

  55.             lcd.setCursor(6,1);   
  56.             lcd.print("    ");                    
  57.             lcd.setCursor(6,1);    //顯示俯仰角
  58.             lcd.print(YPR[1]);     

  59.             lcd.setCursor(5,2);   
  60.             lcd.print("    ");  
  61.             lcd.setCursor(5,2);     //顯示橫滾角
  62.             lcd.print(YPR[2]);      
  63.             delay(100);           
  64.    }
  65.   }
  66. }
  67. //---------------------------------------------------------------
  68. void serialEvent() {
  69.   while (Serial.available()) {   
  70.     Re_buf[counter]=(unsigned char)Serial.read();
  71.     if(counter==0&&Re_buf[0]!=0xAA) return;      // 檢查幀頭         
  72.     counter++;      
  73.     if(counter==8)                //接收到數(shù)據(jù)
  74.     {   
  75.        counter=0;                 //重新賦值,準(zhǔn)備下一幀數(shù)據(jù)的接收
  76.        sign=1;
  77.     }      
  78.   }
  79. }

復(fù)制代碼


GY-25傾斜度角度模塊 串口直接輸出角度數(shù)據(jù) MPU-6050模塊 傳感器.rar

5.76 MB, 下載次數(shù): 136, 下載積分: 黑幣 -5

評分

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

查看全部評分

回復(fù)

使用道具 舉報

ID:192644 發(fā)表于 2017-4-23 19:25 | 顯示全部樓層
如果沒有l(wèi)ed,我用電腦串口數(shù)據(jù)應(yīng)該怎么辦呀
這個程序哪里讀的數(shù)據(jù)呀,不是只有傳輸嗎?
新手,大神幫忙
回復(fù)

使用道具 舉報

ID:225586 發(fā)表于 2017-8-24 13:32 | 顯示全部樓層
厲害aa
回復(fù)

使用道具 舉報

ID:246080 發(fā)表于 2017-11-4 20:24 | 顯示全部樓層
正好我需要這個
回復(fù)

使用道具 舉報

ID:289615 發(fā)表于 2018-3-9 12:32 | 顯示全部樓層
好厲害的樣子啊
回復(fù)

使用道具 舉報

ID:521996 發(fā)表于 2019-5-26 16:54 | 顯示全部樓層
正好需要,下載來看看!
回復(fù)

使用道具 舉報

ID:421308 發(fā)表于 2019-7-17 15:10 | 顯示全部樓層
正好需要,進來看看
回復(fù)

使用道具 舉報

ID:586056 發(fā)表于 2019-7-17 23:32 | 顯示全部樓層
謝謝了,
回復(fù)

使用道具 舉報

ID:594119 發(fā)表于 2019-8-5 19:55 | 顯示全部樓層
挺不錯的資料
回復(fù)

使用道具 舉報

ID:518004 發(fā)表于 2019-10-21 20:16 | 顯示全部樓層
xiaozhong1314 發(fā)表于 2019-7-17 15:10
正好需要,進來看看

您好,請問你們利用這個程序成功實現(xiàn)了么?我是新手,想請教請教一下 在實驗中I2C數(shù)據(jù)和時鐘口應(yīng)該怎么接呢?
回復(fù)

使用道具 舉報

ID:628217 發(fā)表于 2019-10-23 09:26 | 顯示全部樓層
先保存下來,以后能用得上
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表