91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用Java讀取串口的程序(轉)

發布時間:2021-11-12 10:24:56 來源:億速云 閱讀:410 作者:小新 欄目:編程語言

小編給大家分享一下如何使用Java讀取串口的程序(轉),希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

這個簡單的程序包括以下文件:

IMU.java (主程序)
ReadBuffer.java (從緩沖區讀取一個消息)
ReadSerial.java (讀取串口數據并放入緩沖區)
SerialBuffer.java (緩沖區)
WriteSerial.java (不斷的往串口送星號′*′)

測試程序:

SendCom.java (將一個數據文件往串口發送)
SEND.TXT (供測試用的數據文件)

在這個通訊程序中使用了一個簡單的協議,既不同的消息之間用星號′*′作為分隔。這個程序中的問題是ReadSerial進程和WriteSerial進程不能夠同時啟動,出錯信息是不能夠打開串口,因為同樣一個串口不能夠同時被打開兩次(在ReadSerial中聲明了FileReader

測試程序:

SendCom.java (將一個數據文件往串口發送)
SEND.TXT (供測試用的數據文件)

在這個通訊程序中使用了一個簡單的協議,既不同的消息之間用星號′*′作為分隔。這個程序中的問題是ReadSerial進程和WriteSerial進程不能夠同時啟動,出錯信息是不能夠打開串口,因為同樣一個串口不能夠同時被打開兩次(在ReadSerial中聲明了FileReader和在WriteSerial中聲明了FileWriter)。這樣是不能夠實現全雙工通訊的。
------------------------------------------
import java.io.*;

class IMU
{
public static void main(String[] args)
{
//TO DO: Add your JAVA codes here

File ComPort = new File("COM1");

SerialBuffer SB = new SerialBuffer();
ReadSerial r1 = new ReadSerial(SB, ComPort);
ReadBuffer r2 = new ReadBuffer(SB);
WriteSerial r3 = new WriteSerial(ComPort);

r1.start();
r2.start();
r3.start();
}
}
---------------------------------------------
import java.io.*;

public class ReadBuffer extends Thread
{
private SerialBuffer ComBuffer;

public ReadBuffer(SerialBuffer SB)
{
ComBuffer = SB;
}

public void run()
{
String Msg;

while (true)
{
Msg = ComBuffer.GetMsg();
System.out.println(Msg);
}

}
}
-----------------------------------------------
import java.io.*;

public class ReadSerial extends Thread
{
private SerialBuffer ComBuffer;
private File ComPort;

public ReadSerial(SerialBuffer SB, File Port)
{
ComBuffer = SB;
ComPort = Port;
}

public void run()
{
int c;
try
{
FileReader in = new FileReader(ComPort);
while (true)
{
c = in.read();
ComBuffer.PutChar(c);
}
try
{
FileReader in = new FileReader(ComPort);
while (true)
{
c = in.read();

ComBuffer.PutChar(c);
}
} catch (IOException e) {}
}
}
------------------------------------------------
public class SerialBuffer
{
private String Content = "";
private String CurrentMsg, TempContent;
private boolean available = false;

public synchronized String GetMsg()
{
int SepMark;

if ((SepMark = Content.indexOf(′*′)) == -1)

{
available = false;
while (available == false)
{
try
{
wait();
} catch (InterruptedException e) { }
}
SepMark = Content.indexOf(′*′);
}

CurrentMsg = Content.substring(0, SepMark);
TempContent = Content.substring(SepMark+1);
Content = TempContent;
notifyAll();
return CurrentMsg;
}

public synchronized void PutChar(int c)
{
Character d = new Character((char) c);
Content = Content.concat(d.toString());
if (c == ′*′)
{
available = true;
}
notifyAll();
}
}
-------------------------------------------------
import java.io.*;

public class WriteSerial extends Thread
{
private SerialBuffer ComBuffer;
private File ComPort;

public WriteSerial(File Port)
{
ComPort = Port;
}

public void run()
{
int c;
try
{
FileWriter out = new FileWriter(ComPort);
while (true)
{
out.write(′*′);
}
} catch (IOException e)
{
System.out.println(e.getMessage());
}
}
}
-----------------------------------------------
import java.io.*;

public class SendCom
{
public static void main(String[] args)
{

File OutFile = new File("SEND.TXT");
File ComPort = new File("COM2");

int c;

try
{
FileReader in = new FileReader(OutFile);
FileWriter out = new FileWriter(ComPort);
while ((c = in.read()) != -1)
out.write(c);
in.close();
out.close();
} catch (IOException e) {}

}
}
----------------------------------------------
SEND.TXT*

This is a sample of the data file for program testing. *

It should be in the same directory as the SendCom.class file.*

When you run this sample program, connect your COM1 and COM2 with a
serial cable so that you can test this program on one machine. If
you have two machines, you can connect the two machine via a serial
cable and test it. Modified the definition of ComPort in the program
if necessary. *

看完了這篇文章,相信你對“如何使用Java讀取串口的程序(轉)”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

刚察县| 离岛区| 秭归县| 贵南县| 青铜峡市| 泽库县| 八宿县| 乐至县| 东山县| 榆社县| 冷水江市| 元氏县| 钟祥市| 兴化市| 天等县| 文安县| 遂川县| 师宗县| 科技| 肇州县| 江北区| 安宁市| 云南省| 甘孜县| 庆城县| 中宁县| 新和县| 墨脱县| 吴川市| 长兴县| 巴林左旗| 元氏县| 保定市| 南部县| 姜堰市| 河津市| 邛崃市| 桐城市| 罗平县| 全椒县| 习水县|