Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Java向Arduino发送int_Java_Arduino_Serial Port - Fatal编程技术网

从Java向Arduino发送int

从Java向Arduino发送int,java,arduino,serial-port,Java,Arduino,Serial Port,我正试图从Java程序向Arduino板发送一个int。 我从 Java代码: package com.thetrialbot.arduinosteppercontrol; 导入java.io.BufferedReader; 导入java.io.InputStreamReader; 导入java.io.OutputStream; 输入gnu.io.CommPortIdentifier; 导入gnu.io.SerialPort; 导入gnu.io.SerialPortEvent; 导入gnu.io

我正试图从Java程序向Arduino板发送一个int。
我从

Java代码:

package com.thetrialbot.arduinosteppercontrol;
导入java.io.BufferedReader;
导入java.io.InputStreamReader;
导入java.io.OutputStream;
输入gnu.io.CommPortIdentifier;
导入gnu.io.SerialPort;
导入gnu.io.SerialPortEvent;
导入gnu.io.SerialPortEventListener;
导入java.util.Enumeration;
公共类SerialTest实现SerialPortEventListener{
串行端口串行端口;
/**我们通常使用的端口*/
私有静态最终字符串端口名称[]={
“/dev/tty.usbserial-A9007UX1”,//Mac OS X
“/dev/ttyACM0”,//树莓皮
“/dev/ttyUSB0”,//Linux
“COM3”//Windows
};
/**
*由InputStreamReader馈送的缓冲读取器
*将字节转换为字符
*使显示的结果代码页独立
*/
专用缓冲读取器输入;
/**将输出流发送到端口*/
私有输出流输出;
/**等待端口打开时阻止的毫秒数*/
专用静态最终整数超时=2000;
/**COM端口的默认位/秒*/
专用静态最终整数数据率=9600;
公共无效初始化(){
//下一行是覆盆子皮和
//让我们进入while循环,这里有人建议http://www.raspberrypi.org/phpBB3/viewtopic.php?f=81&t=32186
//setProperty(“gnu.io.rxtx.SerialPorts”,“/dev/ttyACM0”);
CommPortIdentifier portId=null;
枚举portEnum=CommPortIdentifier.getPortIdentifiers();
//首先,查找端口名称中设置的串行端口实例。
while(portEnum.hasMoreElements()){
CommPortIdentifier currPortId=(CommPortIdentifier)portEnum.nextElement();
for(字符串端口名称:端口名称){
if(currPortId.getName().equals(portName)){
portId=currPortId;
打破
}
}
}
if(portId==null){
System.out.println(“找不到COM端口”);
返回;
}
试一试{
//打开串行端口,并使用类名作为appName。
serialPort=(serialPort)portId.open(this.getClass().getName(),
超时);
//设置端口参数
serialPort.setSerialPortParams(数据速率,
SerialPort.DATABITS_8,
SerialPort.STOPBITS_1,
串行端口。奇偶校验(无);
//开河
输入=新的BufferedReader(新的InputStreamReader(serialPort.getInputStream());
output=serialPort.getOutputStream();
//添加事件侦听器
serialPort.addEventListener(此);
serialPort.notifyOnDataAvailable(true);
}捕获(例外e){
System.err.println(例如toString());
}
}
/**
*当您停止使用该端口时,应调用此函数。
*这将防止Linux等平台上的端口锁定。
*/
公共同步作废关闭(){
如果(serialPort!=null){
serialPort.removeEventListener();
serialPort.close();
}
}
/**
*处理串行端口上的事件。读取并打印数据。
*/
公共同步的void serialEvent(SerialPortEvent-oEvent){
if(oEvent.getEventType()==SerialPortEvent.DATA\u可用){
试一试{
字符串inputLine=input.readLine();
系统输出打印LN(输入线);
输出。写入(1);
}捕获(例外e){
System.err.println(例如toString());
}
}
/忽略所有其他事件类型,但您应该考虑其他事件类型。
}
公共静态void main(字符串[]args)引发异常{
SerialTest main=新的SerialTest();
main.initialize();
线程t=新线程(){
公开募捐{
//下一行将使此应用保持活动状态1000秒,
//等待事件发生并对其作出响应(将传入消息打印到控制台)。
尝试{Thread.sleep(1000000);}catch(InterruptedException ie){}
}
};
t、 start();
System.out.println(“已启动”);
}
}
Arduino代码:

#定义led 13//内置led
字符输入缓冲区[10];
无效设置(){
Serial.begin(9600);
}
void循环(){
Serial.println(“你好世界”);
延迟(1000);
如果(Serial.available()>0){
Serial.readBytes(inputBuffer,Serial.available());
延迟(5000);
串行打印(输入缓冲区);
}
}
这是控制台的图像,因为角色无法正确粘贴


我更改了Arduino端的程序,使其同步运行。Arduino一侧速度足够慢,没有延迟。
延时(5)用于获取计算时间并收集端口上挂起的输入。使用
inputBuffer
输入的数字被切碎,部分丢失,而下一部分被覆盖。一个字符一个字符地获取输入足够快,只需提交数字即可。
“你好,世界!”
应该只发送一次

boolean show = false;
int c = 0;
int num = 0;

void setup() {
  Serial.begin( 9600 );
  Serial.setTimeout( 450 );
  while( ! Serial ) {}
  Serial.println( "Hello world!" );
}

void loop() {
  while( Serial.available() > 0 ) {
    c = Serial.read();
    if( c != '\n' )   // only needed for terminal-programs
      num = num * 10 + (c - '0');
    if( Serial.available() == 0 )
      delay( 5 );  /* 2 */
    show = true;
  }
  if( show ) {
    Serial.println( num );
    Serial.flush();
    num = 0;
    show = false;
  }
}
从Java(这里有第7个脚本引擎)中,数字1…100作为字符串发送,并在Arduino端更改为其数值–再次发送回Java并打印出来。要进行安装,请访问本侧并将3个jar文件放在同一目录中。启动第七个.jar文件。将程序剪切并粘贴到编辑器中,然后按Eval。
1500睡眠
为Arduino提供打开端口的时间

: numbers
  101 0 do
    i str$ portwrite
    portread type
  loop
;
"COM10" 9600 8 0 1 0  6 PORT a!
portopen
1500 sleep  (* 1 *)
numbers
portclose

我已经更改了Arduino端的程序,使其运行synchro