我想从 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 都没有
Qyouu
相关分类