Я хочу получить несколько байтов на Arduino Uno из Java-программы. Arduino обрабатывает данные, как только они получены, и, таким образом, мне не нужно их хранить, я использую буфер Serial RX в качестве временного хранилища, пока я фактически не читаю байты. После полной реализации около 150 байтов будет отправляться каждый раз, но я изменил размер буфера, чтобы позаботиться об этом. Я использую jSerialComm в качестве моей последовательной библиотеки для Java
Я поместил немного кода Arduino и Java ниже. Код arduino отлично работает, когда я посылаю байты с последовательного монитора IDE, подсвечивая светодиод, как и предполагалось. Но как только я пытаюсь отправить байты с кодом java, светодиод RX на борту мигает, но желтый светодиод никогда не загорается, а ExecuteMove () не срабатывает. Я пытался установить Thread.sleep (), прежде чем пытаться закрыть порт, но это не помогает.
Arduino
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, но ни один из "моих" светодиодов не работает