Я делаю программу на Java, которая обрабатывает данные о погоде, полученные от Arduino Uno. Он хранит данные в базе данных и отправляет их на разные apis.
Я использую библиотеку jSerialComm для получения данных, которые отправляются через последовательный порт из Arduino. Я использую SerialPortEvent
, который запускается, как только Arduino отправляет какие-либо данные (я не использую InputStream
, потому что некоторые другие функции в программе больше не будут работать).
Javacode:
(enable () вызывается в основном методе программы)
import com.fazecast.jSerialComm.SerialPort;
import com.fazecast.jSerialComm.SerialPortDataListener;
import com.fazecast.jSerialComm.SerialPortEvent;
public class Arduino implements SerialPortDataListener {
@Override
public void enable() {
SerialPort comPort = SerialPort.getCommPort("COM5");
System.out.println(comPort.getDescriptivePortName());
comPort.openPort();
comPort.setBaudRate(9600);
comPort.addDataListener(this);
}
@Override
public int getListeningEvents() {
return SerialPort.LISTENING_EVENT_DATA_AVAILABLE;
}
@Override
public void serialEvent(SerialPortEvent event) {
byte[] newData = event.getReceivedData();
System.out.println(newData);
}
}
Программа Arduino:
(пока простая тестовая программа)
void setup() {
Serial.begin(9600);
}
int i = 0;
void loop() {
Serial.println(i);
i++;
delay(1000);
}
Но независимо от того, что я делаю, метод SerialPortEvent.getReceivedData()
всегда возвращает null
вместо byte[]
-объекта (выводится раз в секунду, когда Arduino отправляет свои данные):
Консольный вывод:
User-Specified Port
null
null
null
null
...
Где моя ошибка?