クアッド・クローラーのサンプルプログラムを読む

組み込み
スポンサーリンク

まずは、サンプルプログラムをざっと読んで動作を理解していきます。
プログラムの読み方は人それぞれですが、私は全体の処理内容を把握してから細かい処理内容を見ていくようにしています。

setup処理

Arduinoの処理は「setup」と「loop」という2つのブロックに分かれています。
「setup」はArduinoが起動した直後に「1回だけ」実行される処理を書きます。
大抵の場合は初期化処理を記載します。

「loop」はsetupが完了してから繰り返し実行する処理を記載します。
Arduinoはloopをグルグル繰り返すことで処理を行っています。
Arduinoでプログラムを行う場合は「loopでグルグル回す」ということを意識することが大切になります。

setupでは6行だけ記載されています。

remoconRobo_init();
quadCrawler_init();
quadCrawler_colorWipe(COLOR_PURPLE);
quadCrawler_beep(100);
Serial.begin(115200);
Serial.println("Normal: " mVersion);

remoconRobo_init、quadCrawler_initではArduino Nanoのピンモード設定や各ライブラリの初期化処理を行っています。。

quadCrawler_colorWipeはLEDの点灯制御関数になります。
引数によりLEDの色を変更します。
この例では「紫」ですね。

quadCrawler_beepはブザー(ビープ音)を鳴らします。
静かに動かしたいという場合はこの関数を削除していくことになります。

Serial.beginはArduinoIDEとのシリアル通信を行う際の転送レート(速度)になります。
ArduinoとはUSBで接続しますが、デバック表示などを使用する場合は「シリアル通信」で行っています。
この場合は115200bpsで通信を行うので、ArduinoIDE側でも同じ速度で通信するように設定します。
Serial.begin(speed)

loop処理

loopは実際の動作が記載されています。

まず、最初の処理ブロックです。
switch/caseの値を見ると、アナログコントローラーからの入力処理の模様です。
今回はアナログコントローラーは使用しないので、今のところは意識しないようにします。

switch(rData.keys) {
  case BUTTON_A_XY:
    rData.keys = rData.xyKeys;
    break;
  case BUTTON_A_DOWN:
    rData.keys = rData.xyKeys + A_DOWN_OFFSET;
    break;
}

次の処理ブロックは付属リモコンからの入力を処理しています。
caseの値はリモコンのボタンになります
例えば、「BUTTON_POWER」は電源ボタンになります。

if(rData.keys != lastkey) {
   lastkey = rData.keys;
   switch(rData.keys) {
     case BUTTON_POWER:
     case BUTTON_C:
     case BUTTON_B:

実際のリモコンを見ながら「quadCrawlerRemocon.h」定義を見比べると分かりやすいと思います。
クアッドクローラー リモコン操作方法

enum {
 //NEC Code table
     BUTTON_POWER    = 0x45,
     BUTTON_B        = 0x46,
     BUTTON_MENU     = 0x47,
     BUTTON_TEST     = 0x44,
     BUTTON_RETURN   = 0x43,
     BUTTON_C        = 0x0D,

次の処理ブロックはサーボモーターの位置合わせ用です。
組み立てマニュアルの9ページ目にある「基板をサーボモータ調整モードにする」でSW4を押した際の処理になります。

uint8_t sw4 = digitalRead(Sw4);
   if(lastSw4!=sw4 && sw4==0) {
     if(!originAdj) {
       quadCrawler_colorWipe(COLOR_RED);

次のブロックではサーボモーターを動かしています。

quadCrawler_servoLoop();
 if(rData.xyLevel >= 10) {
   quadCrawler_setSpeed(25000 / rData.xyLevel);
 }

最後のブロックでは超音波センサーの値を取得しているようです。

double sonner_val;
sonner_val = quadCrawler_getSonner();
//Serial.println(sonner_val);
if (sonner_val < 8){
  quadCrawler_beep(sonner_val * 10);
  delay(sonner_val * 10);
}
else {
  delay(50);
}

全体の動き

プログラム処理としては3つのブロックで考えることができます。
・コントローラーからの命令受付
・ サーボモーターを動かす
・ その他処理

ここを理解したうえで、処理内容を見ていきます。

コメント

タイトルとURLをコピーしました