RCサーボの利用
PICSYS18では、4個までのRCサーボを任意のI/Oピンに接続し、制御することができます。
RCサーボの制御は、基本的に2つの操作で行います。例えばRB0ポートにRCサーボを接続した場合、以下の2つの操作を行います。
RCサーボの制御に必要な継続的なPWMパルスの出力処理は、PICSYS18が自動的に行います。
exservo1.c: 1個のRCサーボの制御
#include "picsys18.h"
void setup()
{
pinMode(CN2, OUT_SERVO1) ; // RCサーボ制御出力の割り付け
pinMode(SW1, INPUT) ;
pinMode(SW2, INPUT) ;
}
int pos = 0 ;
void loop()
{
delayMilliseconds(20) ;
if (digitalRead(SW1) == LOW)
pos += 1 ;
if (digitalRead(SW2) == LOW)
pos -= 1 ;
/* 値は-100(%)から100(%) */
if (pos > 100)
pos = 100 ;
if (pos < -100)
pos = -100 ;
digitalWrite(CN2, pos) ; // サーボの回転制御値の設定
}
CN2はPIC-DML-2520のRCサーボ用のコネクタで、具体的にはpic-dml-2520.hで、#defineによりRA(3)と定義されています。
exservo2.c: 2個のRCサーボの同時制御
#include "picsys18.h"
void setup()
{
pinMode(CN2, OUT_SERVO1) ; // RCサーボ制御出力の割り付け
pinMode(CN3, OUT_SERVO2) ; // RCサーボ制御出力の割り付け
pinMode(SW1, INPUT) ;
pinMode(SW2, INPUT) ;
pinMode(SW3, INPUT) ;
pinMode(SW4, INPUT) ;
}
int pos1 = 0 ;
int pos2 = 0 ;
void loop()
{
delayMicroseconds(20) ;
if (digitalRead(SW1) == LOW)
pos1 += 1 ;
if (digitalRead(SW2) == LOW)
pos1 -= 1 ;
if (digitalRead(SW3) == LOW)
pos2 += 1 ;
if (digitalRead(SW4) == LOW)
pos2 -= 1 ;
/* 値は-100(%)から100(%) */
if (pos1 > 100)
pos1 = 100 ;
if (pos1 < -100)
pos1 = -100 ;
if (pos2 > 100)
pos2 = 100 ;
if (pos2 < -100)
pos2 = -100 ;
digitalWrite(CN2, pos1) ; // サーボの回転制御値の設定
digitalWrite(CN3, pos2) ; // サーボの回転制御値の設定
}
PICSYS18では必要に応じて4個までのRCサーボの制御が可能です。
ただし、PIC-DML-2520に装備されているRCサーボ用のコネクタは3個なので、基板の加工をしない場合には3個が上限となります。