我想从Java程序接收Arduino Uno上的多个字节。arduino在收到数据后立即处理数据,因此我不需要存储它,我使用串行RX缓冲区作为临时存储,直到我实际读取字节为止。完全实现后,每次将发送大约150个字节,但我已经修改了缓冲区大小来解决这个问题。我使用jSerialComm作为java的串行库
我在下面放了一些arduino和java代码。当我从IDE的串行监视器发送字节,按预期点亮led时,arduino代码可以完美地工作。但是,只要我尝试用java代码发送字节,RX板载led就会闪烁,但黄色led从不亮起,ExecuteMove()不会触发。我试着放一根线。在尝试关闭端口之前执行sleep(),但这没有帮助。
阿杜伊诺
int GREEN = 4;
int BLUE = 3;
int YELLOW = 2;
void setup() {
pinMode(GREEN, OUTPUT);
pinMode(BLUE, OUTPUT);
pinMode(YELLOW, OUTPUT);
Serial.begin(9600);
}
void loop() {
byte rb = Serial.read();
if(rb != 255){ //Documentation says it sould be -1, but I'v tested it and
it's 255
digitalWrite(YELLOW, HIGH);
ExecuteMove(rb);
delay(500);
digitalWrite(YELLOW, LOW);
}
}
void ExecuteMove(byte _move){
Lights up the green LED if _move == 65, blue if 66 (Works perfectly)
}
Java语言
public static void main(String[] args) throws IOException,
InterruptedException{
SerialPort sp = SerialPort.getCommPort("COM3");
sp.setComPortParameters(9600, 8, 1, 0);
sp.setComPortTimeouts(SerialPort.TIMEOUT_WRITE_BLOCKING, 0, 0);
if(sp.openPort()) {
System.out.println("Port is open");
}else {
System.out.println("Port failed to open");
return;
}
byte[] message = {65, 66, 65};
for(int i = 0; i < message.length; i++) {
sp.getOutputStream().write(message[i]); //Sends the message
sp.getOutputStream().flush();
}
if(sp.closePort()) {
System.out.println("Port is closed");
}else {
System.out.println("Failed to close port");
return;
}
}
正如我已经说过的,仅arduino代码就可以完美地与显示器配合使用,但当我使用java代码发送字节时,只有RX led点亮,但没有一个“我的”LED点亮
对于任何偶然发现这篇文章和那篇接缝的人来说,都有类似的问题,这是因为Windows在打开端口时向arduino发送了一个重置信号。因为它会在之后立即发送数据,所以Arduino会在重置时从缓冲区中删除它,并且永远无法读取它。有两种主要方法可以纠正这一点,首先在打开端口和发送数据之间添加一个Thread.sleep(5000);
。您还可以在RESET和GND引脚之间添加一个47μF电容器。
资料来源:https://arduino.stackexchange.com/questions/22267/java-jssc-arduino-windows https://forum.arduino.cc/index.php?topic=96422.0
希望这能帮助别人
我试图通过使用命令“java postfix 错误: 请在java.util.scanner.throwfor(未知源) 在java.util.scanner.next(未知源) 在java.util.scanner.nextInt(未知源) 在java.util.scanner.nextInt(未知源) 在java.util.scanner.nextInt(未知源) 在java.util.sca
如何在java中读取整数输入...我尝试了缓冲阅读器和扫描仪...但它不输出任何东西...我正在使用eclipse Indigo...它会影响输出吗... 示例代码:
问题内容: 我想做一个带有控制台扩展的简单服务器http服务器。我找到了要从命令行数据读取的代码段。 好再问一次问题,我不能简单地使用循环?如果服务器在询问时间接收到输出,也会破坏线路。 问题答案: 您不能执行“ while(done)”循环,因为这将需要阻塞输入,而node.js则不喜欢这样做。 而是设置一个在每次输入内容时都要调用的回调:
本文向大家介绍C#从控制台读取字符串的方法,包括了C#从控制台读取字符串的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#从控制台读取字符串的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的C#程序设计有所帮助。
问题内容: 我有此方法,并且从控制台(键盘)读取了一个整数序列,并将所有整数添加到ArrayList中,我使用Scanner类读取了这些数字,但是在for循环中不起作用,它抛出“ java.util.NoSuchElementException”。 问题答案: 首先,使用一个扫描仪,而不是每次都重新创建一个扫描仪。此外,您的for循环还会多循环一次。 这对我来说很好,最后列表包含了我输入的所有数字
我正在尝试从Java应用程序的Google Sheets API。我已经访问了教程中提到的文件,但我无法访问我自己创建的任何文件。 这是我使用的代码: 我在Drive中手动创建了一个电子表格,用字符串填充A1: B,并从URL中复制了id,看起来像“1IeoY5jY3Su86x1uvgc1yJqEU-6dd6FdUKo8Yf5J73k”(不是实际的ID)。 这将生成错误400无法解析范围:类数据!