查看完整版本: 有關Arduino的問題
頁: [1]

weirdococo 發表於 2017-5-10 11:32 AM

有關Arduino的問題

本帖最後由 weirdococo 於 2017-5-10 11:35 AM 編輯

這是我第一次寫arduino,所以想把自己在其他地方常用的程式庫寫進去,其他的都工作了,但有一寫寫不出來,也就是fold/reduce,先上source code:

#include <StandardCplusplus.h>
#include <vector>
#include <algorithm>
#include <numeric>

namespace HigherOrderFunctions {

    //filter
    template < typename Collection, typename filterOperate  >
        Collection filter( Collection collection, filterOperate operate ) {
            collection.erase( std::remove_if(collection.begin(), collection.end(), ( typename Collection::value_type i ) { return !operate(i); } ),
                    collection.end() );
            return collection;
        }

    //map
    template < typename Collection, typename mapOperate  >
        Collection map( Collection collection, mapOperate operate ) {
            std::transform( collection.begin(), collection.end(), collection.begin(), operate );
            return collection;
        }
   
    //zip
    template < typename Collection, typename biOperate >
        Collection zip( Collection firstCollection, Collection secoundCollection, biOperate operate ) {
            std::transform( firstCollection.begin(), firstCollection.end(), secoundCollection.begin(), firstCollection.begin(), operate );
            return firstCollection;
        }

    //fold 期望輸出不改變型別,也就是說如果出入是int vector,輸出就是
    //只有一個元素的vecter,map 就是只有一個元素的map。
    template < typename Collection, typename foldOperator >
        Collection fold( Collection collection, foldOperator operate ) {
             Collection gonnaReturn;
           
            return gonnaReturn;
        }
}

想不出來怎麼寫!!



...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div><div></div>

ERICSU62 發表於 2017-5-10 01:58 PM

很厲害寫這麼多! 參考用圖形化軟體:Webduino Blockly /arduino ARDUBLOCK

chevylin0802 發表於 2017-5-10 04:03 PM

本帖最後由 chevylin0802 於 2017-5-10 04:20 PM 編輯

單晶片並不適合進行數學運算
尤其是複雜的浮點運算甚至於三角函數以及微積分與線性代數等類型的高等數學範圍的部份
畢竟它不具備浮點運算器也不具備足夠的記憶體
你如果是使用樹莓派系列的32位元晶片的板卡的話就不會有問題
但是Arduino只是用於比較簡單的I/O輸出入的監聽與控制
實在是無法承受那麼複雜的運算動作
所以別把不適合的程式庫寫進去
因為很快你就會發現你的程式碼把Flash塞爆
或者你會發現你的RAM不夠使用
以基本款的Arduino UNO R3為例
Flash也才32KB
SRAM也才2KB
EEPROM也才1KB
比8051還差上許多



...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>

weirdococo 發表於 2017-5-11 12:57 PM

ERICSU62 發表於 2017-5-10 01:58 PM static/image/common/back.gif
很厲害寫這麼多! 參考用圖形化軟體:Webduino Blockly /arduino ARDUBLOCK

總覺得你一定沒有看我到底在寫些甚麼。{:31:}
但是感謝回復!

weirdococo 發表於 2017-5-11 01:02 PM

chevylin0802 發表於 2017-5-10 04:03 PM static/image/common/back.gif
單晶片並不適合進行數學運算
尤其是複雜的浮點運算甚至於三角函數以及微積分與線性代數等類型的高等數學範 ...

其實我一直在考慮要不要用用看樹莓派,雖然一堆人推薦Arduino,說Arduino比較好用又比較簡單,
是個好的開始,額且Arduino使用者比樹莓派多很多,問問題比較容易有解答,所以大家都推Arduino,
不管你要做四旋翼還是機器人,都是Arduino簡單,但我想這可能不是用於我,至少我C/C++不熟,
用arduino就可有用python 或這 rust 類的語言,也省去了一些非必要的學西時間。...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div><br><br><br><br><br><div></div>

chevylin0802 發表於 2017-5-11 01:39 PM

本帖最後由 chevylin0802 於 2017-5-11 02:21 PM 編輯

weirdococo 發表於 2017-5-11 01:02 PM static/image/common/back.gif
其實我一直在考慮要不要用用看樹莓派,雖然一堆人推薦Arduino,說Arduino比較好用又比較簡單,
是個好的 ...
Arduino怎麼可能會去使用Python或rust?
光光記憶體就不夠支撐Python直譯器的程式
更不用說它還需要相關的程式庫的支持
而且Arduino並沒有作業系統
根本無法支持多工作業

至於所謂的四軸的飛行器
雖然可以簡單的透過Arduino的模組來兜出成果
但它無法做到更高的自動化
仍然只能停留在手控的階段
當然它是可以透過所謂的wifi遙控器來操作
但是自動返航系統可就沒有那個能力了

