目次
前
次
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での使い方は、以下。
これらのスクリプトを使うことで、時間の
短縮、つまらないタイプミスをしないよう
にできます。
目次
前
次