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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

匿名四軸之迷你遙控器附軟硬件源碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:140725 發(fā)表于 2017-3-17 01:37 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
每一個做四軸飛行器都會遇到這樣的情況,飛機做好了, 軟件沒調好!!
還有什么比這更讓人抓狂嗎? 有!!那就是想飛的時候,發(fā)現(xiàn)沒有遙控器!!!

這么讓人抓狂的事情,我都遇到了!!!所以在做飛機的時候把遙控器一起做了吧。

分享一個開源的遙控器設計,嗯,就是匿名四軸的,的確很不錯,代碼的可讀性很強,作為入門學習絕對沒問題。


這個就是傳說中的遙控器源碼
匿名遙控器V1.2.zip (488.18 KB, 下載次數(shù): 72)


這個是設計原理圖
ANO-Remoter V1.2.pdf (125.08 KB, 下載次數(shù): 60)


如果你直接已經做出來或是買了匿名遙控器,恭喜,你會用上這個驅動的
FTDI USB Drivers.zip (1.16 MB, 下載次數(shù): 45)



下面是部分源碼預覽:
  1. /************************ (C) COPYRIGHT 2014 ANO Tech ******************************
  2. * 作者                 :匿名科創(chuàng)
  3. * 文件名  :ANO_RC.cpp
  4. * 描述    :遙控通道數(shù)據(jù)處理
  5. * 技術Q群 :190169595
  6. **********************************************************************************/
  7. #include "ANO_RC.h"

  8. ANO_RC rc;

  9. ANO_RC::ANO_RC()
  10. {
  11.         Init();
  12. }

  13. void ANO_RC::Init(void)
  14. {
  15.         DataRaw[ROLL] = 1500;
  16.         DataRaw[PITCH] = 1500;
  17.         DataRaw[YAW] = 1500;        
  18. }

  19. void ANO_RC::DataGet(void)
  20. {
  21.         DataRaw[ROLL] = DataRaw[ROLL] * 0.99 + (float)ADC_ConvertedValue[3] * 0.01;
  22.         DataRaw[PITCH] = DataRaw[PITCH] * 0.99 + (float)ADC_ConvertedValue[2] * 0.01;
  23.         DataRaw[YAW] = DataRaw[YAW] * 0.99 + (float)ADC_ConvertedValue[1] * 0.01;
  24.         DataRaw[THROTTLE] = DataRaw[THROTTLE] * 0.99 + (float)ADC_ConvertedValue[0] * 0.01;
  25.         KeyDataRawL = (float)ADC_ConvertedValue[5];
  26.         KeyDataRawR = (float)ADC_ConvertedValue[6];
  27. }

  28. void ANO_RC::DataCalculate(void)
  29. {
  30.         Data[ROLL] = (u16)(1000 - DataRaw[ROLL]/2 + 1000) - DataTrim[ROLL];        
  31.         Data[ROLL] =        (Data[ROLL] - 1500) * 0.8 +1500;
  32.         Data[PITCH] = (u16)(DataRaw[PITCH]/2 + 1000) - DataTrim[PITCH];        
  33.         Data[PITCH] =        (Data[PITCH] - 1500) * 0.8 +1500;

  34.         Data[YAW] = (u16)(1000 - DataRaw[YAW]/2  + 1000) - DataTrim[YAW];               
  35.         Data[YAW] =        (Data[YAW] - 1500) * 0.8 +1500;
  36.         Data[THROTTLE] = (u16)(DataRaw[THROTTLE]/2 + 1000) - DataTrim[THROTTLE];               
  37.         Data[THROTTLE] =        (Data[THROTTLE] - 1500) * 0.85 +1500;
  38.         
  39.         KeyDataL = (u16)KeyDataRawL;
  40.         KeyDataR = (u16)KeyDataRawR;
  41. }

  42. void ANO_RC::KeyCheck(void)
  43. {
  44.         static u8 keyFlagL = 1, keyFlagR = 1;
  45.         static u8 timeDelayFlag = 0;
  46.         
  47.         if(timeDelayFlag)
  48.                 timeDelayFlag --;        
  49.         
  50.         if(KeyDataL<100 && keyFlagL)        //THR+
  51.         {
  52.                 if(!timeDelayFlag)
  53.                         timeDelayFlag = 10;
  54.                
  55.                 if((KeyDataL<100 && keyFlagL) && timeDelayFlag == 1)        
  56.                 {
  57.                         DataTrim[THROTTLE] -= 2;
  58.                         param.SAVE_RC_OFFSET();
  59.                         keyFlagL = 0;               
  60.                 }
  61.         }
  62.         else if(KeyDataL>1950 && KeyDataL<2100 && keyFlagL)        //YAW-
  63.         {
  64.                 if(!timeDelayFlag)
  65.                         timeDelayFlag = 10;
  66.                
  67.                 if(KeyDataL>1950 && KeyDataL<2100 && timeDelayFlag == 1)
  68.                 {
  69.                         DataTrim[YAW] += 2;
  70.                         param.SAVE_RC_OFFSET();
  71.                         keyFlagL = 0;               
  72.                 }
  73.         }
  74.         else if(KeyDataL>2650 && KeyDataL<2750 && keyFlagL)        //THR-
  75.         {
  76.                 if(!timeDelayFlag)
  77.                         timeDelayFlag = 10;
  78.                
  79.                 if(KeyDataL>2650 && KeyDataL<2750 && timeDelayFlag == 1)
  80.                 {
  81.                         DataTrim[THROTTLE] += 2;
  82.                         param.SAVE_RC_OFFSET();
  83.                         keyFlagL = 0;               
  84.                 }
  85.         }
  86.         else if(KeyDataL>3000 && KeyDataL<3100 && keyFlagL)        //YAW+
  87.         {
  88.                 if(!timeDelayFlag)
  89.                         timeDelayFlag = 10;
  90.                
  91.                 if(KeyDataL>3000 && KeyDataL<3100 && timeDelayFlag == 1)
  92.                 {
  93.                         DataTrim[YAW] -= 2;
  94.                         param.SAVE_RC_OFFSET();
  95.                         keyFlagL = 0;
  96.                 }
  97.         }
  98.         else if(KeyDataL>4050)
  99.         {
  100.                 keyFlagL = 1;
  101.         }
  102.         
  103.         
  104.         if(KeyDataR<100 && keyFlagR)        //PITCH+
  105.         {
  106.                 if(!timeDelayFlag)
  107.                         timeDelayFlag = 10;
  108.                
  109.                 if(KeyDataR<100 && keyFlagR && timeDelayFlag == 1)
  110.                 {
  111.                         DataTrim[PITCH] -= 2;
  112.                         param.SAVE_RC_OFFSET();
  113.                         keyFlagR = 0;               
  114.                 }
  115.         }
  116.         else if(KeyDataR>1900 && KeyDataR<2100 && keyFlagR)        //ROLL+
  117.         {
  118.                 if(!timeDelayFlag)
  119.                         timeDelayFlag = 10;
  120.                
  121.                 if(KeyDataR>1900 && KeyDataR<2100 && keyFlagR && timeDelayFlag == 1)
  122.                 {
  123.                         DataTrim[ROLL] -= 2;
  124.                         param.SAVE_RC_OFFSET();
  125.                         keyFlagR = 0;               
  126.                 }
  127.         }
  128.         else if(KeyDataR>2600 && KeyDataR<2800 && keyFlagR)        //PITCH-
  129.         {
  130.                 if(!timeDelayFlag)
  131.                         timeDelayFlag = 10;
  132.                
  133.                 if(KeyDataR>2600 && KeyDataR<2800 && keyFlagR && timeDelayFlag == 1)
  134.                 {
  135.                         DataTrim[PITCH] += 2;
  136.                         param.SAVE_RC_OFFSET();
  137.                         keyFlagR = 0;        
  138.                 }                        
  139.         }
  140.         else if(KeyDataR>2950 && KeyDataR<3150 && keyFlagR)        //ROLL-
  141.         {
  142.                 if(!timeDelayFlag)
  143.                         timeDelayFlag = 10;
  144.                
  145.                 if(KeyDataR>2950 && KeyDataR<3150 && keyFlagR && timeDelayFlag == 1)
  146.                 {
  147.                         DataTrim[ROLL] += 2;
  148.                         param.SAVE_RC_OFFSET();
  149.                         keyFlagR = 0;
  150.                 }
  151.         }
  152.         else if(KeyDataR>3200 && KeyDataR<3300 && keyFlagR)
  153.         {
  154.                 if(!timeDelayFlag)
  155.                         timeDelayFlag = 10;
  156.                
  157.                 if(KeyDataR>3200 && KeyDataR<3300 && keyFlagR && timeDelayFlag == 1)
  158.                 {
  159.                 }
  160.         }
  161.         else if(KeyDataR>3350 && KeyDataR<3450 && keyFlagR)
  162.         {
  163.                 if(!timeDelayFlag)
  164.                         timeDelayFlag = 10;
  165.                
  166.                 if(KeyDataR>3350 && KeyDataR<3450 && keyFlagR && timeDelayFlag == 1)
  167.                 {

  168.                 }
  169.         }
  170.         else if(KeyDataR>4050)
  171.         {
  172.                 keyFlagR = 1;
  173.         }
  174.         
  175.         
  176. }
  177. /******************* (C) COPYRIGHT 2014 ANO TECH *****END OF FILE************/
