目次

Arduino用ピン処理(AWK)

 Arduinoは、ATmega168を利用していたので
 入出力設定およびGPIOの扱いは、レジスタ
 を操作していました。

DDRC = 0x00 ;
tmp = PINC ;
tmp ^= 7 ;

 IntelのGalileoを、Arduinoとして使う状況に
 なったので、レジスタ操作では対応できずに
 次の関数を利用することになりました。

pinMode
digitalWrite
digitalRead
analogWrite
analogRead

 これらの関数を利用して、入出力方向指定と
 デジタル入出力値、アナログ入出力を処理を
 スクリプトで簡単に済ませられます。

 入出力方向指定は、テキストファイルに次の
 フォーマットで、ピン番号と入出力を0、1
 で保存して使います。

12 0
13 1

 pinModeを扱うAWKスクリプトは、以下。

{
  printf("pinMode(%d,",$1)
  if ( $2 == 1 ) {
    printf("OUTPUT")
  } else {
    printf("INPUT")
  }
  printf(");\n")
}

 次のように使います。



 Arduinoは、0から19までのピンがあるので
 次のようにテキストファイルにピン番号と
 入出力方向の指定を格納して、一度に指定
 することも可能。

0 0
1 1
2 1
3 1
4 1
5 1
6 1
7 1
8 1
9 1
10 0
11 0
12 0
13 1
14 0
15 0
16 0
17 0
18 0
19 0

 一度に入出力方向を設定し、使わない設定は
 コメントにすることも可能。
 そのときは、次のように、コメントにするため
 //を追加して対応します。

{
  printf("// ")
  printf("pinMode(%d,",$1)
  if ( $2 == 1 ) {
    printf("OUTPUT")
  } else {
    printf("INPUT")
  }
  printf(");\n")
}

 次のようになります。



 使いやすいように、I/Oリダイレクトで
 テキストファイルに結果を保存しておき
 ましょう。

 digitalWrite、analogWriteは、pinModeの
 扱いと似ています。

 digitalWriteでは、次のように定義。

{
  printf("digitalWrite(%d,",$1)
  if ( $2 == 1 ) {
    printf("HIGH")
  } else {
    printf("LOW")
  }
  printf(");\n")
}

 digitalWriteでは、ピン番号、論理値の順で
 指定します。論理値は、0、1でHIGH、LOW
 に対応させています。

 使い方は、以下。



 analogWriteでは、ピン番号、値の順で指定
 すると考えれば、次の定義になります。

{
  printf("analogWrite(%d,%d);\n",$1,$2)

}

 digitalRead、analogReadは、ピン番号の指定
 だけで対応できます。

 digitalReadのスクリプトは、以下。

{
  printf(" = digitalRead(%d);\n",$1)

}

 代入が必要になるので、等号を入れます。

 analogReadも、次のように定義するだけ。

{
  printf(" = analogRead(%d);\n",$1)

}

 analogReadでの使い方は、以下。



 これらのスクリプトを使うことで、時間の
 短縮、つまらないタイプミスをしないよう
 にできます。


目次

inserted by FC2 system