栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java / Arduino-从串行端口读取数据

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java / Arduino-从串行端口读取数据

您不想专门编写示例代码中已经存在的读取函数,如TheMerovingian指出的,您可以在读取之前检查输入Buffer,这是我在一个项目中使用的工作代码。

import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.OutputStream;import gnu.io.CommPortIdentifier; import gnu.io.SerialPort;import gnu.io.SerialPortEvent; import gnu.io.SerialPortEventListener; import java.util.Enumeration;public class SerialTest implements SerialPortEventListener {SerialPort serialPort;    private static final String PORT_NAMES[] = {       "/dev/tty.usbserial-A9007UX1", // Mac OS X        "/dev/ttyUSB0", // Linux        "COM35", // Windows};private BufferedReader input;private OutputStream output;private static final int TIME_OUT = 2000;private static final int DATA_RATE = 9600;public void initialize() {    CommPortIdentifier portId = null;    Enumeration portEnum = CommPortIdentifier.getPortIdentifiers();    //First, Find an instance of serial port as set in PORT_NAMES.    while (portEnum.hasMoreElements()) {        CommPortIdentifier currPortId = (CommPortIdentifier) portEnum.nextElement();        for (String portName : PORT_NAMES) { if (currPortId.getName().equals(portName)) {     portId = currPortId;     break; }        }    }    if (portId == null) {        System.out.println("Could not find COM port.");        return;    }    try {        serialPort = (SerialPort) portId.open(this.getClass().getName(),     TIME_OUT);        serialPort.setSerialPortParams(DATA_RATE,     SerialPort.DATABITS_8,     SerialPort.STOPBITS_1,     SerialPort.PARITY_NONE);        // open the streams        input = new BufferedReader(new InputStreamReader(serialPort.getInputStream()));        output = serialPort.getOutputStream();        serialPort.addEventListener(this);        serialPort.notifyonDataAvailable(true);    } catch (Exception e) {        System.err.println(e.toString());    }}public synchronized void close() {    if (serialPort != null) {        serialPort.removeEventListener();        serialPort.close();    }}public synchronized void serialEvent(SerialPortEvent oEvent) {    if (oEvent.getEventType() == SerialPortEvent.DATA_AVAILABLE) {        try { String inputLine=null; if (input.ready()) {     inputLine = input.readLine();      System.out.println(inputLine); }        } catch (Exception e) { System.err.println(e.toString());        }    }    // Ignore all the other eventTypes, but you should consider the other ones.}public static void main(String[] args) throws Exception {    SerialTest main = new SerialTest();    main.initialize();    Thread t=new Thread() {        public void run() { //the following line will keep this app alive for 1000    seconds, //waiting for events to occur and responding to them    (printing incoming messages to console). try {Thread.sleep(1000000);} catch (InterruptedException    ie) {}        }    };    t.start();    System.out.println("Started");}}

编辑:serialEvent函数负责读取缓冲区。

public synchronized void serialEvent(SerialPortEvent oEvent) { if (oEvent.getEventType() == SerialPortEvent.DATA_AVAILABLE) {    try {        String inputLine=null;        if (input.ready()) { inputLine = input.readLine(); System.out.println(inputLine);        }    } catch (Exception e) {        System.err.println(e.toString());    } }// Ignore all the other eventTypes, but you should consider the other ones.}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/391265.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号