2012年6月4日月曜日

パソコン側のプログラム作成:受信

パソコンにシリアル通信で文字を送るプログラムの作成

アプリのBlutooyhSPPを起動させて、Command Line を選択して、文字を送る。


おはよう、と入力して送信

うまく送られているようだ。

import java.io.*;
import java.util.TooManyListenersException;

import gnu.io.*;

public class SerialTestClass {

 public static void main(String arg[]) {

  try {

   // 使用するCOMポートを取得
   CommPortIdentifier comID = CommPortIdentifier.getPortIdentifier("COM3");

   // COMポートを開きます
   CommPort commPort = comID.open("SerialTest", 2000);

   if (commPort instanceof SerialPort ) {
    
   }
   // シリアルポートのインスタンスを生成…
   SerialPort port = (SerialPort) commPort;

   // シリアルポートの設定
   // ボーレート、データビット数、ストップビット数、パリティを設定
   port.setSerialPortParams(9600, SerialPort.DATABITS_8,SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);

   // フロー制御はしない
   port.setFlowControlMode(SerialPort.FLOWCONTROL_NONE);

   // ストリームを生成して、1文字ずつ送信していきます
   //OutputStream out = port.getOutputStream();
   InputStream in = port.getInputStream();
   
   try {
    //port.addEventListener(new SerialReader(in));
    //port.notifyOnDataAvailable(true);
    
    // イベントリスナー登録
    port.addEventListener( new SerialReader(in) );
    port.notifyOnDataAvailable(true);
    
   } catch (TooManyListenersException e) {
    // TODO 自動生成された catch ブロック
    e.printStackTrace();
   }
   
            
   // ストリームとCOMポートを閉じる処理
   //閉じたら待受状態にならないで終了する
   //in.close();
   //port.close();

  } catch (NoSuchPortException e) {
   // TODO 自動生成された catch ブロック
   e.printStackTrace();
  } catch (PortInUseException e) {
   // TODO 自動生成された catch ブロック
   e.printStackTrace();
  } catch (UnsupportedCommOperationException e) {
   // TODO 自動生成された catch ブロック
   e.printStackTrace();
  } catch (IOException e) {
   // TODO 自動生成された catch ブロック
   e.printStackTrace();
  }
 }
 
 public static class SerialReader implements SerialPortEventListener {

  private InputStream in;
  private byte[] buffer = new byte[1024];

  public SerialReader(InputStream in) {
   // TODO 自動生成されたコンストラクター・スタブ
   this.in = in;
  }

  @Override
  public void serialEvent(SerialPortEvent arg0) {
   int data;

   try {
    int len = 0;
    while ((data = in.read()) > -1) {
     if (data == '\n') {
      break;
     }
     buffer[len++] = (byte) data;
    }
    System.out.print(new String(buffer, 0, len));
   } catch (IOException e) {
    e.printStackTrace();
    System.exit(-1);
   }
  }
 }
}

関連記事

0 件のコメント:

コメントを投稿