CodeZine(コードジン)

特集ページ一覧

Javaでレゴロボットを動かしてみよう! 3-応用編

マルチスレッドによるレゴロボットの制御

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加
2008/03/23 14:00

目次

赤外線通信のプログラム

 レゴロボットは、赤外線通信によりレゴロボット間で通信を行うことができます。

 送信側が送ったデータを、受信側のディスプレイに表示するプログラムを示します。

通信している図
通信している図
送信側のプログラム
 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: }
  1. 14行目
  2. 送信データの文字数+1の配列をバイト型で宣言します。
     
  3. 17行目
  4. 1バイト目は決まりごとで0xf7を設定します。
     
  5. 19行目
  6. 2バイト目に送信データ1を設定します。
     
  7. 22行目
  8. Serialは赤外線通信のクラスです。sendPacket()でデータを送信します。
     
  9. 24~27行目
  10. 25行目の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: }
  1. 14行目
  2. 受信データの文字数+1の配列をバイト型で宣言します。
     
  3. 16~31行目
  4. whileループで受信を待ちます。
     
  5. 18行目
  6. isPacketAvailable()でパケットをチェックします。
     
  7. 20行目
  8. readPacket()でパケットを読み込みます。
     
  9. 23行目
  10. 受信データを表示します。配列の1バイト目は0xf7なので、2バイト目を表示しますが、バイトデータの表示にはLCDクラスのshowNumber()を使用します。
     
  11. 25~28行目
  12. すぐにループを抜けると表示が確認できないので、500ミリ秒処理を待ちます。
     
  13. 29行目
  14. ループを抜けます。

 今回はループによりパケットの受信を待ちましたが、ボタン処理のようにリスナーを登録する方法もあります。

最後に

 Javaを使った組込みソフト開発体験は、いかがだったでしょうか。最後に、組込みソフト開発の特性についてまとめておきます。

  • ハードの性能が低くメモリが少ない。高度なリアルタイム性や堅牢性が求められる。
  • RCXの搭載メモリを見て驚かれた方もいるのではないでしょうか。組込み機器は、パソコンなどに比べてハードの性能が低いです。また、例えば携帯電話のキーを押してから何ミリ秒以内に反応しなければいけないというような、リアルタイム性が要求されます。
    組込みソフト開発では、限られたリソースの中で無駄のないプログラムを組んだり、厳しい要求に答えられるよう処理スピードを考慮したプログラムを組む必要があります。
     
  • 組込み機器に搭載されているハードウェアやOSがさまざま
  • 組込み機器は用途が限られているため、ハードウェアに専用の部品が搭載されることが多々あります。搭載されるリアルタイムOSの種類も多く、開発の内容によってはハードウェアやOSの仕様を調べる必要もあります。
     
  • ソフトウェアの更新/変更が困難
  • 携帯電話やカーナビなどネットワークに接続可能な組込み機器では、パソコンと同様にネットワーク経由でソフトウェアの更新が可能です。しかし、冷蔵庫やエアコンなどネットワークに接続できない組込み機器は、メーカーがソフトウェアや部品を交換する事で保守を行います。このようなことがないよう、厳しい品質評価をクリアして製品化されます。

 現在、組込みエンジニアは約10万人不足していると言われています。そして需要の増加や納期の短縮化に伴い、オブジェクト指向を取り入れる現場も増え始めています。本稿を読んで「組込みソフト開発って面白そう!」と感じた方は、ぜひ奮ってチャレンジしてみてください。

参考リンク



  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • ちば やちよ(チバ ヤチヨ)

    ソフト開発によるジプシー生活を経験後、エンジニア育成に力を注ぐ。組込みの世界にJavaが普及する事を切に願っている。ロッテ・大塚明選手の応援振り付けがまだ半人前の為、日々精進している。

バックナンバー

連載:Javaでレゴロボットを動かしてみよう!
All contents copyright © 2005-2020 Shoeisha Co., Ltd. All rights reserved. ver.1.5