至於樹莓派跟Arduino本來就無法相提併論
兩者的用途原本就不同
Arduino比較偏向於終端裝置的應用
而樹莓派相當於可以作為IoT物聯網的伺服器或路由
本來就注重在不同層面的事情
如何混為一談?
但樹莓派好歹也是32位元甚或新的型號已經達到64位元
可以嵌入作業系統
當然它的運算能力以及可供暫存的記億體空間是Arduino的數百數千倍
哪裏來的可比性?

Arduino就因為它只是單晶片的關係
所以一般而言就只能寫C與C++部份支援的程式
當然也可能可以用組合語言來寫
至於其他的程式語言就無法支援了

至於樹莓派好歹也是32位元的MIPS處理器
只要裝好Embedded Linux的作業系統
就可以自行編譯或者下載各種程式語言的環境
當然也包括Python, Java, Ruby,.....等
即便你拿樹莓派去架個網站也很輕鬆容易

...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>

CodeMonk 發表於 2017-5-14 01:00 PM

本帖最後由 CodeMonk 於 2017-5-14 01:01 PM 編輯

chevylin0802 發表於 2017-5-11 01:39 PM static/image/common/back.gif
Arduino怎麼可能會去使用Python或rust?
光光記憶體就不夠支撐Python直譯器的程式
更不用說它還需要相關的 ...
看到有人搞不清楚arduino和RaspberryPI,還能寫arduino寫的這麼開心,有一點讓人傻眼。
這讓我想到一個問題,位甚麼感覺好像台灣大專院校都在推arduino
(剛剛Google 搜尋趨勢,好像只有德國、英國、北歐國家比較有人用RaspberryPI),
用RaspberryPI明明就只要用本來電腦常用的東西寫就好了,就教學上來說比較簡單,
是因為價錢嗎?(官網價Arduino Uno Rev3 =>...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>

chevylin0802 發表於 2017-5-14 03:00 PM

本帖最後由 chevylin0802 於 2017-5-15 11:44 AM 編輯

CodeMonk 發表於 2017-5-14 01:00 PM
看到有人搞不清楚arduino和RaspberryPI,還能寫arduino寫的這麼開心,有一點讓人傻眼。
這讓我想到一個問 ...
拜物聯網所賜的關係
所以就有許多人鼓吹使用Arduino
當然我並不會認為這是對的或是錯的事情
畢竟以物聯網的架構來說
物聯網終端裝置多數仍然是單晶片為主
不可能去使用樹莓派這類型的架構
只是物聯網的單晶片系統
起碼也得需要有無線通訊的功能
無論是Zingee還是藍芽4.0以上的規格
通常都還是用8051為架構的單晶片
Arduino只能使用它第二組的序列埠
來跟無線通訊端進行溝通
如果只是四五個I/O就搞定的事情
其實根本用不到Arduino


至於國外
也不是一味的採用樹莓派
有更多的是使用Arm架構的SOC開發板
原因是樹莓派的SOC是屬於MIPS架構的
而它在軟體支持度上
遠低於ARM的架構

但是即使是如此
Arduino仍然有它建功的機會
比如一些客製化需求的專案
我就有用過幾次
做成展示機給客戶看
專案接成了之後
才詳細評估以及開發採用哪種晶片
所以別以為它很Low End
很多時候
小兵也能立大功
即使有更多的專案
我會拿藍芽4.0/4.1開發板來兜
起碼在時效性上
半個月就能完成的事情
配合3D列印做機殼打樣
就不必花上兩三個月

樹莓派在台灣比較不太容易流行的另一個主因
是因為當你需要編譯自己寫的程式的時候
就會需要用到相關的cross compiler toolchain
如果是C/C++, Java 的程式基本上都不會有什麼困擾
如果是用其他程式語言寫的
那Cross Compiler Toolchain就需要靠自己Build
除此之外
一班做Embedded Linux最常見的幾個部份
比如Root file system的Image
說實在的
有太多太多不是屬於程式設計的工作都很繁雜以及瑣碎
對學校的學生來說
確實要花大筆的時間去學習跟了解才有可能
更何況學生還必需要自己灌Linux系統進去熟悉以及操作的時間起碼也要好幾個月
等到他們開始學會靠Buildroot去產生一套簡易版的Embedded Linux系統
恐怕都要下個學期去了
所以台灣玩Linux的人都還是自學的居絕對大多數
別看一堆補習班搞Embedded Linux相關的青輔會課程很多
那堆都只是三個月一期的課程
講難聽一點
如果完全沒有操作過Linux系統經驗的人去學的話
課程結束之後照樣沒有能力去實作
可別以為做嵌入式系統很簡單
它可不比Ubuntu可以用apt-get去安裝套件
也不比Redhat可以用rpm去安裝套件
有一堆事要自己慢慢去刻
即使是開源的原始程式碼
光讓你去下configure裏的參數就夠你頭疼的了



...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>
頁: [1]