为了账号安全,请及时绑定邮箱和手机立即绑定

Arduino 可以从控制台读取字节,但不能从 java

Arduino 可以从控制台读取字节,但不能从 java

拉丁的传说 2022-10-26 16:22:55
我想从 Java 程序接收 Arduino Uno 上的多个字节。arduino 收到数据后会立即处理,因此我不需要存储它,我使用串行 RX 缓冲区作为临时存储,直到我真正读取字节。完全实现后,每次将发送大约 150 个字节,但我已经修改了缓冲区大小以解决这个问题。我使用 jSerialComm 作为我的 java 串行库我在下面放了一些 arduino 和 java 代码。当我从 IDE 的串行监视器发送字节时,arduino 代码可以完美运行,按预期点亮 LED。但是,一旦我尝试使用 java 代码发送字节,RX 板载 LED 就会闪烁,但黄色 LED 永远不会亮起,并且 ExecuteMove() 不会触发。我试图在尝试关闭端口之前放置一个 Thread.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)  }爪哇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 都没有
查看完整描述

1 回答

?
Qyouu

TA贡献1786条经验 获得超11个赞

对于任何偶然发现这篇文章并且接缝有类似问题的人来说,这是因为 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

希望这可以帮助某人


查看完整回答
反对 回复 2022-10-26
  • 1 回答
  • 0 关注
  • 101 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信