我是Java的新手,并且正在尝试编写串行通信应用程序.
我使用的是Windows 7(32位)
D:\Glaswegian\Java\RXTX\Test>java -version
java version "1.7.0_13"
Java(TM) SE Runtime Environment (build 1.7.0_13-b20)
Java HotSpot(TM) Client VM (build 23.7-b01, mixed mode, sharing)
D:\Glaswegian\Java\RXTX\Test>
D:\Glaswegian\Java\RXTX\Test>javac -version
javac 1.7.0_07
D:\Glaswegian\Java\RXTX\Test>PATH
PATH=C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32
\WindowsPowerShell\v1.0\;C:\Program Files\Microsoft SQL Server\110\Tools\Binn\;C
:\Program Files\MATLAB\R2009a\bin;C:\Program Files\MATLAB\R2009a\bin\win32;C:\Pr
ogram Files\Java\jdk1.7.0_07\bin;C:\Program Files\Java\jre7\bin;C:\Program Files
\Java\jre7\lib\ext
D:\Glaswegian\Java\RXTX\Test>
Run Code Online (Sandbox Code Playgroud)
我下载了RxTx
http://henrypoon.wordpress.com/2010/12/25/installing-rxtx-for-serial-communication-with-java/ http://rxtx.qbang.org/wiki/index.php/Using_RXTX
如上面链接所述,解压缩rxtx-2.1-7-bins-r2.将rxtxSerial.dll复制到C:\ Program Files\Java\jre7\bin将RXTXcomm.jar复制到C:\ Program Files\Java\jre7\lib\ext
我只是想运行这段代码:
import gnu.io.*;
public class RxTxComm{
public static void main(String[] args)
{}
}
Run Code Online (Sandbox Code Playgroud)
我低于错误.
D:\Glaswegian\Java\RXTX\Test>dir
Volume in drive D has no label.
Volume Serial Number is C643-EE74
Directory of …Run Code Online (Sandbox Code Playgroud) 我有一个小问题.
我从arduino附加的3轴加速度计+ 3轴磁力计+罗盘标题传递信息.这些缩放到midi范围(0-127).
ARDUINO:这是通过串行打印传递的,格式为76a45b120c23d12e23f34g
Serial.print(shiftAx);
Serial.print("a");
Serial.print(shiftAy);
Serial.print("b");
Serial.print(shiftAz);
Serial.print("c");
Serial.print(shiftMx);
Serial.print("d");
Serial.print(shiftMy);
Serial.print("e");
Serial.print(shiftMz);
Serial.print("f");
Serial.print(shiftHead);
Serial.print("g");
Run Code Online (Sandbox Code Playgroud)
我可以看到这使用我的串行监视器.(但我不确定是否以"g"打印为println.)
处理2:
我缓冲到我的void设置中的g()
port = new Serial(this, "/dev/tty.usbmodem411", 9600);
port.bufferUntil('g');
Run Code Online (Sandbox Code Playgroud)
我有这个功能
void serialEvent (Serial port)
{
data = port.readStringUntil('g');
AxVal = data.substring(0, data.indexOf('a'));
AyVal = data.substring(data.indexOf("a") + 1, data.indexOf("b"));
AzVal = data.substring(data.indexOf("b") + 1, data.indexOf("c"));
MxVal = data.substring(data.indexOf("c") + 1, data.indexOf("d"));
MyVal = data.substring(data.indexOf("d") + 1, data.indexOf("e"));
MzVal = data.substring(data.indexOf("e") + 1, data.indexOf("f"));
HeadVal = data.substring(data.indexOf("f") + 1, data.indexOf("g"));
}
Run Code Online (Sandbox Code Playgroud)
问题所以这不起作用.没有显示文字.(它只是一个简单的fill(),text())
我不明白为什么.问题是我的协议(如果我可以称之为),我是如何解压缩字符串的?或者其他一些问题. …
processing serial-port communication arduino serial-communication
我必须编写一个java程序,通过网络接收G-Code命令,并通过串行通信将它们发送到3D打印机.原则上一切似乎都没问题,只要打印机需要超过300毫秒来执行命令.如果执行时间短于此时间,则打印机接收下一个命令需要花费太多时间,并且导致命令执行之间的延迟(打印机喷嘴静止约100-200ms).这可能会成为3d打印中的问题所以我必须消除这种延迟.
为了比较:像Repetier Host或Cura这样的软件可以通过seial发送相同的命令,命令执行之间没有任何延迟,所以它必须以某种方式.
我使用jSerialComm库进行串行通信.
这是将命令发送到打印机的线程:
@Override
public void run() {
if(printer == null) return;
log("Printer Thread started!");
//wait just in case
Main.sleep(3000);
long last = 0;
while(true) {
String cmd = printer.cmdQueue.poll();
if (cmd != null && !cmd.equals("") && !cmd.equals("\n")) {
log(cmd+" last: "+(System.currentTimeMillis()-last)+"ms");
last = System.currentTimeMillis();
send(cmd + "\n", 0);
}
}
}
private void send(String cmd, int timeout) {
printer.serialWrite(cmd);
waitForBuffer(timeout);
}
private void waitForBuffer(int timeout) {
if(!blockForOK(timeout))
log("OK Timeout ("+timeout+"ms)");
}
public boolean blockForOK(int timeoutMillis) …Run Code Online (Sandbox Code Playgroud) 背景:我曾尝试在 stackoverflow、android 开发人员和网络上的各种其他资源方面寻求帮助。这是我最后的希望。我是通信新手,从 USB 的实现开始。以下是我的问题:
1) 当我将手机连接到 Windows PC 时,哪一个是主机?假设我想创建一个可以发送数据的应用程序,我是在做我的手机主机吗?
2) 对于这种情况(Windows PC 和 Android 手机),另一个是外围设备还是设备?他们一样吗?
3)从android开发者网站和关于USB的Windows论坛,我了解到需要遵循某些步骤,就像 - 创建USBManager的实例。- 创建获取设备列表 - 选择要从中建立连接的设备 - 创建接口 - 从该接口获取端点。- 创建 DeviceConnections 实例并调用 bulkTransfer 方法并发送数据。
但是当我尝试上述步骤时,我得到 device == null。我什至不知道我对上述通信方式的理解是否正确。
有人可以帮助我理解并建立 PC 和 android 手机之间的基本通信,并至少发送“hello world”。
非常感谢您阅读这么长的问题。
这是我所做的代码示例。这里 devicelist 返回 null。
public class MainActivity extends AppCompatActivity {
android.widget.Button usbButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final CustomUSBManager cmanager = new CustomUSBManager();
//1) //Create instance of USB Manager using getSystemService
final UsbManager manager = …Run Code Online (Sandbox Code Playgroud) 我正在寻找一些关于巫婆文件传输协议的输入,以便在串行线路上使用.我希望能够在两个方向上通过串行线路(RS232)传输最大200 Mb大小的文件,但只有一台机器需要能够启动get/put(想想主从).
该协议还需要:
克米特?TFTP?最简单的家酿?你怎么看?
我想学习并实现CAN BUS协议.我在软件中使用MSP430 Launchpad实现了UART,SPI,I2C和单线总线协议.现在我想了解CAN总线协议.我有mBed LPC 1768 Cortex M3开发板.mBed有Can Bus Library,但我想编写自己的库,以便我可以详细了解它,即我对其他通信协议的方式.
我无法找到合适的资源开始,这些材料似乎散布在网上.任何人都可以指导如何使用我提供的开发板编写和实现CAN总线协议.
谢谢
我在与加速度计传感器的通信方面遇到了一些问题。传感器连续输出约 8000 个读数/秒。传感器通过适配器插入 USB 端口并显示为 com4。我的问题是我似乎无法从字节流中挑选出传感器读取数据包。数据包大小为 5 个字节,格式如下:
High nibble Low nibble
Byte 1 checksum, id for packet start X high
Byte 2 X mid X low
Byte 3 Y high Y mid
Byte 4 Y low Z high
Byte 5 Y mid Y low
Run Code Online (Sandbox Code Playgroud)
X, y, z 是加速度。
在传感器的文档中,它指出第一个字节中的高半字节是校验和(计算的 Xhigh+Xlow+Yhigh+Ylow+Zhigh+Zlow),也是数据包开始的标识。我对针对外部设备进行编程还很陌生,无法真正掌握如何将校验和用作包开始的标识符(校验和不会一直更改吗?)。这是识别数据包开始的常用方法吗?有谁知道如何解决这个问题?
任何帮助将不胜感激。
I2S 规范提供了不同的操作模式。我试图寻找一种模式相对于另一种模式的优势,但找不到任何好的文献。任何人都可以提供或解释一种模式相对于另一种模式的优势吗?
当时我们正在尝试为串行通信创建一个接口,以便能够与微处理器进行通信。
实际上 - 一切正常。几乎!为了能够与我们的控制器通信,我们需要与它同步。为此,我们编写一个字符串:"?0{SY}13!",然后控制器应回复"!0{SY}F5?"以接受同步请求。为此,我们使用一个writeData函数(有效 - 我们知道使用echo),然后我们使用 areadData来阅读答案。问题是,由于某种原因,它不会读取任何内容。虽然它返回1成功,但它读取的字符是恒定的" "(没有)。
现在是奇怪的部分 - 如果我们使用外部终端程序来初始化端口(如 putty),然后关闭程序,那么一切正常。它接受同步请求、回答(我们可以阅读它),然后我们可以做我们想做的一切。但是除非我们使用外部程序来初始化端口,否则它不起作用。
初始化接口的构造函数如下所示:
SerialIF::SerialIF(int baud, int byteSize, int stopBits, char* parity, int debug)
{
string coutport = getPort();
wstring wideport;
debug_ = debug; //Debuglevel
sync = false; //sync starts with false
error = false; //Error false as beginnging
//this is just for converting to the right type
for (int i = 0; i < coutport.length(); i++) …Run Code Online (Sandbox Code Playgroud) 我2的设备类型具有不同的协议并与单个串行端口连接。通过协议,我的意思是串口配置不同。
我有一个协议 ID p_id,我可以通过它检查当前正在读取哪个设备。下面是我的代码
下面是我的主函数,它调用一个名为的类 CombinedEngine
static class Program
{
private static CombinedEngine _eng;
static async Task Main(string[] args)
{
try
{
_eng = new CombinedEngine();
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message.ToString());
//_log.Error(ex, ex.Message);
}
}
while(true);
}
Run Code Online (Sandbox Code Playgroud)
组合发动机类
class CombinedEngine
{
SerialPort port = new SerialPort();
public CombinedEngine()
{
try
{
var p = mdc.mdc_protocol.ToList();
if(p.Count > 0)
{
foreach(var pr in p)
{
var p_id = pr.protocol_id;
if(p_id=="01")//modbus
{
if (port.IsOpen)
port.Close();
port = new …Run Code Online (Sandbox Code Playgroud)