2016年4月25日 星期一

DIY 精準控 - OLED 版 (NRF24L01高頻頭+Arduino+PPM訊號)

無法克服年紀漸長的記憶力衰退問題,只好.........動動腦了!
原本 DIY 模組(這篇)切換協定要靠不同搖桿位置來區分,機子一多,協定一多........哪記得這麼多啊? 只好 ..... 繼續玩下去了!


2016/4/27 更新:

可以:
1. 顯示最後一次飛行的協定
2. 按鍵選單選擇協定 
3. 偵測 PPM訊號是否正常
4. 偵測高頻頭是否正常

還沒搞定:
1. 未按鍵時自動倒數進入對頻狀態 -- 暫緩
2. 油門安全鎖定(反向)無法過關時的訊息顯示(THR ppm值?)
3. 怎麼搞小一點 ..... XDD  -- 暫緩

2016/5/11 更新:
先前有飛友反應,此模組飛行 JJ1000 時會出現偶而頓一下(Lag?)LED會閃一下的問題,前一篇在更換不同廠牌 Arduino nano 之後已改善,近期把先前 NG 的 Arduion nano 再拿出來在此OLED模組上測試,咦~~~奇怪,怎麼沒有再發生問題?做了一些交叉測試後發現,如果使用 Flysky FS-I6 遙控器的  PPM 輸出,似乎就沒有問題,但用 Flysky老控 FS-TH9X PPM 甚至  Frsky Taranis X9D+ PPM 就會出現這樣的現象,莫非問題出在各家遙控器 PPM 輸出訊號狀況?? 再花時間研究研究.

20180206更新:
STM32 版本的nRF24L01多協議計畫
https://github.com/bv4wg/nrf24_multipro
接腳定義
https://github.com/bv4wg/nrf24_multipro/blob/master/nRF24_multipro/nRF24_multipro.ino#L81

尚未測試過........


程式碼參考: 20180213更新協定及加入未按鍵時(10秒)自動倒數進入對頻狀態,感謝 kabuto大協助.
http://www.mediafire.com/file/mf16puzg5871efd/nrf24_multipro-OLED.zip
支援協定:
"V2X2","CG023","CX10_BLUE","CX10_GREEN","H7","BAYANG","SYMAX5C1","YD829","H8-3D","MJX","SYMAXOLD","HISKY","KN","YD717","FQ777124","E010","BAYANG_SW"(silverware)

