Arduinoとmbedどちらを使う?(デメリット編)
はじめに
前回のArduinoとmbedどちらを使う?(メリット編)を見ていただいただろうか?
前回は明らかにArduinoが優勢な感じで終わったが続けてデメリット面も考えてみる。
双方のデメリット
Arduino
ピン数が足りない
ロボコンをやっている方ならわかると思うが、ロボコンでは多くの機器を使用するためArduino UnoやArduino Megaひとつではピン数が足りなくなり、複数のマイコンを使うことが多いだろう。
複数のマイコンを使用するときは、マイコン間で通信を行うことが必要であるため、それらの通信が安定していないと大変な事(暴走、発火など...)になることがある。
コードが冗長になってしまう
前回、mbedの項目にあった割り込み処理がArduinoにはない。
(一応再現することはできるがbusy waitといわれる、ループを回し続ける方法で正直おすすめしない)
また、setup関数やloop関数が固定で設定されているため自由度がmbedに対しすこし低い。(その分書きやすい)
Arduino言語
Arduino言語といわれる言語で書かなければならないが、c++のようにポインタがあるわけではないのでc++と同じと考えると書きにくく感じる。(自分だけかも...)
mbed
敷居が高い
c++で書かなければいけないので難しく感じる人が多い。(自分はmbedから始めたためそう思わなかったが、Arduinoを書き始めたときに明らかに簡単に感じた)
また、割り込み処理を書くためには関数ポインタを使う上に、競技プログラミングなどではほとんど書かな処理のため、初見だと難しく感じる。
コード比較
mbedでLチカを書いてみよう。
#include "mbed.h"
DigitalOut LED(LED1);
int main()
{
while (true) {
LED = 1;
wait(1);
LED = 0;
wait(1);
}
}
明らかにc++
ある程度プログラミング経験がある人は気づいたと思うが、DigitalOutはクラス...
オブジェクト指向が使われているので敷居は高い。
それに対し、Arduino言語を思い出すと
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH);
delay(1000);
digitalWrite(LED_BUILTIN, LOW);
delay(1000);
}
setup関数やloop関数のように明示されていないのでmbedのコードは初見だと難しく感じるかも...
library
mbedにlibraryはほとんどない。というのもmbedとネットで調べてもArduinoと比べてほとんど記事が見つからない...
何なら見つかった記事とはmbed osのバージョンが違うためコードがそのまま使えないなんてこともある。(そのため、自分で書かなければならないことが多い。)
おわり
慣れればmbedが便利と感じるが、書きやすさや利便性は断然Arduino。
しかし、mbedは低レイヤーでの制御を行うことができるので厳密な制御や精度が必要な場合はmbedが適している。
できれば、両方のいいとこ取りをしたいがそれも難しい。
次回、いいとこ取りの仕方について考えていきたい。
Discussion