Mechマイコンボードと移動ロボットのためのJAVA CLASS
西脇 光一
1 はじめに
KVMは、SunのJ2ME CLDCのリファレンス実装であり、JAVAのプログラムを書く上で
利用可能なクラス群は、通常のJAVA(J2SE)のサブセットとなっている。
どのクラスが利用可能であるかは、kvmをインストールしたディレクトリから
j2me_cldc/docs/CLDCAPI.pdf
j2me_cldc/docs/CLDCAPIhtml.zip
を参照することにより確認できる。
また、KVMは、C言語でかかれた関数をJAVAのメソッドとして呼び出す仕組みを持つ。
例えば、Myclasses.Test1クラスのmethod1メソッドをC言語で実装したいとすれば、
package Myclasses;
public class Test1 {
public static native void method1();
}
とし、
void Java_Myclasses_Test1_method1(void);
で宣言される関数を定義し、予めKVMにリンクしておけばよい。
引数のある場合の受け渡し、非staticメソッドの実装法等、詳しいことは、
j2me_cldc/docs/KVM_porting.pdf の Native Code の節に載っている。
本演習では、Mechマイコンボードと移動ロボットの各機能を利用するための
JAVAのクラスをこの仕組みを利用して用意してある。
以下の節で、各Class の使用法を説明する。
これらのソースは、JAVAで記述された部分は、
utmech/api/src/utmech/mechanompu以下に、
C言語で記述された部分は、utmech/kvm/src/native_functions.cにある。
2 timerクラス
utmech.mechanompu.timerクラスは、唯一のメソッドとして、
public static native long gettime();
を持つ。このメソッドは、static methodであり、java起動時からの経過時刻を
ミリ秒を単位として返す。
例
経過時刻をLCDに表示 (Mechマイコンボード上のKVMでは、標準
出力はLCDに割り当てられている。)
import utmech.mechanompu.*;
public class TimeTest {
public static void main(String arg[]) {
System.out.print(timer.gettime());
}
}
3 bumperクラス
utmech.mechanompu.sensor.bumperクラスは、バンパーの状態を返す2つのスタティック
メソッド
public static boolean l();
public static boolean r():
を持つ。
それぞれのメソッドは、左あるいは右のバンパスイッチが押されていれば、
trueをそうでなければ、falseを返す。
4 psdクラス
utmech.mechanompu.sensor.psdクラスは、PSD(赤外距離センサー)の出力を
返す2つのスタティック
メソッド
public static boolean readl();
public static boolean readr():
を持つ。
それぞれのメソッドは、左あるいは右のpsdの出力をADコンバータで
読みとった値を返す。
5 ledクラス
utmech.mechanompu.io.ledクラスは、Mechマイコンボード上に
4つ並んだLEDの点灯を制御する。4灯は、int型の下位4bitに割り当てられ、
次のメソッドにより操作できる。
public static void on(int val); |
1のbitに対応するLEDを点灯 |
public static void off(int val); |
1のbitに対応するLEDを消灯 |
public static void set(int val); |
bitパターン通りに点灯 |
public static void clear(); |
全消灯 |
public static void reverse(); |
反転 |
public static int get(); |
点灯状態を取得 |
6 serialクラス
utmech.mechanompu.io.serialクラスは、Mechマイコンボード上のシリアル
インタフェースによる入出力の機能を提供する。
同クラスの変数
public final static SerialInputStream in;
public final static SerialOutputStream out;
は、それぞれ、InputStream, OutputStreamの派生クラス型として実装されて
いるので、InputStream, OutputStreamとして扱うことができる。
例えば、
PrintStream pw = new PrintStream(serial.out);
pw.println(true);
pw.println('A');
pw.println(1000);
のように、PrintStreamクラスのインスタンスを作れば、println等のメソッドを使って、簡単に様々な型のデータを出力できる。
7 keyクラス
utmech.mechanompu.io.keyクラスは、Mechマイコンボードのキー入力
に関する機能を提供する。
メソッドとして
public static int scan(); |
キー読みとり(入力を待たない) |
public static int read(); |
キー読みとり(入力を待つ) |
public static read_dec(); |
10進数入力 ADRSETで符号反転、DATASETで入力確定 |
public static read_hex(); |
16進数入力 ADRSETで符号反転、DATASETで入力確定 |
が準備されている。また、0からFまで以外のキーコードは、同クラス中に
定数として準備されている。
public static final int run=0x10;
public static final int f1=0x11;
public static final int dataset=0x12;
public static final int f2=0x13;
public static final int adrdec=0x14;
public static final int f3=0x15;
public static final int adrset=0x16;
public static final int f4=0x16;
public static final int nokey=-1;
8 wheelsクラス
utmech.mechanompu.actuator.wheelsクラスは、移動ロボットの車輪の制御に
関する機能を提供する。エンコーダ値の直接読みとり、PWM指令の直接指定、
速度制御モードにおける目標速度指定を行うことができる。
public static void setpwml(int val); |
左車輪モータPWM指令設定 |
public static void setpwmr(int val); |
右車輪モータPWM指令設定 |
public static long getencl(); |
左車輪のエンコーダ値取得 |
public static long getencr(); |
右車輪のエンコーダ値取得 |
public static void resetencl(); |
左車輪のエンコーダ値リセット |
public static void resetencr(); |
右車輪のエンコーダ値リセット |
public static void set_servo_mode(boolean b) |
速度制御のon/off |
public static void set_goal_lvel(int val) |
左車輪の目標速度設定 (rpm) |
public static void set_goal_rvel(int val) |
右車輪の目標速度設定 (rpm) |
public static int get_lvel() |
左車輪の速度取得 (rpm) |
public static int get_rvel() |
右車輪の速度取得 (rpm) |
public static int gain=1; |
速度制御サーボゲイン |
public static final int cpr = 184; |
1回転あたりのエンコーダカウント数 |
public static final int max_pwm = 500; |
PWM指令の最大値 |
9 adクラス
utmech.mechanompu.sensor.adクラスは、QADCのAD読みとり値を取得するメソッド
public static int read(int ch);
を提供する。
10 memoryクラス
utmech.mechanompu.memoryクラスは、メモリへの直接入出力を実現する次のメソッドを
提供する。
public static byte peek(int addr); |
1byte 読み込み |
public static void poke(int addr, byte data); |
1byte 書き込み |
public static short peekw(int addr ); |
2byte 読み込み |
public static void pokew(int addr, short data); |
2byte 書き込み |
This document was translated from LATEX by
HEVEA.