復制代碼



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

使用道具 舉報

沙發(fā)
ID:101523 發(fā)表于 2017-9-18 12:04 | 只看該作者
好東西 正需要呢
回復

使用道具 舉報

板凳
ID:367145 發(fā)表于 2018-12-10 16:19 | 只看該作者
樓主好人,萬分感謝,辛苦辛苦



















回復

使用道具 舉報

地板
ID:418772 發(fā)表于 2018-12-28 21:46 | 只看該作者
想嘗試做一下
回復

使用道具 舉報

5#
ID:69445 發(fā)表于 2019-1-9 23:21 | 只看該作者
樓主好人,萬分感謝,辛苦辛苦
回復

使用道具 舉報

6#
ID:473851 發(fā)表于 2019-2-1 13:15 來自手機 | 只看該作者
感謝分享
回復

使用道具 舉報

7#
ID:621765 發(fā)表于 2019-11-28 11:52 | 只看該作者
謝謝樓主分享
回復

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美一级全黄 | 亚洲一区二区在线播放 | 91不卡在线 | 国产欧美一区二区三区另类精品 | 亚洲精品91 | 亚洲欧美一区二区三区国产精品 | 欧美区日韩区 | 欧美国产激情 | 日韩在线电影 | 精品久久久久一区二区国产 | 欧美aⅴ| 国产中的精品av涩差av | 国产精品国产成人国产三级 | 白浆在线 | 99精品一区二区 | 亚洲欧美在线观看视频 | 久久久精品一区二区三区四季av | 性色av网站| 九九热在线视频免费观看 | 一区二区三区精品视频 | 超级黄色一级片 | 免费美女网站 | 欧美激情一区二区三区 | 久久免费观看视频 | 亚洲91精品 | 日韩一区精品 | 一区二区三区四区免费在线观看 | 久久精品一 | 色噜噜狠狠色综合中国 | 日韩欧美精品一区 | 日韩不卡视频在线观看 | 日韩第一页 | 中文字幕久久精品 | 日韩成人免费视频 | 久久一二区 | 国产一区二区三区视频 | 国产一级精品毛片 | 国产美女在线观看 | 成人在线视 | 欧美一区二区三区 | 成人1区2区 |