Flip&Click SAM3XはARM Cortex™-M3の高性能32ビットマイコン、AT91SAM3X8Eを搭載したArduino DUEとして認識させられるマイコンボードです。
Arduinoボードとしても優秀ですがボードには4つのmikroBUSが搭載されており各種クリックボードを装着していろいろな機能を拡張できます。Arduinoのシールドだけでは足りないと思われるパワーユーザーに最適な開発ツールです。
■Arduino IDEの準備
- Arduino IDEを起動します。
インストールしていない方は公式サイトのこちらからインストールします。(ここでは最新版のVer.2.xについて解説しています) - “ツール”→”ボード”→”ボードマネージャ”を開きます。
- 検索ボックスに”SAM”と入力して検索します。
- “Arduino SAM Borads (32-bits ARM Cortex-M3)”を選択し最新バージョンを選択して”インストール”ボタンを押してインストールしてください。
- インストールが完了したら”ツール”→”ボード”→”Arduino ARM(32-bits) board”をクリックしさらにその中にある”Arduino Due (Programming port)”をクリックして選択してください。
ウインドウ上部のプルダウン部に”Arduino Due (Programming port)”と表示されていることを確認してください。これでボードの選択はできました。
続いてボードとの通信設定を行います。
- ボードをパソコンと接続します。
ボードには2つのmicroUSBポートがあり間違って接続すると認識されません。1つはプログラミング用のポート、もう1つはプログラムの中で使用できるホスト・デバイスポートです。データをダウンロードするためにはプログラミング用のポートとパソコンを接続します。
プログラミング用のmicroUSBポートはACアダプタを接続するDCジャックの横にあります。ここのポートとパソコンを接続してください。 - 接続するとすると仮想COMポートが作られます。
仮想COMポートは接続された順番に番号がWindowsによって自動的に割り当てられます。何番になっているのかを確認しておきましょう。
Windowsのデバイスマネージャーを開いてツリーの中から”ポート(COMとLPT)”を展開します。その中に”Arduino Due Programming Port (COMx)”をあります。COMxの番号を控えておいてください。 - “ツール”→”ポート”をクリックして手順2で確認したポート番号を選択します。
■サンプルプログラム① ~LEDの点滅とタイマー割込~
それではプログラムを早速書いてみましょう。Flip&Click SAM3Xの白い基板側には4つの青色LEDが実装されています。これらはポート37~40に接続されています。ボードの回路図はこちらからごらん頂けます。
下図は各ピンとピン番号の配置です。Dueではマイコンのポート名がプログラム上でのデジタルIOの番号ではありませんので注意してください。
なおFlip&Click SAM3Xの白い基板側にある各mikroBUSのピンアサインとLEDのピンアサインを定義ファイルとしたヘッダファイルをご用意していますのでこちらからダウンロードしてご利用ください。
簡単なLEDを順番に点滅させるプログラムを書いてみます。100ミリ秒間隔でLED A~LED Dが順番に点滅します。
このプログラムではタイマー割込を使います。タイマー割込とはマイコンに内蔵されているタイマーを使って、指定した時間が経過した時に割込を発生させプログラムを別のルーチンに移動させる仕組みのことです。ここでは100ミリ秒間隔で割込を発生させて、割込ルーチン先で指定したGPIOのH-Lを切り替えてLEDを順番に点滅させます。
割込を使うにはいろいろな方法がありますが最も簡単な方法はあらかじめ準備されているライブラリを使うことです。ここではArduino Due用の”DueTimer”を使います。
- “ツール”→”ライブラリを管理”をクリックします。
- 検索ボックスに”DueTimer”と入力します。
- “DueTimer”をクリックして選択し最新バージョンをインストールします。
ではプログラムを書いてみましょう。
#include <DueTimer.h> byte leds[4] = { 38, 37, 39, 40 }; void rotation( void ); static byte myturn; void setup() { for ( int i = 0; i < 4; i++ ) { pinMode( leds[i], OUTPUT ); digitalWrite( leds[i], LOW ); } Timer3.attachInterrupt( rotation).start(100000); } void loop() { } void rotation() { for ( int i = 0; i < 4; i++ ) { digitalWrite( leds[i], LOW ); } digitalWrite( leds[myturn++], HIGH ); if (myturn>3) myturn = 0; }
では早速コンパイルして書き込んでみましょう。書き込みが終わるとプログラムがすぐに動作します。
ツールバー画面左上にある「→」のボタン(マイコンボードに書き込む)を押します。
ファイルを保存していない場合にはファイル保存のダイアログが表示されますので適当なディレクトリに保存してください。
コンパイルは少し時間がかかります。プログラムに誤りがなければ書き込みが開始されます。進捗状況が表示されます。100%になるまで待ってください。
問題なく書き込みができるとウインドウ下部の「出力」に”CPU reset”と表示されます。特に「書き込み成功」のような文字は表示されません。エラーがある場合にはオレンジ色の文字で表示されるので綴りミスがないかなど確認してください。
書き込みが無事に完了するとLEDが順番に点滅します。