実際の処理を見る前に、初期化処理の内容を確認してみます。
リモコンの初期化処理(remoconRobo_init)
「quadCrawlerRemocon.cpp」に記載されています。
void remoconRobo_init(void)
{
  pinMode(PORT_LED, OUTPUT);
  TCCR0A=0x03; TCCR0B=0x03; // timer0:8bit高速PWM, 1/64(977Hz), PWM6,5/timer
  pinMode(PORT_IR_RX,INPUT);
  attachInterrupt(0, irq_int0, CHANGE);
  state = STATE_H_IDLE;
  memset(&remoconData1, 0, sizeof(remoconData1));
}
使用しているArduinoのピンを確認してみます。
pinModeで指定されているのが2種類です。
PORT_IR_RXは割り込み受付用のピンとなっています。
PORT_LEDは出力ピンとなっています。LED表示でしょうか。
| PORT_IR_RX | INPUT | 2 | 
| PORT_LED | OUTPUT | 13 | 
| 割り込み | —- | 2 | 
割り込み発生時は「irq_int0」が実行されます。
この関数内では「state変数」の値を変更しています。
state変数が何に使用されているかは後で見ていくことにして、とりあえず「state変数が動作に関連している可能性がある」くらいの認識で大丈夫です。
memsetでメモリを確保しています。
ジョイスティックを使用しなければ、x,y,keysの3つが使用対象になりそうです。
struct remoconData {
  int16_t x;
  int16_t y;
  uint8_t keys;
  uint8_t xyKeys; // joystick direction
  uint8_t xyLevel; // joystick level
};
クアッドクローラーの初期化処理(quadCrawler_init)
void quadCrawler_init(void)
{
  pinMode( Moter_EN, OUTPUT );
  digitalWrite( Moter_EN, HIGH);
  pinMode( Echo, INPUT );
  pinMode( Trig, OUTPUT );
  pinMode( Bz, OUTPUT );
  pinMode( Sw1, INPUT_PULLUP );
  pinMode( Sw2, INPUT_PULLUP );
  pinMode( Sw3, INPUT_PULLUP );
  pinMode( Sw4, INPUT_PULLUP );
  strip.begin();
  strip.show(); // Initialize all pixels to 'off'
  pwm.begin();
  pwm.setPWMFreq(50); // Analog servos run at ~50 Hz updates
  yield();
  digitalWrite( Moter_EN, LOW);
  sv_init();
}
こちらでも使用しているピンから確認していきます。
INPUT_PULLUPはプルアップでのINPUTモードになります。
通常は入力が無い場合は「0」となるところを、内部的にプルアップするので入力が無い状態を「1」にする設定です。
A3の「Motor_EN」は「HIGH」に設定されています。
| Moter_EN | OUTPUT | A3 | 
| Echo | INPUT | A0 | 
| Trig | OUTPUT | A1 | 
| Bz | OUTPUT | 8 | 
| Sw1 | INPUT_PULLUP | 3 | 
| Sw2 | INPUT_PULLUP | 4 | 
| Sw3 | INPUT_PULLUP | 5 | 
| Sw4 | INPUT_PULLUP | 6 | 
| Neopix | —— | A2 | 
「strip」はモーター制御のための初期化処理となります。
ソースコードを見るとA2がモーター制御用として割り当てられています。
define Neopix A2 Adafruit_NeoPixel strip = Adafruit_NeoPixel(8, Neopix, NEO_GRB + NEO_KHZ800);
pwdもモーター制御用ですね。
yieldは他タスクに処理を渡すための関数となります。 個人的には必要性が良く分かっていないです。 Arduino Nanoでは必要となる処理なのかな?
最後の「sv_init」ですが、サーボモーターの位置情報初期化処理のように見えます。
まとめ
組み込み系の場合は、各ピンがどのような役割を担っているかを理解することが重要と考えています。
他のセンサーやモーターなど外部デバイスへの接続状況も理解することが必要です。
  
  
  
  

コメント