赤外線通信のプログラム
レゴロボットは、赤外線通信によりレゴロボット間で通信を行うことができます。
送信側が送ったデータを、受信側のディスプレイに表示するプログラムを示します。
1: import josx.platform.rcx.*; 2: 3: /**
4: * DataSend.java
5: *
6: * 1文字送信
7: *
8: */ 9: 10: public class DataSend { 11: public static void main(String[] args) { 12: 13: //送信データの配列宣言 14: byte[] packetData = new byte[2]; ←(1) 15: 16: //1byte目は(byte)0xf7を設定 17: packetData[0] = (byte)0xf7; ←(2) 18: //2byte目に送りたいデータを設定 19: packetData[1] = 1; ←(3) 20: 21: //パケット送信 22: Serial.sendPacket(packetData, 0, 2); ←(4) 23: //パケットが送られるまで待つ 24: try { ←(5) 25: Serial.waitTillSent(); 26: } catch(InterruptedException e) { 27: } 28: 29: } 30: }
- 14行目:
- 17行目:
- 19行目:
- 22行目:
- 24~27行目:
Serial
は赤外線通信のクラスです。sendPacket()
でデータを送信します。waitTillSent()
でデータが送られるまで待ちます。このメソッドは、InterruputedException
の例外がスローされる可能性があるので、try~catch文を記述します。1: import josx.platform.rcx.*; 2: 3: /**
4: * DataRecv.java
5: *
6: * 1文字受信
7: *
8: */ 9: 10: public class DataRecv { 11: public static void main(String[] args) { 12: 13: //受信データの配列宣言 14: byte[] packetData = new byte[2]; ←(6) 15: 16: while(true){ ←(7) 17: //パケットが有効かチェック 18: if(Serial.isPacketAvailable()){ ←(8) 19: //パケットの読み込み 20: Serial.readPacket(packetData); ←(9) 21: 22: //受信データの表示 23: LCD.showNumber(packetData[1]); ←(10) 24: //500ミリ秒スリープ 25: try { ←(11) 26: Thread.sleep(500); 27: } catch(InterruptedException e) { 28: } 29: break; ←(12) 30: } 31: } 32: 33: } 34: }
- 14行目:
- 16~31行目:
- 18行目:
- 20行目:
- 23行目:
- 25~28行目:
- 29行目:
isPacketAvailable()
でパケットをチェックします。readPacket()
でパケットを読み込みます。LCD
クラスのshowNumber()
を使用します。今回はループによりパケットの受信を待ちましたが、ボタン処理のようにリスナーを登録する方法もあります。
最後に
Javaを使った組込みソフト開発体験は、いかがだったでしょうか。最後に、組込みソフト開発の特性についてまとめておきます。
- ハードの性能が低くメモリが少ない。高度なリアルタイム性や堅牢性が求められる。
- 組込み機器に搭載されているハードウェアやOSがさまざま
- ソフトウェアの更新/変更が困難
現在、組込みエンジニアは約10万人不足していると言われています。そして需要の増加や納期の短縮化に伴い、オブジェクト指向を取り入れる現場も増え始めています。本稿を読んで「組込みソフト開発って面白そう!」と感じた方は、ぜひ奮ってチャレンジしてみてください。