34 則留言:

  1. 好強~不知到你都在哪邊玩四軸?

    回覆刪除
  2. 受限於時間,家庭因素,基本上我都玩迷你機,在家飛或家門口小空地飛而已,诶什麼機會到飛場去飛~~~

    回覆刪除
  3. 我是剛開始加入玩四軸的~因為看過有人飛過250的穿越機!!
    怕自己在外面飛技術不好傷到別人,所以就想飛裝保護架的JJ1000這樣比較安全!!
    等比較有技術時在組穿越機玩。

    回覆刪除
    回覆
    1. 從JJ1000開始飛四軸的確是一個正確的決定,無刷四軸殺傷力真的都很強!真的真的要小心.

      刪除
  4. dc兄,
    看了大大這個貼後嘗試刷用arduino IDE刷nano,但有compile error (己把u8glib加入library),是那裡出錯了?刷時是否要把oled接上(因手上没有,己經買了在途中)?

    回覆刪除
    回覆
    1. OLED不接也沒關係! 請問錯誤訊息為何?
      印象中當時也出現很多次錯誤,後來逐一修正才克服,需要看一下錯誤訊息才行!

      刪除
    2. https://www.youtube.com/watch?v=bH-BW6gTnGI

      刪除
    3. 作者已經移除這則留言。

      刪除
    4. current_protocol = constrain(EEPROM.read(ee_PROTOCOL_ID),0,PROTO_END-1);

      u8g.firstPage();
      do {
      u8g.drawStr(0, 0,"Init.Protocol:" );
      u8g.drawStr(0, 15,menu_strings[current_protocol] );


      u8g.drawStr(5, 30,"CH3 : " );
      ppmdata = ppm[THROTTLE];
      u8g.drawStr(30, 30, ppmdata );


      } while( u8g.nextPage() );
      delay(2000);

      把314和315行ppmdata = ppm[THROTTLE]; u8g.drawStr(30, 30, ppmdata ); 刪去後刷入成功, 不知那是顕示些什麼的!

      刪除
    5. 原先是顯示這個error

      nRF_OLED-12s:315: error: call of overloaded 'drawStr(int, int, uint16_t&)' is ambiguous

      u8g.drawStr(30, 30, ppmdata );

      刪除
    6. Orz ....
      抱歉,請把上面一行 " u8g.drawStr(5, 30,"CH3 : " );" 也刪掉,
      這是我要查看油門搖桿 ppm 上下限數值用的程式碼,忘了刪掉 ........... 老人痴呆症發作

      刪除
    7. 原來那片是dc兄發的,是dc兄编的程式。太厲害了!還想成功後把協議更新一下,這次有人可請教了!

      刪除
    8. https://www.dropbox.com/s/h4ryrpuc3i8debr/nrf24_multipro-OLED.rar?dl=0

      嘗試把dc兄的協議更新到Goebish的最後版本, dc兄若有空請指點一二.
      未按鍵時自動倒數進入對頻狀態, oled最後一行是亂碼, 這兩項可以搞定嗎?

      刪除
    9. OK!這兩天找時間研究一下! 您動作真快 ~~~

      刪除
    10. "未按鍵時自動倒數進入對頻狀態" 此功能已完成,預設10秒未按按鍵則進入對頻狀態; OLED MENU 最後一行亂碼問題尚未解決......

      刪除
    11. 都搞定了~~~
      http://www.mediafire.com/file/mf16puzg5871efd/nrf24_multipro-OLED.zip

      刪除
    12. dc兄真强!應發上rcgroup分享一下。

      刪除
    13. 這小東西,不敢放上RCG去獻醜,畢竟是改Goebish的程式碼!

      刪除
  5. 作者已經移除這則留言。

    回覆刪除
  6. 祝dc兄新年進步, 心想事成!
    最近用nano做了个ppm控
    https://www.rcgroups.com/forums/showpost.php?p=39201764&postcount=92
    可以配搭這個高頻頭, 想分享上去, 不知可不可以?

    回覆刪除
  7. kabuto兄太客氣了,分享在此就是給大家用的,請自行取用囉!您po的這個DIY控蠻有趣的,換我要找時間來玩玩了!

    回覆刪除
  8. 請問版主,如果要自製個接收
    可以參照裡面的程式碼做出接收嗎?

    回覆刪除
    回覆
    1. 若您有射頻相關程式開發經驗的話是有機會的,小弟能力不足,只能拿高手寫的程式來改!

      刪除
    2. 請問你裡面的OLED屏是0.96吋的還是1.3吋的如果是0.96吋地換成1.3吋的程式需要改嗎?

      刪除
    3. #include iface_nrf24l01.h
      請問這行是引入NRF24L01的函數庫吧?
      我有嘗試把它改成我這邊函數庫的名字
      但他卻跳出我沒有匹配的函數來控制這行程式u8g.drawStr(30, 30, ppmdata );

      刪除
    4. 我是用0.96的換成1.3寸,只要驅動ic相同,問題不大;至於第二個問題,我只能猜測,你用的函式庫不是u8g的庫,所以程式找不到u8g.drawStr這個函數

      刪除
    5. 前面的
      u8g.drawStr(5, 30,"CH3 : " );
      這行的功用是看油門的行程量嗎?

      刪除
  9. 請問可否給我你使用的u8g函數庫?

    回覆刪除
  10. 前面看CH3的那個是測試用,看CH3通道ppm輸出值用的測試程式,正式版沒用到;至於u8g的庫,google一下u8glib_arduino_v1.18.1(或許後面有新版本,版本號會不同)即可

    回覆刪除
    回覆
    1. 我把
      ppmdata = ppm[THROTTLE]; u8g.drawStr(30, 30, ppmdata );
      刪去後出現了沒有在此範圍內聲明NRF24L01 Reset
      這行:nRF_ok = NRF24L01_Reset();

      刪除
    2. 這兩行原本就被註解掉了(前面有// ,刪或不刪基本上沒影響,是不是有動到其他地方,還是每行最後的;沒有處理好?我在我的電腦上測試這兩行刪或不刪編譯都沒問題

      刪除